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

作者: 左蓝 | 来源:发表于2017-02-07 22:54 被阅读519次

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

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

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


    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 - 定时任务必备招式

    相关文章

      网友评论

      • 无情boss:ubuntu下如何隐藏一个目录?
        左蓝: @唐纳德_特朗普 那得看什么程序
        无情boss: @左蓝 程序建立的目录 不能改名字,看着不爽,能隐藏吗
        左蓝: @唐纳德_特朗普 文件夹开头有个 . 就隐藏了。

      本文标题:服务器数据自动备份与同步

      本文链接:https://www.haomeiwen.com/subject/nvvmittx.html