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

1、背景

因爲愈來愈多的客戶對應數據安全的重視,目前阿里雲RDS提供了備份策略,可是備份策略週期爲天天的某一個時間,在平常雲運維工做中,有客戶提出須要天天在不一樣的時間節點多備份幾回,此時web界面就不能知足此類在一天內屢次備份的需求,可是想到了在阿里雲web控制檯經過手動點擊建立備份,是能夠在點擊後觸發建立備份的任務,想到能夠利用api來實現,同時提交工單諮詢了下,果真此類需求是須要api來作,故寫了個調用python實例配合linux系統的crond服務來完成。 html

2、代碼

github地址python

#!/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()
複製代碼

3、配合定時任務

在隨便服務器上傳代碼安裝好相關python的sdk後 製做定時任務 linux

查看日誌
查看後天有備份任務已經提交完成
觸類旁通,相似的能夠參考阿里雲rds的API完成其餘需求,如何客戶對應rds的備份頻率很高的話,能夠開通災備實例,來完成異地的實時備份,若是橫向擴展讀寫操做,能夠開通多個只讀實例來分攤數據庫壓力。 help.aliyun.com/document_de…

目前對應數據庫的備份,阿里雲新上線了DBS參考連接

  • 支持ECS自建數據庫的異地備份
  • 支持RDS數據庫的異地備份
  • 支持本地IDC自建數據庫的異地備份
  • 支持公網數據庫的異地備份(還包含部署在AWS、Azure、騰訊雲等其餘雲計算廠商的數據庫)

此產品不只支持衆多場景的數據庫備份,將其存儲在阿里雲的OSS,而且能夠設置加密存儲,上保障了備份數據的安全和可靠性,同時能夠設置備份對象精細到表級別而且支持增量備份,同時能夠配置備份的生命週期,可隨時利用備份數據簡單幾部就能夠進行數據恢復,測試了下,發現很好用,可是目前查看官網沒有對應API,對於天天須要超過兩次以上的備份發現只能建立多個備份任務。git

相關文章
相關標籤/搜索