前面总结过一篇全量备份/增量备份/差异备份说明,下面介绍下linux下rsync和tar两种增量备份的操作记录:

1)rsync备份
rsync由于本身的特性,在第一次rsync备份后,以后每次都只是传内容有改变的部分,而不是全部传。所以,rsync在做镜像方面是很不错的,只传增量,节省带宽、时间。
常规本地rsync备份命令可以是:
# rsync -az --delete SRC DST
其中:
-z 压缩
-a 简单理解就是保持一致性
--delete 严格保证DST内容与SRC一致,即DST中SRC没有的文件会被删除掉 (--delete-before表示在进行同步之前,先将目标目录全部删除,然后再进行同步操作) 实例如下:
[root@linux-node3 mnt]# mkdir test
[root@linux-node3 mnt]# cd test/
[root@linux-node3 mnt]# ls
test
[root@linux-node3 test]# echo "a1" > a1.txt
[root@linux-node3 test]# echo "a2" > a2.txt
[root@linux-node3 test]# echo "a3" > a3.txt
[root@linux-node3 test]# ls
a1.txt a2.txt a3.txt aaa 现在使用rsync进行增量备份
[root@linux-node3 mnt]# rsync -az --delete test /opt/
[root@linux-node3 mnt]# ls /opt/
test
[root@linux-node3 mnt]# ls /opt/
test wang
[root@linux-node3 mnt]# rsync -az --delete test /opt/
[root@linux-node3 mnt]# ls /opt/
test wang
[root@linux-node3 mnt]# ls /opt/test/
a1.txt a2.txt a3.txt a4 aaa 注意:
--delete参数要放在源目录和目标目录前,并且两个目录结构一定要一致!不能使用./*。
如果目录结构不一致,则不会删除目标目录中的目录。如上,/opt/wang目录由于目录结构不一致,故它是多余的但不删除。 现在进行增量备份,rsync在第一次同步后,后面就只同步内容有改变的部分 温馨提示:
rsync使用--delete参数,在做增量方式的全备份可以说是最佳选择。但这样只有一个副本,也就是说如果你想查以前某个时间段的数据,是没法查到的。 2)tar打包备份
tar的备份就是把文件打包起来,保存到其他地方,可以满足查档要求,也即上面说到的。
再配合crontab,就可以实现定时增量备份 下面说说tar的三种增量备份方式:
------------------------------------------------------------------------------------------------
a)第一种方式:tar -g snapshot方法
利用tar -g参数,在第一次备份时候生成时间戳文件,里面包含指定备份目录下的所有文件的一个时间戳,下次增量备份,tar会利用时间戳文件去比较,只有那些内容在这段时间有修改的文件,才会被打包。 实例说明:
[root@linux-node3 mnt]# ls
[root@linux-node3 mnt]# mkdir test
[root@linux-node3 mnt]# echo "123" > test/test1
[root@linux-node3 mnt]# echo "123123" > test/test2
[root@linux-node3 mnt]# mkdir test/aaa
[root@linux-node3 mnt]# ls test/
aaa test1 test2 先执行完整备份
[root@linux-node3 mnt]# tar -g snapshot -zcf backup_full.tar.gz test
[root@linux-node3 mnt]# ls
aaa backup_full.tar.gz snapshot test
[root@linux-node3 mnt]# cat snapshot
GNU tar-1.23-2
1490172505723210801014901724572030064696476940641test/aaa014901724572030064696476940639testDaaaYtest1Ytest2 接下来进行差异和增量备份操作:
增加数据
[root@linux-node3 mnt]# echo "aaaaa" >> test/test1
[root@linux-node3 mnt]# echo "aaaaa11111" >> test/test3
[root@linux-node3 mnt]# ls test/
aaa test1 test2 test3 执行第一次的增量备份 (注意tarball档名)
[root@linux-node3 mnt]# tar -g snapshot -zcf backup_incremental_1.tar.gz test
[root@linux-node3 mnt]# ls
aaa backup_full.tar.gz backup_incremental_1.tar.gz snapshot test
[root@linux-node3 mnt]# cat snapshot
GNU tar-1.23-2
1490172606339019504014901724572030064696476940641test/aaa014901725622320064796476940639testDaaaYtest1Ntest2Ytest3 再增加差异数据
[root@linux-node3 mnt]# echo "77777" > test/test1
[root@linux-node3 mnt]# echo "6666" >> test/test2
[root@linux-node3 mnt]# touch test/aaaa
[root@linux-node3 mnt]# ls test/
aaa aaaa test1 test2 test3 执行第二次的增量备份
[root@linux-node3 mnt]# tar -g snapshot -zcf backup_incremental_2.tar.gz test
[root@linux-node3 mnt]# ls
aaa backup_full.tar.gz backup_incremental_2.tar.gz backup_incremental_1.tar.gz snapshot test
[root@linux-node3 mnt]# cat snapshot
GNU tar-1.23-2
149017272274896944014901724572030064696476940641test/aaa014901726931200065246476940639testDaaaYaaaaYtest1Ytest2Ntest3 现在进行测试,删除测试数据test
[root@linux-node3 mnt]# rm -rf test/
[root@linux-node3 mnt]# ls
aaa backup_full.tar.gz backup_incremental_2.tar.gz backup_incremental_1.tar.gz snapshot 开始进行数据还原
恢复第一次全备份的数据
[root@linux-node3 mnt]# tar zxf backup_full.tar.gz
[root@linux-node3 mnt]# ls
aaa backup_full.tar.gz backup_incremental_2.tar.gz backup_incremental_1.tar.gz snapshot test
[root@linux-node3 mnt]# ls test/
aaa test1 test2
[root@linux-node3 mnt]# cat test/test1
123 恢复第一次增量备份的数据
[root@linux-node3 mnt]# tar zxf backup_incremental_1.tar.gz
[root@linux-node3 mnt]# ls test/
aaa test1 test2 test3
[root@linux-node3 mnt]# cat test/test1
123
aaaaa
[root@linux-node3 mnt]# cat test/test3
aaaaa11111 恢复第二次增量备份的数据
[root@linux-node3 mnt]# tar zxf backup_incremental_2.tar.gz
[root@linux-node3 mnt]# ls test/
aaa aaaa test1 test2 test3
[root@linux-node3 mnt]# cat test/test1
77777
[root@linux-node3 mnt]# cat test/test2
123123
6666 最后可以结合crontab实现定时增量备份
第一次手动进行全备份,生成snapshot时间戳文件,后面写增量备份脚本
[root@linux-node3 ~]# vim backup_incremental.sh
#!/bin/bash
DATE=`date +%Y%m%d%H%M%S`
/bin/tar -g /mnt/snapshot -zcf /mnt/backup_incremental_$DATE.tar.gz /mnt/test 进行定时增量备份操作
[root@linux-node3 ~]# crontab -e
#每小时进行一次增量备份
0 * * * * /bin/bash -x /root/backup_incremental.sh > /dev/null 2>&1 从上面可以看出:
snapshot作为时间戳文件,它记录备份目录里面每个文件的一个当前修改时间,只要下次备份时候,再利用-g ~/snapshot指定上次生成的时间戳文件就可以实现增量备份! 可能出现下面两种问题:
--> snapshot时间戳文件是每次增量备份完成时候更新的,如果在两次备份间隔间,由于io问题,上次备份没完成,第二次增量备份就开始的话,
就有可能出现,第二次增量备份并不是一个备份间隔有修改过的文件,而是两次;如果IO问题一直存在,就会一直累积备份,最后系统超负载,性能变得极差 --> 上次备份失败(意外终止)
这样的情况,要看是在什么时候终止,因为tar命令在增量备份时候会先扫一遍文件,比较修改时间,因此,有可能备份进程意外终止后,导致时间戳文件清空,下次增量备份就变成全备了,严重影响备份策略! --------------------------------------------------------------------------
b)第二种方式:tar -g tarinfo增量备份方法
只需要指定-g参数,tarinfo文件则是用来记录备份的一些信息 1)创建备份测试目录wang
[root@zabbix-server opt]# pwd
/opt
[root@zabbix-server opt]# echo "1111" > wang/1.txt
[root@zabbix-server opt]# echo "2222" > wang/2.txt
[root@zabbix-server opt]# echo "3333" > wang/3.txtwang
[root@zabbix-server opt]# ls wang/
1.txt 2.txt 3.txt 2)进行完整备份
[root@zabbix-server opt]# tar -g tarinfo -czf backup-full.tar.gz wang/
[root@zabbix-server opt]# ls
backup-full.tar.gz tarinfo wang 3)新增文件
[root@zabbix-server opt]# echo "4444" > wang/4.txt
[root@zabbix-server opt]# echo "12121" >> wang/1.txt 4)进行增量备份
[root@zabbix-server opt]# tar -g tarinfo -czf backup-incre1.tar.gz wang/
[root@zabbix-server opt]# ls
backup-full.tar.gz backup-incre1.tar.gz tarinfo wang
[root@zabbix-server opt]# cat tarinfo
GNU tar-1.23-2
1508989798794775692015089897819623314720538519682wangY1.txtN2.txtN3.txtY4.txt 5)删除wang目录,进行恢复(先全量恢复,再增量恢复)
[root@zabbix-server opt]# rm -rf wang
[root@zabbix-server opt]# ls
backup-full.tar.gz backup-incre1.tar.gz tarinfo
[root@zabbix-server opt]# tar -zvxf backup-full.tar.gz
wang/
wang/1.txt
wang/2.txt
wang/3.txt
[root@zabbix-server opt]# ls wang/
1.txt 2.txt 3.txt
[root@zabbix-server opt]# cat wang/1.txt
1111
[root@zabbix-server opt]# tar -zvxf backup-incre1.tar.gz
wang/
wang/1.txt
wang/4.txt
[root@zabbix-server opt]# ls wang/
1.txt 2.txt 3.txt 4.txt
[root@zabbix-server opt]# cat wang/1.txt
1111
12121 --------------------------------------------------------------------------
c)第三种方式:
还是觉得tar -g snapshot最大的问题就是不可控,而且稳定性较差,出现备份重叠时候很难处理好。
因此,可以利用find+tar来做增量备份的想法。利用find命令找出最近修改的文件名列表,然后再利用tar打包 实例如下:
[root@linux-node3 ~]# ls /mnt/
test
[root@linux-node3 ~]# ls /mnt/test/
aaa aaaa test1 test2 test3 备份/mnt/test目录下30分钟以内修改的文件
先使用find命令列出最近有修改的文件名列表,保存到文件
[root@linux-node3 ~]# find /mnt/test -mmin -30 -type f >> /mnt/listfile
[root@linux-node3 ~]# ls /mnt/
listfile test
[root@linux-node3 ~]# cat /mnt/listfile
/mnt/test/test2
/mnt/test/aaaa
/mnt/test/test1 然后使用tar命令对文件列表列出的文件名进行打包备份
[root@linux-node3 ~]# tar -zcf test.tgz -T /mnt/listfile
tar: Removing leading `/' from member names
[root@linux-node3 ~]# ls /mnt
listfile test.tgz test 同理备份/mnt/test目录下1天之内修改的数据
[root@linux-node3 ~]# find /mnt/test -mtime -1 -type f >> /mnt/listfile2
[root@linux-node3 ~]# tar -zcf test2.tgz -T /mnt/listfile2 这样恢复的时候,需要恢复到哪个阶段的数据,就利用这个阶段备份的打包文件进行恢复即可! 这种方式来做增量备份,即使某个时间段机器性能很差,备份重叠,也不会影响到各自的备份进程。
此外,find命令生成的文件list,还可以方便以后查档,直接对list搜索指定文件,不用去tar查看。

linux下rsync和tar增量备份梳理的更多相关文章

  1. Linux下Rsync+sersync实现数据实时同步

    inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一. ...

  2. Linux下Rsync+Inotify-tools实现数据实时同步

    Linux下Rsync+Inotify-tools实现数据实时同步 注意:下面的三个案例都是rsync 每次都是全量的同步(这就坑爹了),而且 file列表是循环形式触发rsync ,等于有10个文件 ...

  3. LINUX学习笔记——LINUX下EXP命令全库备份数据库文件

    LINUX下EXP命令全库备份数据库文件 1)建立备份目录,目录操作权限授权给Oracle用户 mkdir /backup  --创建backup文件夹 cd  /   --进入cd语句 ls  -l ...

  4. Linux rsync数据定时增量备份

    一.安装rsync服务端 1.查看是否安装rsync ps -ef | grep rsync 系统一般默认已安装,安装方法: yum -y install rsync 2.添加配置文件 rsync没有 ...

  5. linux下rsync+inotify实现服务器之间文件实时同步

    先介绍一下rsync与inotify. 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例 ...

  6. Linux下rsync命令使用总结

    一.rsync的概述 rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync.rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync” ...

  7. Linux下rsync的用法

    一.rsync的概述 rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync.rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync” ...

  8. linux下rsync的同步

    rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync****主机同步 文件下载地址: 链接:https:/ ...

  9. centos7下rsync+crontab定期同步备份

    最近需求想定期备份内部重要的服务器数据到存储里面,顺便做个笔记 以前整过一个win下的cwrsync(客户端)+rsync(服务端:存储)的bat脚本 这次整一个Linux下的脚本sh,执行定期自动备 ...

随机推荐

  1. 将爬取的数据保存到mysql中

    为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...

  2. win10无法删除文件夹(其中的文件或者文件夹已在另一个程序中打开)怎么办?

    1. 右键点击任务管理器 2.打开资源监视器 3.搜索任务,结束任务(可能会死机)

  3. sql server 无法sa登录解决办法

    大概流程:在SQL软件里面设置解决 大概流程: 打开 控制面板 -> 管理工具 -> 服务..... 详细参考地址: https://blog.csdn.net/github_351606 ...

  4. 如何在windows下使用pip安装

    首先电脑已经安装好了python 找到python的安装目录,接着找到pip.exe,一般而言它会在Scripts文件夹下,我这里选择的是pip2.7.exe 接下来,win+r,输入cmd,回车打开 ...

  5. 学生与部门管理app-产品功能与界面的简单设计

    学生与部门管理app-产品功能与界面的简单设计 1. 结对成员学号 我:********* 大佬:*******10 2. 需求分析(NABCD模型) 2.1 N-需求 各个部门在开学初占据学校青春广 ...

  6. go标准库的学习-mime

    参考:https://studygolang.com/pkgdoc 导入方法: import "mime" mime实现了MIME的部分规定. 什么是MIME: MIME(Mult ...

  7. 移动App测试实战—专项测试

       我们在进行了手工的功能测试之后,也开发了一些自动化测试用例,并且做了性能测试之后,测试工作看似比较完整了.但是当我们的App在大量的用户那里被安装和使用的时候,还是会有很多我们之前没有预料的问题 ...

  8. python3 练习题(多级菜单)

    '''多级菜单需求:1.现有省/市/县3级结构,要求程序启动后,允许用户可依次选择进入各子菜单2.可在任意一级菜单返回上一级3.可以在任意一级菜单退出程序所需新知识点: 列表/字典'''menu = ...

  9. expdp 高版本导入到低版本

    低版本 往 高版本 导入,导出的时候不用加version : 高版本往低版本的时候 需要加 version expdp version (往低版本的时候 需要加 version 版本号是 impdp ...

  10. springboot读取配置文件的顺序(转)

    也就是说:springboot会默认先加载项目外部的配置文件,覆盖内部的配置文件!所以导致项目一直使用的错误的配置! 强烈建议:不要把项目和application.properties配置文件放在一起