备份服务器文件上传到七牛云

新建空间

注册七牛云账号,然后在对象存储的空间管理中新建空间,此过程需要先进行实名认证,认证后可以获得 10G 的免费存储空间。

安装Qiniu

1
pip install qiniu

配置脚本

下载 backup_file_to_qiniu.py,配置 access_keysecret_keybackup_dirbackup_namebucket_name 的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# -*- coding: utf-8 -*-
# flake8: noqa

from qiniu import Auth, put_file, etag, urlsafe_base64_encode
import qiniu.config
from qiniu.compat import is_py2, is_py3
import time
import os

# 需要填写你的 Access Key 和 Secret Key
access_key = 'Access_Key'
secret_key = 'Secret_Key'

# 构建鉴权对象
q = Auth(access_key, secret_key)

# 当前日期和时间
date = time.strftime('%Y-%m-%d-%H-%M', time.localtime())

# 要备份的目录,多个请用空格分隔
backup_dir = '/data'

# 备份名称
backup_name = 'data'

# 要上传的空间
bucket_name = 'Bucket_Name'

# 上传到七牛后保存的文件名
key = backup_name + '_' + date + '.zip'

# 生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)

# 要上传文件的本地路径
localfile = '/tmp/' + key

cmd = 'zip -rq /tmp/' + key + ' ' + backup_dir
os.system(cmd)

ret, info = put_file(token, key, localfile)
print(ret)
print(info)

if is_py2:
assert ret['key'].encode('utf-8') == key
elif is_py3:
assert ret['key'] == key

assert ret['hash'] == etag(localfile)

os.system('rm -rf /tmp/' + key)

执行备份

1
python backup_file_to_qiniu.py

使用 Cron 自动化

编辑 crontab。

1
crontab -e

添加以下定时任务,该任务将会在每月第一天到时自动执行备份脚本。

1
0 0 1 * * /usr/bin/env python /path/to/file/backup_file_to_qiniu.py >> /path/to/file/backup_file_to_qiniu.log