服务器数据自动备份与同步

虽然大部分时候都是不作不死,不过在很多时候程序的崩溃也是让人措不及手啊。自动化的备份和同步必须要有。

我没有什么很复杂的应用程序或者数据库需要备份,都是简单的文件备份(包括常规数据库)。

因为我服务器一切皆容器,数据全部通过数据卷挂载,所以我要做的事情仅仅只是打包文件夹,增量备份并同步,仅此而已。

tar 命令

tar 命令是通用性较强的 Unix/Linux 归档命令。tar 将一个或多个文件和目录打包为单个文件,并保持原始文件的大小、拥有者、权限、文件类型及其在文件系统层次结构中的位置。tar 是最易用的数据备份实用程序。

参数含义
-c该参数会创建一个新的存档
-v该参数会列出每个处理的文件名称
-f该参数会指定存档或设备名称
-z该参数将用 gzip 对存档进行压缩或解压
-x该参数将从存档文件中提取一个或多个文件
–exclude排除不打包的目录或文件,支持正则匹配

要创建 /Data 的存档文件,使用:

# tar -czvf backup.tar.gz /Data/

要恢复该目录,使用:

# tar -xzvf backup.tar.gz /Data/

tar 在提取文件和较小的目录方面表现不错,如果要恢复文件系统和卷组,我们更倾向于选用 cpio, 或是使用专用性更强的 Linux/Unix 数据备份实用程序。

tar 提供了增量压缩的功能

备份当前目录下的所有文件:

# tar -g /data.snap -zcpf /data-$(date +%Y-%m-%d_%H).tar.gz .

在需要恢复的目录下解压恢复:

# tar -zxpf /data-****.tar.gz -C .

如果归档文件太大,可以分割压缩:

# tar -g /data.snap -zcpf - --exclude=./cache ./ | split -b 1024M - /data-$(date +%Y-%m-%d_%H).tar.gz_

分割后文件名后会依次加上aa,ab,ac,…,上面最终的备份归档会保存为以下的格式(每个归档文件最大 1024MB):

data-2017-02-07_22.tar.gz_aa
data-2017-02-07_23.tar.gz_ab
data-2017-02-07_24.tar.gz_ac

恢复备份的档案文件:

# cat data-2017-02-07_24.tar.gz_* | tar -zxpf - -C /tmp/data/

恢复增量备份的档案文件(可以一直逆向恢复到你想要恢复的时间点):

$ tar –zxpf /data-2017-02-07_24.tar.gz -C /Data
$ tar –zxpf /data-2017-02-07_23.tar.gz -C /Data
$ tar –zxpf /data-2017-02-07_22.tar.gz -C /Data

一定要保证是按时间逆序恢复的,这一点挺麻烦的,不过可以使用上面通配符的形式自动恢复到指定日期。

cpio 命令

cpio 与 tar 类似,是通用性较强的 Unix/Linux 归档命令。一般被用来备份和恢复文件及目录结构。

参数含义
-o该参数会将数据拷贝到文件或设备中
-i该参数会将数据从文件或设备中还原到系统中
-v该参数会列出每个处理的文件名称
-z该参数会按需要建立目录
-x该参数会从标准输入读取文件路径名称,然后将这些文件复制到指定的目录
-d该参数会按需要建立目录
-p该参数会从标准输入读取文件路径名称,然后将这些文件复制到指定的目录
-B该参数会将 I/O block 增加到 5120bytes,默认是 512bytes。加快数据备份速度
-m该参数会保留时间属性
-u该参数自动将较新的文件替换到较旧的文件

将 /Date 目录和它的所有文件和子目录建立存档,使用:

# find /Data/ -depth | cpio -ov > backup.cpio

cpio 无法直接读取文件,它需要每个文件或者目录的完整路径名才能识别读取,而 find 命令的输出刚好做到了这点,因此,cpio 命令一般和 find 命令配合使用。

要恢复该目录,使用:

# cpio -ivdum < backup.cpio

cpio 建立起来的归档文件包括文件头和文件数据两部分。文件头包含了对应文件的信息。如文件的 UID,GID,连接数以及文件大小等。其好处是可以保留硬连接,在恢复时默认情况下保留时间戳,无文件名称长度的限制。
我喜欢用这个工具备份,简单粗暴,毕竟我数据不是很多。

参考链接:

rsync

如果将数据备份与远程传输结合起来,譬如 scp,就可以实现数据的远程备份。但通常的备份方法,都无法对本地和远程目录中的内容进行同步。

rsync(Remote Sync)是 Unix/Linux 系统下一款优秀的数据备份与同步工具。它可以对文件集进行同步。然而更有价值的是,rsync 使用文件的增量,也就是说,它在网络中仅发送两个文件集合有区别的部分。这样可以占用更少的带宽,并且速度更快。

rsync 的特性:

  • 能够更新整个目录树和文件系统
  • 保持原文件的权限,时间,软硬链接
  • 安装无需特殊权限
  • 优化的流程,文件传输速率高
  • 可以通过直接的 socket 连接传输文件,或者选择 rsh,ssh 等方式
  • 支持匿名传输

|参数|含义|
|-a|该参数表示以递归方式传输文件,并保持所有文件属性|
|-v|该参数显示详细的传输处理|
|-z|该参数对备份的文件在传输时进行压缩处理|
|-P|该参数将显示备份过程|

使用方法烂大街不想说,而且我也不用这个,效率不高。需要实现自动备份还需要靠inotify-tools这种工具配合。

比如这篇教程:Linux 下同步工具 inotify+rsync 使用详解

qshell

因为你用七牛存储文件,可以用这个工具同步文件。
https://developer.qiniu.com/kodo/tools/qshell

其他

像 Google Driver、Dropbox、百度云都有终端的工具,自己同步就好,这类工具的自动检测文件夹比传统 Linux 传输工具好用。

自动执行?Crontab 啊!

我懒,直接丢个链接:
Crontab – 定时任务必备招式

    原文作者:左蓝
    原文地址: https://www.jianshu.com/p/9f3c8eadd0cf
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞