乐码库:一个极速、放心、纯净的下载站! 更新: 资源发布
  • 您的位置:首页 > 技术文档 > Python > Python+Shell阿里云OSS对象存储定时远程备份网站
  • 收藏本页
      Python+Shell阿里云OSS对象存储定时远程备份网站
      发布时间:2016-12-28 19:00:35 关键词: 阿里云OSS,阿里云OSS对象存储,ll阿里云OSS远程备份
      内容简介:阿里云OSS,想必大家都不会陌生,具体功能、特色这里就不赘述了。而利用阿里云OSS备份数据的教程方法

    一、优点分析

    对于阿里云OSS,想必大家都不会陌生,具体功能、特色这里就不赘述了。

    而利用阿里云OSS备份数据的教程方法,网络上已有不少分享,各种开发语言都有,用起来非常方便。
    在我看来,用什么语言都是其次,主要还是看重了阿里云ECS到阿里云OSS可以走内网,速度更快而且流量免费!

    因此,只建议部署在阿里云ECS的网站使用OSS来备份,其他产品还要走外网备份到OSS就得不偿失了。

    二、准备工作
    ①、开通OSS,并创建备份Bucket

    访问阿里云 OSS控制台,点击开通OSS,然后新建一个Bucket(名称自定义),注意选择ECS相同的区域(比如青岛的ECS我就选择华北1),并且选择私有读写权限:Python+Shell脚本结合阿里云OSS对象存储定时远程备份网站

    ②、创建认证密钥
    在OSS控制台的右侧栏,点击安全令牌,创建用于管理OSS的密钥对:

    创建得到的密钥对记得备忘一下,因为只能获取一次:Python+Shell脚本结合阿里云OSS对象存储定时远程备份网站


    如果密钥没有权限请如图添加即可:Python+Shell脚本结合阿里云OSS对象存储定时远程备份网站

    三、SDK脚本
    我根据OSS的帮助文件,选择了适用范围最广的Python SDK方案,并且额外加入了断点续传和上传百分比功能,测试成功。
    ①、环境准备

    OSS的Python SDK需要用到oss2插件,所以我们先安装一下。
    如果服务器上已经安装了pip工具,可直接执行如下命令安装oss2插件:

    pip install oss2
    若没有,则复制以下命令行到服务器上执行安装:
    cd /tmp
    wget -O master.zip https://codeload.github.com/aliyun/aliyun-oss-python-sdk/zip/master --no-check-certificate
    tar zxf master.zip
    cd aliyun-oss-python-sdk-master && python setup.py install && echo "Oss2 install OK" || \
    echo "Oss2 install failed"

    ②、上传脚本

    # -*- coding: utf-8 -*-
    from __future__ import print_function
    import os, sys
    import oss2
    #
    # 百分比显示回调函数
    #
    def percentage(consumed_bytes, total_bytes):
        if total_bytes:
            rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
            print('\r{0}% '.format(rate), end=filePath)
            sys.stdout.flush()
    
    # 脚本需要传入5个参数
    if ( len(sys.argv) > 5 ):
        AccessKeyId     = sys.argv[1]
        AccessKeySecret = sys.argv[2]
        Endpoint        = sys.argv[3] 
        Bucket          = sys.argv[4]
        filePath = sys.argv[5]
        fileName = filePath.split("/")[-1]
    
    else:
        print("Example: %s AccessKeyId AccessKeySecret Endpoint Bucket /data/backup.zip" % sys.argv[0])
        exit()
    
    # OSS认证并开始上传
    auth = oss2.Auth(AccessKeyId , AccessKeySecret)
    bucket = oss2.Bucket(auth,  Endpoint, Bucket)
    oss2.resumable_upload(bucket, fileName, filePath, progress_callback=percentage)
    print('\rUpload %s to OSS Success!' % filePath)

    使用方法:将上述代码保存为 oss.upload.py,并上传到服务器,执行如下命令可开始上传文件到OSS:

    python /data/oss.upload.py 认证ID 认证密钥 oss-cn-qingdao-internal.aliyuncs.com Bucket名称 /data/zhangge.net_1.zip

    其中:
    1~2个参数是认证ID和认证密钥就是前文创建并备忘的密钥对。
    第3个参数是青岛区域的OSS内网地址,其他区域请参考OSS帮助文档,自行选择。
    第4个参数是前文创建的Bucket名称,比如mybackup1
    第5个参数是要上传的本地文件的绝对路径
    执行后,就能在OSS的Object界面看到了:Python+Shell脚本结合阿里云OSS对象存储定时远程备份网站

    ③、下载脚本
    其实只需要有个上传脚本即可,因为备份文件可直接从Object界面下载。不过,为了方便在服务器上直接恢复文件,还是弄了一个下载脚本。

    # -*- coding: utf-8 -*-
    from __future__ import print_function
    import os, sys
    import oss2
    #
    # 百分比显示回调函数
    #
    def percentage(consumed_bytes, total_bytes):
        if total_bytes:
            rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
            print('\r{0}% '.format(rate), end=saveFile)
            sys.stdout.flush()
     
    # 至少需要5个参数,第六个参数是下载文件的保存路径,若不指定,则保存到脚本所在目录
    if ( len(sys.argv) > 5 ):
        AccessKeyId     = sys.argv[1]
        AccessKeySecret = sys.argv[2]
        Endpoint        = sys.argv[3] 
        Bucket          = sys.argv[4]
        fileName = sys.argv[5]
    
        try:
            saveFile = sys.argv[6] + fileName
        except:
            saveFile = './' + fileName
    
    else:
        print("Example: %s AccessKeyId AccessKeySecret Endpoint Bucket backup.zip /data/backup.zip" % sys.argv[0])
        exit()
    
    auth = oss2.Auth(AccessKeyId , AccessKeySecret)
    bucket = oss2.Bucket(auth,  Endpoint, Bucket)
    
    oss2.resumable_download(bucket, fileName, saveFile,
      store=oss2.ResumableDownloadStore(root='/tmp'),
      multiget_threshold=20*1024*1024,
      part_size=10*1024*1024,
      num_threads=5,progress_callback=percentage)
    
    print('\rDownload %s to %s Success!' % ( fileName, saveFile))
    使用方法:
    将上述代码保存为 oss.download.py,并上传到服务器,执行如下命令就可以下载OSS文件到本地:
    python /data/oss.download.py 认证ID 认证密钥 oss-cn-qingdao-internal.aliyuncs.com Bucket名称 zhangge.net_1.zip /data/zhangge.net_1.zip

    其中:
    1~2个参数是认证ID和认证密钥就是前文创建并备忘的密钥对。
    第3个参数是青岛区域的OSS内网地址,其他区域请参考OSS帮助文档,自行选择。
    第4个参数是前文创建的Bucket名称,比如mybackup1
    第5个参数是存储在OSS的文件名称
    第6个参数是保存到本地的文件绝对路径,若不指定则以相同名称保存到脚本相同目录。
    好了,以上只是一个上传和下载的脚本,如果你之前已经有了成熟的备份方案,并且本地存储了备份文件,则可以使用上传脚本,结合crontab定时上传到OSS。

      最新更新
      热门排行榜