增量备份工具 borgbackup


一直在寻找一个备份软件,本来需求就是只要有 增量压缩支持管道 的功能就可以了,然后在 Github 上就找到了这么一个软件,名字叫做 borg。
borg 支持 Linux,MAC ,BSD系统。在使用上也很简单。官方Wiki上有着详细的例子。
下面简单说一下基本使用方法。
* 首先下载对应版本,然后放在 PATH的目录下。执行

borg -V

应该能看到版本号,这里推荐 1.0.7 稳定版。
* 初始化一个备份库

$ borg init /path/to/repo

  • 创建一个 /root 下所有文件的备份到刚才建立的备份库,并命名为root-backup-1

    $ borg create -v --list --stats -p /path/to/repo::root-backup-1 /root/

  • 在备份完成后会显示一个统计信息,示例如下所示
    ```
    .------------------------------------------------------------------------------
    Archive name: 20161006_1245
    Archive fingerprint: f224644c864519a6f8a23193a9d1981a64a18e50677ff7c0a54d2c5329d2be3e
    Time (start): Thu, 2016-10-06 12:45:14
    Time (end): Thu, 2016-10-06 12:45:36
    Duration: 22.50 seconds
    Number of files: 18406
    .------------------------------------------------------------------------------
    Original size Compressed size Deduplicated size
    This archive: 402.35 MB 270.81 MB 18.57 MB
    All archives: 3.17 GB 1.69 GB 393.10 MB

                   Unique chunks         Total chunks
    

    Chunk index: 12578 247244
    .------------------------------------------------------------------------------
    ```

  • 因为备份过很多次所以在后续备份中去重操作会和之前的备份一起来计算,所以看到的去重大小就只有18.57M,是不是很方便?

还原操作如下(例如还原到 /opt/root-restore

cd /opt/root-restore
borg extract /path/to/repo::root-backup-1

上面命令会把备份的所有文件还原到 borg 执行的当前目录,也就是 /opt/root-resotre

  • 另外在建立备份的时候,肯定会有排除某些文件夹的需求。详细的可以用 borg create --exclude 这个参数来指定排除项,具体语法可以参考 官方的这篇文件
  • 下面发一个本人写的 备份数据库和 备份 服务器上指定某些目录的一个脚本。(备份目的地可以是另外一台服务器,通过SSH协议来指定目录即可。需要在目标服务器也安装对应的borg软件。

  • 1.备份数据库(通过管道)
    ```

    !/bin/bash

    export BORG_PASSPHRASE=mima123

    backup ALL database

    name=database_date '+%Y%m%d'
    mysqldump -h 127.0.0.1 -uroot -pmima123 --all-databases | /usr/sbin/borg create -v \
    -p -C lzma remote-borg-backup-host:borg-data::$name -
    unset BORG_PASSPHRASE
    ```

以上脚本就是备份所有数据库文件到 remote-borg-backup-host的对应用户的 borg-data 文件夹,备份文件名是日期。borg 库的密码为 borg123

  • 2.备份多个文件夹,带排除参数 #!/bin/sh export BORG_PASSPHRASE=mima123 #backup full_vps_data name=data_`date '+%Y%m%d'` /usr/sbin/borg create -v --stats \ --filter=AME -p \ --exclude 'sh:/root/.cache' \ --exclude 'sh:/opt/install' \ --exclude 'sh:/www/vhost/rss/cache' \ -C lzma remote-borg-backup-host:borg-data::$name \ `cat /jobs/backup.list` unset BORG_PASSPHRASE

以上脚本排除了3个文件夹。需要备份的文件夹或文件 写在了 另一个文件 /jobs/backup.list 上,一行一个。