示例#1
0
 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
示例#3
0
 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
示例#4
0
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
示例#6
0
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)
示例#8
0
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)
示例#9
0
文件: rdsdown.py 项目: pfoy-sx/study
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)
示例#10
0
 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