1. 程式人生 > >Python自定義阿裏雲RDS備份策略

Python自定義阿裏雲RDS備份策略

rds備份 python

一、背景

由於越來越多的客戶對應數據安全的重視,目前阿裏雲RDS提供了備份策略,但是備份策略周期為每天的某一個時間,在日常雲運維工作中,有客戶提出需要每天在不同的時間節點多備份幾次,此時web界面就不能滿足此類在一天內多次備份的需求,但是想到了在阿裏雲web控制臺通過手動點擊創建備份,是可以在點擊後觸發創建備份的任務,想到可以利用api來實現,同時提交工單咨詢了下,果然此類需求是需要api來做,故寫了個調用python實例配合linux系統的crond服務來完成。
技術分享圖片
技術分享圖片

二、代碼

github地址

#!/bin/env python
# -*- coding:utf-8 -*-
# _author:kaliarch

from aliyunsdkcore import client
from aliyunsdkrds.request.v20140815 import CreateBackupRequest
import time
import os
import logging

class rdsOper():
    def __init__(self,logger):
        self.clentoper = client.AcsClient(‘LTAIhfXlcjyln****‘,‘Gwf****4K2ELmt76184o****gRfAso‘,‘cn-shanghai‘)
        self.logger = logger
        self.logger.info("------------------------start exec rds backup API log-------------")
    def backup_instance(self):
        # 設置參數
        request = CreateBackupRequest.CreateBackupRequest()
        request.set_accept_format(‘json‘)
        request.add_query_param(‘DBInstanceId‘, ‘rm-uf6xv3**1x842y61y‘)

        #如果為單庫備份,可以添加DBName
        # request.add_query_param(‘DBName‘, ‘mydb‘)

        #BackupMethod為備份方式:Logical:邏輯備份,Physical:物理備份
        request.add_query_param(‘BackupMethod‘, ‘Physical‘)
        #BackupType為備份類型: Auto:自動計算是全量備份還是增量備份;FullBackup:全量備份。默認值為Auto。
        request.add_query_param(‘BackupType‘, ‘Auto‘)

        response = self.clentoper.do_action_with_exception(request)
        self.logger.info("rdsbackup mission submission successful!")
        self.logger.info(response)
        print(response)

class Rds_Log:
    def __init__(self,filename):
        self.filename = filename
    def createDir(self):
        _LOGDIR = os.path.join(os.path.dirname(__file__), ‘rdsbackuplog‘)
        print(_LOGDIR)
        _TIME = time.strftime(‘%Y-%m-%d‘, time.gmtime()) + ‘-‘
        _LOGNAME = _TIME + self.filename
        print(_LOGNAME)
        LOGFILENAME = os.path.join(_LOGDIR, _LOGNAME)
        print(LOGFILENAME)
        if not os.path.exists(_LOGDIR):
            os.mkdir(_LOGDIR)
        return LOGFILENAME

    def createlogger(self,logfilename):
        logger= logging.getLogger()
        logger.setLevel(logging.INFO)
        handler = logging.FileHandler(logfilename)
        handler.setLevel(logging.INFO)
        formater = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)
        handler.setFormatter(formater)
        logger.addHandler(handler)
        return logger

if __name__ == "__main__":
    glploger = Rds_Log(‘rdsbackup.log‘)
    logfilename = glploger.createDir()
    logger = glploger.createlogger(logfilename)

    app = rdsOper(logger)
    app.backup_instance()

三、配合定時任務

在隨便服務器上傳代碼安裝好相關python的sdk後
制作定時任務
技術分享圖片
查看日誌
技術分享圖片
查看後天有備份任務已經提交完成
技術分享圖片
舉一反三,類似的可以參考阿裏雲rds的API完成其他需求,如何客戶對應rds的備份頻率很高的話,可以開通災備實例,來完成異地的實時備份,如果橫向擴展讀寫操作,可以開通多個只讀實例來分攤數據庫壓力。
https://help.aliyun.com/document_detail/26272.html?spm=5176.doc26228.6.821.Ux0gk1

Python自定義阿裏雲RDS備份策略