oninstack 网站备份 到 COS python 脚本

转自军佬http://xiaofd.win

腾讯服务器1Mbps带宽,备份东西很蛋疼,但是我们可以选择将文件备份到腾讯COS中

经测试,腾讯服务器上传到COS的速度为上行百兆,可以满足日常备份需求。

oninstack默认提供备份脚本,在oninstack目录下,有backup_setup.sh和backup.sh,先使用setup设置备份选项,然后执行backup.sh即可对网站进行备份

但是我在用他的脚本配置COS,总提示输入有误,就简单撸了个脚本。毫无技术含量,自己备份收藏使用。

测试运行环境:ubuntu、python2.7

备份流程

  • 正常使用backup.sh,将网站数据库及目录备份到本机一个路径下。
  • 安装 pip 然后 安装qcloud_cos_v4
apt install -y python-pip && pip install qcloud_cos_v4
  • 保存代码到qcloud.py,同时根据自己的COS进行配置

创建API地址:https://console.cloud.tencent.com/cam/capi

地域简称:https://cloud.tencent.com/document/product/436/6224

  • 添加crontab,添加类似如下的命令

脚本功能简介

  • 将提供的目录下文件全部上传到COS中,遇到重复(重名)的文件,会自动略过
  • 将COS bucket中的上传时间在三天前的文件删除
  • 然后就没了,本地保存几份备份什么的还都是靠oninstack的备份脚本来实现

代码

# coding:utf-8
# pip install qcloud_cos_v4
# bash /root/oneinstack/backup.sh && python /root/oneinstack/qcloud.py
from qcloud_cos import *
appid = 1200000000                  # 替换为用户的appid
secret_id = u'xxxxxxxx'         # 替换为用户的secret_id
secret_key = u'xxxxxxxx'         # 替换为用户的secret_key
region_info = "cd"             # 替换为用户的region,例如 sh 表示华东园区, gz 表示华南园区, tj 表示华北园区
bucket = u'xxxxxx'             # 替换为用户的bucket名
localdir=u'/data/backup/'      # 替换为backup.sh备份的本机路径
 
cos_client = CosClient(appid, secret_id, secret_key, region=region_info)
 
import os
for item in os.walk(localdir).next()[2]:
    print(item)
    try:
        filename=item.decode('utf-8')
        request = UploadFileRequest(bucket, u'/'+filename, localdir+filename)
        upload_file_ret = cos_client.upload_file(request)
        print(upload_file_ret)
    except Exception as e:
        print(e)
 
request = ListFolderRequest(bucket, u'/')
list_folder_ret = cos_client.list_folder(request)
print(list_folder_ret)
 
import time
for item in list_folder_ret['data']['infos']:
    filetime=item['ctime']
    filename=item['name']
    difftime=time.time()-filetime
    print(difftime,filename)
    if difftime > 3600*24*3:
        print('delete',filename)
        try:
            request = DelFileRequest(bucket, u'/'+filename)
            del_ret = cos_client.del_file(request)
            print(del_ret)
        except Exception as e:
            print(e)

共有 0 条评论

Top