全网备份案例

某公司里有一台web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份.

要求: 每天晚上12点整在web服务器A(web01)上打包备份网站程序目录并通过rsync命令推送到服务器B(backup)上备份保留 (备份思路可以是先在本地按日期打包,再利用rsync推到备份服务器上) 具体要求: 1)web服务器A和备份服务器B的备份目录必须都为/backup 2)web服务器A和站点目录假定为(/var/www/html) 3)web服务器A本地仅保留7天内的备份 4)备份服务器上[每周六的数据都保留],其他备份仅保留180天备份 5)备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱

web服务器的操作步骤:

第一步: 在web服务器上根据日期打包文件到/backup备份目录,将要打包的文件都放在备份目录下 tar zchf /backup/html.date +%F_%w -d '-1day'.tar.gz /var/www/html/ tar zchf /backup/conf.date +%F_%w -d '-1day'.tar.gz /etc/rc.local /etc/hosts /var/spool/cron/

第二步: 在将备份目录推送之前,加指纹信息,方便服务端的验证,前提是创建指纹的客户端路径和服务端路径相同才可以 最好是在客户端生成目录,推送到服务端的backup find /backup/ -name '*.tar.gz' |xargs md5sum >/backup/check.txt md5sum -c check.txt /backup/conf.2018-01-22.tar.gz: OK /backup/html.2018-01-22.tar.gz: OK

第三步: 将已经备份好压缩文件推送到rsync备份服务器上,推送完整的数据,到模块指定的目录下 rsync -az /backup/ rsync_backup@172.16.1.41::backup/web01 --password-file=/etc/rsync.password 但是当创建了web01这个目录时,指纹就不可以使用了,因为客户端和服务端的路径不相同,这也是为什么要目录相同的原因

第四步: 推送完以后,按照要求,仅保留7天以内的备份 find /backup -name '*.tar.gz' -mtime +7 -type f |xargs rm -f

第五步: 将完成的步骤编写一个脚本放在定时任务中 vim /server/scripts/web01.backup.sh #!/bin/bash

#backup html and conf tar zchf /backup/html.date +%F_%w -d '-1day'.tar.gz /var/www/html/ &>/dev/null tar zchf /backup/conf.date +%F_%w -d '-1day'.tar.gz /etc/rc.local /etc/hosts /var/spool/cron/ &>/dev/null

#make md5 find /backup/ -name '*.tar.gz' |xargs md5sum >/backup/check.txt

#rsync push backup rsync -az /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

#del 7 days ago find /backup -name '*.tar.gz' -mtime +7 -type f |xargs rm -f

crontab -e #backup conf and html 00 00 * * * /bin/bash /server/scripts/web01.backup.sh &>/dev/null

rsync服务器的操作步骤:

第一步: 发送邮件给运维管理人员 md5sum -c /backup/check.txt >/backup/result.log mail -s "result" 1136386645@qq.com </backup//result.log

第二步: 删除180天之前的备份文件,保留每周六的备份文件 find /backup/ -name '.tar.gz' ! -name '_6.tar.gz' -mtime +180 |xargs rm -f

第三步 编写脚本以及定时任务 vim /server/scripts/web01.sh

#!/bin/bash

#check and send mail md5sum -c /backup/check.txt >/backup/result.log mail -s "result" 1136386645@qq.com </backup//result.log

#del 180 days ago and save sat find /backup/ -name '.tar.gz' ! -name '_6.tar.gz' -mtime +180 |xargs rm -f

crontab -e #send mail and del 00 00 * * * /bin/bash /server/scripts/web01.sh &>/dev/null

使用md5sum时存在的不足 问题: 如果客户端使用rsync命令在服务端创建的md5sum指纹文件,会存在服务端路径为/backup/web01,而客户端创建指纹的路径是/backup,所以不能验证 解决: 在客户端创建一个目录,也就是/backup/web01.直接将web01这个目录推送到服务端,所以服务端的路径和客户端的相同,指纹可以使用

客户端: vim /server/scripts/web01.backup.sh

#!/bin/bash

#backup html and conf tar zchf /backup/web01/html.date +%F_%w -d '-1day'.tar.gz /var/www/html/ &>/dev/null tar zchf /backup/web01/conf.date +%F_%w -d '-1day'.tar.gz /etc/rc.local /etc/hosts /var/spool/cron/ &>/dev/null

#make md5 find /backup/web01 -name '*.tar.gz' |xargs md5sum >/backup/web01/check.txt

#rsync push backup rsync -az /backup/web01 rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

#del 7 days ago find /backup/web01 -name '*.tar.gz' -mtime +7 -type f |xargs rm -f

服务端: vim /server/scripts/web01.sh

#!/bin/bash

#check and send mail md5sum -c /backup/web01/check.txt >/backup/web01/result.log mail -s "result" 1136386645@qq.com </backup/web01/result.log

#del 180 days ago and save sat find /backup/web01 -name '.tar.gz' ! -name '_6.tar.gz' -mtime +180 |xargs rm -f