python自动下载阿里云数据库数据_阿里云数据库Redis备份下载(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)

response = client.do_action_with_exception(request)

return json.loads(response).get('Instances')['KVStoreInstance']

#根据实例ID获取备份下载地址列表

def get_bak_urls(instId, startTime, endTime):

request = DescribeBackupsRequest()

request.set_accept_format('json')

request.set_StartTime(startTime)

request.set_EndTime(endTime)

request.set_InstanceId(instId)

response = client.do_action_with_exception(request)

return json.loads(response).get('Backups').get('Backup')

#根据下载地址下载备份到本地(IDC备份机111.11.11.11)

def get_redis_bak(folder_path,url):

if not os.path.exists(folder_path):

print("Selected folder not exist, try to create it.")

os.makedirs(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):

if 'aliyun_redis_bak.py' not in filename :

print("remove file 30 days ago :")

os.remove(filename)

print(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__":

bak_home = '/backup/aliyun_redis_bak/'

delFilesOfDirAndSubdir(bak_home, 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(bak_home + kvs['InstanceName'], bak['BackupDownloadURL'])

print('End get baks of: ' + kvs['InstanceName'])

#pip3 install requests

#pip3 install request

#pip3 install aliyunsdkcore

#pip3 install aliyunsdkr_kvstore

#pip3 install aliyun-python-sdk-r-kvstore

#pip3 install aliyun-python-sdk-core-v3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值