Featured image of post duplicacy增量备份

duplicacy增量备份

增量备份博客到b2云存储

既然用上了b2云存储,那就把备份频率从每周一次变成每日一次。
那么完整备份的方法就不适用了,比较了几个免费的增量备份软件后,最终选择使用Duplicacy增量备份。理由如下:

  • 支持重复数据删除功能,而无需多台计算机之间的直接通信。

  • 允许多台计算机备份到同一云存储,这使得重复数据删除效率更高。

  • 切块存储,无数据库。

  • 基准性能好,备份所需要的时间短。

  • 支持常见的存储后端。

初始化存储库

1
2
3
4
5
6
#命令格式为
duplicacy init [command options] <snapshot id> <storage url>
#例:我要把本地储存库加密备份到b2云存储bucket1里,储存名为default,快照名为wordpress(全局唯一)
duplicacy init -e wordpress b2://bucket1_name
#自定义域名
duplicacy init -e wordpress b2-custom://your_domain/bucket1_name

这里要说下Duplicacy 的wiki做的并不详细,有些新增的功能也没有及时更新说明。我都是在github的pull request里才找到怎么使用b2自定义域名:https://github.com/gilbertchen/duplicacy/pull/589

添加其它存储库

1
2
3
4
5
6
#命令格式
duplicacy add [command options] <storage name> <snapshot id> <storage url>
#例:我要把前面已经添加了b2云存储bucket1的储存库,再添加一个加密的b2云存储bucket2
duplicacy add -e default2 wordpress b2://bucket2_name
#自定义域名
duplicacy add -e default2 wordpress b2-custom://your_domain/bucket2_name

备份

1
2
3
4
#默认命令
duplicacy backup
#如果有多个存储目标,可以用-storage指定存储名称
duplicacy backup -storage storage_name

查看快照

1
2
3
4
5
6
7
8
#列出当前存储库默认id名的快照
duplicacy list
#列出当前存储库指定id名的快照
duplicacy list -id id_name
#从指定储存库列出默认id名的快照
duplicacy list -storage storage_name
#列出当前储存库任意id名的快照
duplicacy list -a/-all

还原快照

默认情况下,还原过程会将大小和时间戳与快照中的大小和时间戳相同的文件视为未更改的文件。使用-hash选项,将对每个文件进行完全扫描以确保它们一致。

1
2
#使用-r指定要还原的修订版本(必须)
duplicacy restore -r revision_number

使用-overwrite选项,还原过程将会覆盖现有文件。

使用-delete选项表示不在快照中的文件将被删除。如果指定了任何模式,该选项将被忽略。

当有多个存储时(由add命令添加),你可以通过-storage指定存储名称来选择要从哪个存储恢复。

修剪快照

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#命令格式
duplicacy prune [command options]
#使用-id指定其它快照ID而不是默认快照ID。
duplicacy prune -id wordpress2
#使用-a,-all指定存储内的所有快照ID
duplicacy prune -a/-all
#使用-r删除指定版本
duplicacy prune -r 6    #删除版本6
duplicacy prune -r 344-350    #删除版本344-350(包括)
duplicacy prune -r 310 -r 1322    #删除版本310、1322

自动修剪

使用-keep 制定保留策略,对于m天之前的版本,每n天保留1个版本。

它接受两个数字n:m的参数,其中n表示要保留的两个连续版本之间的天数,m表示该策略只适用于m天前的版本。如果n为0,任何超过m天的版本将被删除。

1
2
3
4
5
6
duplicacy prune -keep 1:7    #对于超过7天的版本,每1天保留一个版本。
duplicacy prune -keep 7:30    #对于超过30天的版本,每7天保留一个版本。
duplicacy prune -keep 30:180    #对于超过180天的版本,每30天保留一个版本。
duplicacy prune -keep 0:360    #不保留超过360天的版本。
#多个-keep选项必须按其m值按降序排列。
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7

密码凭证

Duplicacy将尝试以三种方式检索存储密码和存储特定的访问令牌/密钥。

  • 如果有密钥管理库服务。Duplicacy将把用户输入的密码/密钥存储在这样的密钥管理库中,以后需要时再取回它们。但是,如果为存储指定了-no-save-password选项,那么Duplicacy就不会以这种方式保存密码。
  • 如果提供了密码的环境变量,Duplicacy总是会采用它。下表显示了每种密码的环境变量的名称。请注意,如果存储空间不是默认的,存储空间的名称将包括在环境变量的名称中(大写)。例如,如果你的存储名称是b2,那么环境变量应该命名为DUPLICACY_B2_PASSWORD。
  • 如果一个匹配的键和它的值被set命令保存到配置文件(.Diplicacy/preferences)中,这个值将被用作密码。

因为我不想折腾所以就选择直接在脚本里写入环境变量,尽管不太安全。

1
2
3
export DUPLICACY_B2_ID=b2_id
export DUPLICACY_B2_KEY=b2_key
export DUPLICACY_PASSWORD=your_password

备份脚本

 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
#!/bin/bash

#关闭服务
service nginx stop && service php-fpm stop
service seahub stop && service seafile stop

#duplicacy变量
export DUPLICACY_B2_ID=b2_id
export DUPLICACY_B2_KEY=b2_key
export DUPLICACY_PASSWORD=your_password

#导出数据库
cd /data/mysql/
/usr/local/mysql/bin/mysqldump -h 127.0.0.1 -P 3306 --all-databases > /data/mysql/all.sql
zip -mqP password ./all.sql.zip ./all.sql

#增量备份mysql文件夹
cd /data/mysql/
duplicacy backup

#增量备份wordpress文件夹
cd /home/wordpress/
duplicacy backup

#增量备份seafile文件夹
cd /home/seafile/
duplicacy backup

#删除60天前的快照,超过30天的快照每15天保留一个
duplicacy prune -all -keep 0:60 -keep 15:30

#启动服务
service seafile start && service seahub start
service php-fpm start && service nginx start

官方文档:
Duplicacy User Guide
Duplicacy Wiki

使用 Hugo 构建
主题 StackJimmy 设计