很多数据都做了备份,而且全都用脚本完成。并定时下载一份回我们本地,等于多多点异地备份了,避免被一锅端了的情况。
像代码,这个是分发的,而且开发人手一份,这个就不备份了。用户静态数据也都定时做了rsync同步备份,压缩保存。
连测试环境的数据库都做了自动的MySQL逻辑备份。唯独线上环境,存在RDS中的MySQL数据库,虽然有RDS定时备份实例,但是不经常上去下载一份保存回本地你是不得安心的。
这万一被盗号了呢。。。岂不是辛辛苦苦几十年,一删回到解放前。
本来是可以用mysqldump -h 远程IP
这样备份的。但是RDS可能是防止脱裤,搞了限制。所以,往日都是我自己上阿里云官网,手动点击下载备份。
为了减少这一部分的重复劳动,我决定用阿里云的SDK搞一个自动下载实例。
以为会遇到很多麻烦,没想到SDK封装得还不错,使用异常简单。
步骤分为如下几步
安装阿里云API封装的Python SDK
里面几乎有阿里云所有产品的SDK,这给我们定制自己的工具提供了很大的便利。
这里我们要用的是RDS相关的功能,所以 sudo pip install aliyun-python-sdk-rds
就行了。
申请访问API需要用的Access Key。
最好先新建RAM账号,再申请AK。
编码
整个备份逻辑很简单,就是查看指定日期区间备份列表,获取备份信息。然后下载备份。
主要用到SDK DescribeBackupsRequest
这个类。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| from aliyunsdkcore import client
from aliyunsdkrds.request.v20140815 import DescribeBackupsRequest import json import requests import datetime
saveRoot='/home/phan/backups/'
def downLink(url,dateStr): downFile = requests.get(url) savePath = '%s%s.tar.gz'%(saveRoot,dateStr) with open(savePath,'wb') as backup_file: backup_file.write(downFile.content)
today=datetime.date.today(); yesterday=datetime.date.today() - datetime.timedelta(1)
clt = client.AcsClient('你的AK','你的ASK','cn-shenzhen')
request = DescribeBackupsRequest.DescribeBackupsRequest()
request.set_accept_format('json') request.set_action_name('DescribeBackups') request.set_DBInstanceId('rm-xxxxxxxxxxx') request.set_StartTime('%sT00:00Z'%(yesterday)) request.set_EndTime('%sT00:00Z'%(today)) result = clt.do_action_with_exception(request)
if result: json_rds = json.loads(result) if json_rds['Items']['Backup'][0]['BackupStatus']=='Success': downLink(json_rds['Items']['Backup'][0]['BackupDownloadURL'],today)
print u"数据库备份完成"
|
至此,加入crontab,备份基本全自动了。
参考资料
Aliyun Python SDK
Aliyun RDS Help