アリクラウドデータベースRedisのバックアップのダウンロード(パイソン)

#!は/ usr / binに/ envをpython3.6 
#コーディング= UTF-8 
インポートのOS 
インポートurllib.request、JSON、日時、時間の
インポートSSL 
aliyunsdkcore.clientインポートAcsClientから
aliyunsdkr_kvstore.request.v20150101.DescribeBackupsRequest輸入DescribeBackupsRequestから
aliyunsdkr_kvstoreから。 request.v20150101.DescribeInstancesRequest輸入DescribeInstancesRequest 
 
 
クライアント= AcsClient( '********************'、「*************** ***********」、 'CN-XXX') 
 
 获取阿里云Redisの实例列表
DEF get_redis_insts():
    リクエスト= DescribeInstancesRequest()
    request.set_accept_format( 'JSON')
    request.set_PageNumber(1) 
    request.set_PageSize(100)
    応答= client.do_action_with_exception(リクエスト) 
    戻りjson.loads(応答)に.get( 'インスタンス')[ 'KVStoreInstance'] 
 
 ダウンロードは、実施例に係るバックアップIDのリストを取得
DEFのget_bak_urls(instId、のstartTime、endTimeは):
    リクエスト= DescribeBackupsRequest( )
    request.set_accept_format( 'JSON')
    request.set_StartTime(のstartTime)
    request.set_EndTime(endTimeは)
    request.set_InstanceId(instId)
    応答= client.do_action_with_exception(要求)
    戻りjson.loads(応答)に.get( 'バックアップ')。 GET( 'バックアップ')
 
 
ローカルにダウンロードバックアップにダウンロードアドレスに従って#(IDCバックアップ・マシン111.11.11.11)
DEF(folder_path、URL)をget_redis_bak:
    IFないos.path.exists(folder_path):
        印刷(「選択したフォルダが存在しません、それを作成してみてください。」)
        os.makedirs(folder_path) 
    ファイル名= url.split( '/')[ -1] .split( '?') [0]
    ファイルパス= folder_path + '/' +ファイル名
    os.path.exists(ファイルパス)の場合:
        印刷( "ファイルが既に存在しているスキップします。")
    他:
        試してみる:
            印刷( "ファイルをダウンロードしてみてください:{}" .format(URL))
            ssl._create_default_https_context = ssl._create_unverified_context#导入SSL时关闭证书验
            urllib.request.urlretrieve(URL、ファイル名=ファイルパス)
            プリント)( "完了" 
        電子などの例外を除い:
            ダウンロードするときに印刷(「エラーが発生しましたファイル、エラーメッセージ: ")
            プリント(E) 
 
 清理30天前的备份文件
デフfileremove(ファイル名、remove_time):
    timeInt =はos.path。getmtime(ファイル名)
    秒= remove_time * 86400 
    CC = time.time()
    もしINT(timeInt)<INT(CC)-int(秒):
        os.remove(ファイル名)
 
 
DEF delFilesOfDirAndSubdir(FILEDIR、deltime):
    もしos.path.isfile(FILEDIR ):
        fileremove(FILEDIR、deltime)
    他:
        トライ:
            iに対して)os.listdir(FILEDIR中:
                もしos.path.isfile(FILEDIR + '/' + I):
                   fileremove(FILEDIR + '/' + I、deltime)
                他:
                    new_dir = FILEDIR + '/' + I 
                    delFilesOfDirAndSubdir(new_dir、deltime)
        電子などの例外を除いて: 
            プリント( "エラーが発生したときに削除ファイル、エラーメッセージ:")
            印刷(e)の
 
 
場合__name__ == "__メイン__":
    delFilesOfDirAndSubdir( '/バックアップ/ aliyun_redis_bak'、30)
    今= datetime.datetime.now()
    thirtyDaysAgo =(datetime.datetime.now() - datetime.timedelta(日= 30))
    endTimeは= now.strftime( "%Y- %M-%のdT%H:%MZ ")
    のstartTime = thirtyDaysAgo.strftime(" %Y-%M-%のdT%H:%MZ ")
    get_redis_instsにおけるKVSのための():
        プリント( 'のBAKSを取得開始します。' + KVS [ 'のInstanceName'])  
        bakList = get_bak_urls(KVS [ 'のInstanceId']、のstartTime、endTimeは)
        のためにbakListでBAK:
            get_redis_bak(KVS [ 'のInstanceName']、BAK [」BackupDownloadURL '])
        ( '末端がのBAKSを得る: '+ KVS ['のInstanceNameを'])を印刷
 
 
aliyun-のpython-SDKコア-V3をインストール#pip 
aliyun-のpython-SDK-R-kvstoreインストール#pip

  

おすすめ

転載: www.cnblogs.com/dblock/p/11810348.html