from aliyunsdkcore.client import AcsClient
from aliyunsdkrds.request.v20140815 import DescribeBackupsRequest
import hashlib
import json
import requests
import datetime
import logging
import os
from urllib.request import urlopen
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s")
class Rds_Bakup:
def __init__(self):
self.access_key_id = "xxxx"
self.access_key_secret="xxxxxxxxxxxxxx"
self.region_id="cn-beijing"
self.db_id="xxxxxxxxxxxxx"
self.product_code='RDS'
self.star_time = (datetime.datetime.utcnow() - datetime.timedelta(days=1)).strftime('%Y-%m-%dT%H:%MZ')
self.end_time = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%MZ')
self.accept_format = "json"
self.accept_name = "DescribeBackups"
self.bakup_time = datetime.datetime.now().strftime('%Y-%m-%d')
self.rds_bakup_dir = "/data/rdsbak/fullbak/{}".format(self.bakup_time)
if not os.path.exists(self.rds_bakup_dir) :
os.mkdir(self.rds_bakup_dir)
def client_request(self):
client = AcsClient(self.access_key_id, self.access_key_secret, self.region_id)
request = DescribeBackupsRequest.DescribeBackupsRequest()
request.set_accept_format(self.accept_format)
request.set_action_name(self.accept_name)
request.set_DBInstanceId(self.db_id)
request.set_StartTime(self.star_time)
request.set_EndTime(self.end_time)
return client, request
def rds_down(self):
result = self.client_request()[0].do_action_with_exception(self.client_request()[1]).decode()
s=json.loads(result)
for bak_item in s['Items']['Backup']:
for k,v in bak_item.items():
if k == "BackupIntranetDownloadURL" :
file_down_url = v
file_name = v.split('?')[0].split('/')[-1]
req = urlopen(file_down_url)
log_file = "{0}/{1}_down.log".format(self.rds_bakup_dir, file_name)
file_handle = logging.FileHandler(log_file, encoding='utf-8')
self.logger = logging.getLogger(log_file)
self.logger.addHandler(file_handle)
chunk = 32 * 1024
try:
with open('{0}/{1}'.format(self.rds_bakup_dir, file_name), 'wb') as fobj:
while True:
data = req.read(chunk)
if not data:
break
fobj.write(data)
self.logger.info("下載成功 {}".format(s))
sha_file = "{0}/{1}.SHA256".format(self.rds_bakup_dir, file_name)
sha_handle = logging.FileHandler(sha_file, encoding='utf-8')
self.logger = logging.getLogger(sha_file)
self.logger.addHandler(sha_handle)
hash_digest = hashlib.sha256()
with open('{}/{}'.format(self.rds_bakup_dir, file_name), 'rb') as hobj:
while True:
data = hobj.read(chunk)
if not data:
break
hash_digest.update(data)
self.logger.info("SHA256: {}".format(hash_digest.hexdigest()))
except Exception as e:
self.logger.info("下載出錯 {}".format(e))
if __name__ == '__main__':
getfile = Rds_Bakup()
try:
getfile.rds_down()
logging.info("下載成功 !!!")
except Exception as e:
logging.info("下載出錯 {}".format(e))
利用阿里云RDS PYTHON-SDK進行數(shù)據(jù)庫全量備份下載
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來调违,“玉大人窟哺,你說我怎么就攤上這事〖技纾” “怎么了且轨?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長亩鬼。 經(jīng)常有香客問我殖告,道長,這世上最難降的妖魔是什么雳锋? 我笑而不...
- 正文 為了忘掉前任黄绩,我火速辦了婚禮,結(jié)果婚禮上玷过,老公的妹妹穿的比我還像新娘爽丹。我一直安慰自己,他們只是感情好辛蚊,可當(dāng)我...
- 文/花漫 我一把揭開白布粤蝎。 她就那樣靜靜地躺著,像睡著了一般袋马。 火紅的嫁衣襯著肌膚如雪初澎。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼贞间,長吁一口氣:“原來是場噩夢啊……” “哼贿条!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起增热,我...
- 正文 年R本政府宣布,位于F島的核電站鸭廷,受9級特大地震影響枣抱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辆床,卻給世界環(huán)境...
- 文/蒙蒙 一佳晶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧讼载,春花似錦轿秧、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至一喘,卻和暖如春驱还,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凸克。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 本案例是利用書中的示例美國農(nóng)業(yè)部(USDA)制作了一份有關(guān)食物營養(yǎng)信息的數(shù)據(jù)庫。這邊提供一個JSON格式的文件 f...
- 第十四章 數(shù)據(jù)分析示例 注:本章示例數(shù)據(jù)集可在附帶的GitHub倉庫(http://github.com/wesm...
- 下載備份 到阿里云的rds備份頁面,下載對應(yīng)的備份文件包孝鹊。 文件是tar.gz格式的炊琉。 阿里云官方文檔,是關(guān)于整個...
- 黑色的海島上懸著一輪又大又圓的明月,毫不嫌棄地把溫柔的月色照在這寸草不生的小島上柳骄。一個少年白衣白發(fā)团赏,悠閑自如地倚坐...