Ali cloud database Redis backup download (Python)

#!/usr/bin/env python3.6
#coding=utf-8
import os
import urllib.request, json, datetime, time
import ssl
from aliyunsdkcore.client import AcsClient
from aliyunsdkr_kvstore.request.v20150101.DescribeBackupsRequest import DescribeBackupsRequest
from aliyunsdkr_kvstore.request.v20150101.DescribeInstancesRequest import DescribeInstancesRequest
 
 
client = AcsClient('********************', '**************************', 'cn-xxx')
 
 
#获取阿里云redis实例列表
def get_redis_insts():
    request = DescribeInstancesRequest()
    request.set_accept_format('json')
    request.set_PageNumber(1)
    request.set_PageSize(100)
    = client.do_action_with_exception Response (Request) 
        Print ( "the Selected Folder not exist,try to create it.")
    json.loads return (Response) .get ( 'the Instances') [ 'KVStoreInstance'] 
 
 
# Download obtain the backup ID list according to Example 
DEF get_bak_urls (instId, the startTime, endTime): 
    Request = DescribeBackupsRequest () 
    request.set_accept_format ( 'JSON' ) 
    request.set_StartTime (the startTime) 
    request.set_EndTime (endTime) 
    request.set_InstanceId (instId) 
    Response = client.do_action_with_exception (Request) 
    return json.loads (Response) .get ( 'Backups'). GET ( 'Backup') 
 
 
# The Download to download a backup local (IDC backup machine 111.11.11.11) 
DEF get_redis_bak (folder_path, URL): 
    IF Not os.path.exists (folder_path): 
        os.makdirs (folder_path) 
    filename = url.split ( '/') [ -1] .split ( '?') [0]
    filepath = folder_path + '/' + filename
    if os.path.exists(filepath):
        print("File have already exist. skip")
    else:
        try:
            print("Try downloading file: {}".format(url))
            ssl._create_default_https_context = ssl._create_unverified_context #导入ssl时关闭证书验
            urllib.request.urlretrieve(url, filename=filepath)
            print("Done")
        except Exception as e:
            print("Error occurred when downloading file, error message:")
            print(e)
 
 
#清理30天前的备份文件
def fileremove(filename, remove_time):
    timeInt = os.path.getmtime(filename)
    sec = remove_time * 86400
    cc = time.time()
    if int(timeInt) < int(cc)-int(sec):
        os.remove(filename)
 
 
def delFilesOfDirAndSubdir(filedir, deltime):
    if os.path.isfile(filedir):
        fileremove(filedir, deltime)
    else:
        try:
            for i in os.listdir(filedir):
                if os.path.isfile(filedir + '/' +i):
                   fileremove(filedir + '/' + i, deltime)
                else:
                    new_dir = filedir + '/' + i
                    delFilesOfDirAndSubdir(new_dir, deltime)
        except Exception as e:
            print("Error occurred when remove file, error message:")
            print(e)
 
 
if __name__ == "__main__":
    delFilesOfDirAndSubdir('/backup/aliyun_redis_bak', 30)
    now = datetime.datetime.now()
    thirtyDaysAgo = (datetime.datetime.now() - datetime.timedelta(days=30))
    endTime = now.strftime("%Y-%m-%dT%H:%MZ")
    startTime = thirtyDaysAgo.strftime("%Y-%m-%dT%H:%MZ")
    for kvs in get_redis_insts():
        print('Begin get baks of: '+ kvs['InstanceName'])
        bakList = get_bak_urls(kvs['InstanceId'], startTime, endTime)
        for bak in bakList:
            get_redis_bak(kvs['InstanceName'],bak['BackupDownloadURL'])
        print('End  get baks of: '+ kvs['InstanceName'])
 
 
#pip install aliyun-python-sdk-core-v3
#pip install aliyun-python-sdk-r-kvstore

  

Guess you like

Origin www.cnblogs.com/dblock/p/11810348.html