def get_DescribeBackups(self, DBInstanceId, StartTime, EndTime): request = DescribeBackupsRequest.DescribeBackupsRequest() request.set_accept_format('json') request.set_action_name('DescribeBackups') request.set_StartTime(StartTime) request.set_EndTime(EndTime) request.set_DBInstanceId(str(DBInstanceId)) return self.clt.do_action_with_exception(request)
def get_fullbackup_files(self, start_time, end_time=None, top=0, dummy=False): files = list() request = DescribeBackupsRequest.DescribeBackupsRequest() # Aliyun SDK works on this way: [Backup End Time] # BETWEEN [search start time] AND [search end time]. # And full backup is taken once at most per day. # So it is safe to add 1 day on last backup end time as # current start time to avoid reundant downloading. start_time += timedelta(days=1) request.set_StartTime(start_time.strftime("%Y-%m-%dT00:00Z")) if end_time: search_end_time = end_time else: search_end_time = datetime.utcnow() # Add 1 day to end time because it is exclusive in SDK search_end_time += timedelta(days=1) request.set_EndTime(search_end_time.strftime("%Y-%m-%dT00:00Z")) request.set_DBInstanceId(self.instance_id) request.set_PageSize(100) read_record_cnt = 0 page_num = 1 while True: request.set_PageNumber(page_num) response = json.loads( self.client.do_action_with_exception(request)) for bkp in response['Items']['Backup']: download_url = bkp["BackupDownloadURL"] host_id = bkp["HostInstanceID"] file_status = 0 if bkp["BackupStatus"] == "Success" else 1 file_size = bkp["BackupSize"] file_start_time = datetime.strptime(bkp["BackupStartTime"], "%Y-%m-%dT%H:%M:%SZ") file_end_time = datetime.strptime(bkp["BackupEndTime"], "%Y-%m-%dT%H:%M:%SZ") file = DBFile(download_url, host_id, self.region_id, self.instance_id, file_start_time, file_end_time, file_type='full', file_status=file_status, file_size=file_size) if not dummy: logger.info(file) files.append(file) read_record_cnt += response["PageRecordCount"] page_num += 1 if ((top > 0 and read_record_cnt >= top) or read_record_cnt >= response["TotalRecordCount"]): break return files
def DescribeBackups(self, dbInstanceId, startTime, endTime): request = DescribeBackupsRequest.DescribeBackupsRequest() request.set_accept_format('json') request.set_DBInstanceId(dbInstanceId) request.set_StartTime(startTime) request.set_EndTime(endTime) s = json.loads(self.clt.do_action(request)) result = [] for item in s['Items']['Backup']: result.append(item['BackupDownloadURL']) return result
def downfullbackupfile(DBInstanceId, dbname): logger = logg(backpath) clt = client.AcsClient('LTAIdXv2B0S', '7TwqyooEjgX', 'cn-beijing') #这里的地区ID非必须的 request = DescribeBackupsRequest.DescribeBackupsRequest() today, yesterday = getdate() ## 以下请求的参数都是必须的 尤其实例名和查询区间 request.set_accept_format('json') request.set_action_name('DescribeBackups') request.set_DBInstanceId(DBInstanceId) # 你的实例ID request.set_StartTime(yesterday) request.set_EndTime(today) try: result = clt.do_action_with_exception(request) if result: json_rds = json.loads(result) lists = json_rds['Items']['Backup'] if len(lists) == 0: logger.error(u"%s %s 数据库没有备份文件" % (yesterday, dbname)) for l in lists: BackupDownloadURL = l['BackupDownloadURL'] BackupStatus = l['BackupStatus'] BackupSize = l['BackupSize'] BackupType = l['BackupType'] DBInstanceId = l['DBInstanceId'] BackupEndTime = l['BackupEndTime'] BackupStartTime = l['BackupStartTime'] BackupStartTime = datetime.datetime.strptime( BackupStartTime, "%Y-%m-%dT%H:%M:%SZ").strftime("%Y%m%d%H%M%S") BackupEndTime = datetime.datetime.strptime( BackupEndTime, "%Y-%m-%dT%H:%M:%SZ").strftime("%Y%m%d%H%M%S") filename = dbname + '_' + DBInstanceId + '_' + BackupStartTime + '_' + BackupEndTime + '_' + BackupType #print(json_rds) if BackupStatus == 'Success': filename = '%s.tar.gz' % (filename) backfullpath = os.path.join(backpath, filename) downLink(BackupDownloadURL, backfullpath) print(u"%s%s 数据库备份完成" % (yesterday, dbname)) logger.info(u"%s %s 数据库备份完成,文件大小%sM" % (yesterday, dbname, round(BackupSize / 1024 / 1024, 2))) else: print(u"%s%s 数据库备份失败" % (yesterday, dbname)) logger.error(u"%s %s 数据库备份失败" % (yesterday, dbname)) except Exception as e: logger.error(e) print(e)
def listBackUps(client, dbInstanceId, startTime, endTime): request = DescribeBackupsRequest.DescribeBackupsRequest() #Setting request parameters request.set_DBInstanceId(dbInstanceId) request.set_StartTime(startTime) request.set_EndTime(endTime) try: response = client.do_action_with_exception(request) return response except ServerException as exception: print("Error while listing backups.") print("HTTP statue = ", exception.get_http_status()) print("HTTP Error code = ", exception.get_error_code()) print("Error message = ", exception.get_error_msg()) return None
def SetRdsbakRequest(RDSInstanse, StartTime, EndTime): ''' rdsbkbody = { "Action": "DescribeBackups", "DBInstanceId": rdsrep['Items']['DBInstance'][]['DBInstanceId'], "BackupStatus": "Success", "StartTime": StartTime, "EndTime": EndTime, "PageSize": 10, "PageNumber": 30 } ''' rdsbkrequest = DescribeBackupsRequest.DescribeBackupsRequest() rdsbkrequest.add_query_param("DBInstanceId", RDSInstanse) rdsbkrequest.add_query_param("StartTime", StartTime) rdsbkrequest.add_query_param("EndTime", EndTime) return rdsbkrequest
def describe_backups_request(): u"""获取指定RDS中互联网备份下载地址.""" (start_at, end_at) = get_time_range() clt = client.AcsClient(access_key_id, access_key_secret, access_region) request = DescribeBackupsRequest.DescribeBackupsRequest() request.set_accept_format(accept_fomat) request.set_action_name('DescribeBackups') request.set_DBInstanceId(db_instanceid) request.set_StartTime(start_at) request.set_EndTime(end_at) result = clt.do_action(request) result = json.loads(result) backup_list = result.get('Items', {}).get('Backup', None) if backup_list is None: print "Retrive [elc_db] database backup file failed." sys.exit(1) elif not backup_list: print "Retrive [elc_db] database backup file failed." sys.exit(1) else: last_backup = backup_list[0] if last_backup.get('BackupType', None) in ['FullBackup']: # 线上新增数据库后,此处需要同步修改 if last_backup.get('BackupDBNames', None) in ['elc_db,premium']: if last_backup.get('BackupMethod') in ['Physical']: if last_backup.get('BackupStatus') in ['Success']: print last_backup.get('BackupDownloadURL') sys.exit(0) else: print "Invalid BackupStatus [{0}].".format( last_backup.get('BackupStatus', None)) sys.exit(1) else: print "Invalid BackupMethod [{0}].".format( last_backup.get('BackupMethod', None)) sys.exit(1) else: print "Invalid BackupDBNames [{0}].".format( last_backup.get('BackupDBNames', None)) sys.exit(1) else: print "Invalid BackupType [{0}].".format( last_backup.get('BackupType', None)) sys.exit(1)
def GetBackup(DBInstanceId,StartTime,EndTime): Backup = DescribeBackupsRequest.DescribeBackupsRequest() Backup.set_DBInstanceId(DBInstanceId) Backup.set_StartTime(StartTime) Backup.set_EndTime(EndTime) Backup.set_accept_format('json') BackupInfo = clt.do_action_with_exception(Backup) Info = (json.loads(BackupInfo)) BackupEndTime = Info['Items']['Backup'] if BackupEndTime : TimeBefore =BackupEndTime[0]['BackupEndTime'].replace('T', ' ').replace('Z', '') TimeTransfer(TimeBefore) Sql = "update checklist set lastbackuptime='%s' where item='%s'and date=curdate()" % (TimeEnd, DBInstanceId) print TimeEnd else: global TimeEnd_v2 TimeEnd_v2 = 'NULL' Sql = "update checklist set lastbackuptime='%s' where item='%s'and date=curdate()" % (TimeEnd_v2, DBInstanceId) print 'NULL' DatabaseConnect(Sql)
def downfullbackupfile(db_instanceid): startdate = start_date + 'T00:00Z' enddate = end_date + 'T00:00Z' clt = client.AcsClient('0ozYjkWe123456', 'kSVNVc89123456SY5tkFpUFXwPH', 'cn-hangzhou') request = DescribeBackupsRequest.DescribeBackupsRequest() request.set_accept_format('json') request.set_action_name('DescribeBackups') request.set_DBInstanceId(db_instanceid) request.set_StartTime(startdate) request.set_EndTime(enddate) result = clt.do_action(request) s = json.loads(result) list = s['Items']['Backup'] for i in list: DBInstanceId = i['DBInstanceId'] url = i['BackupDownloadURL'] idx = url.index('tar.gz') filename = url[7:idx + 6].replace('/', '_') filename = "/backup/databackup/%s_%s" % (DBInstanceId, filename) urllib.urlretrieve(url, filename)
def des_instance(self): """ set param :return: response """ request = DescribeBackupsRequest.DescribeBackupsRequest() request.set_accept_format('json') # DBInstanceId: request.add_query_param('DBInstanceId', self.instanceId) # StartTime: request.add_query_param('StartTime', self.start_time) # EndTime: request.add_query_param('EndTime', self.end_time) # BackupId: # request.add_query_param('BackupId', '备份集ID') # BackupStatus: request.add_query_param('BackupStatus', 'Success') # 备份类型,取值范围:Automated:常规任务 request.add_query_param('BackupMode', self.BackupMode) response = self.clent_oper.do_action_with_exception(request) self.logger.info("init request complate!") return response