您的位置:首页 > 其它

rsync 全网备份企业案例

2016-04-27 22:52 381 查看
某公司里有一台web服务器,里面的数据很重要,但是如果硬盘花了,数据就会丢失,现在领导要求你把数据在其他的服务器上做一个周期性定时备份,要求如下:每天晚上00点钟在web服务器A上打包备份网站目录并通过rsync命令推送到服务器B上备份保留(备份思路可以是按日期打包,然后再推到备份服务器上。)具体要求如下1、 web服务器A和备份服务器B的备份目录必须都是/backup2、 web服务器站点目录假定(/var/www/html)3、 web服务器本地仅保留7天内的备份4、 备份服务器上检查备份结果是否正常,并将每天的备份结果发送给管理员信箱5、 备份服务器上每周6的数据都保留,其他备份仅仅保留180天备份

客服端
cd / &&\ip=`ifconfig eth1|awk -F "[:]+" 'NR==2{print $4}'`mkdir /backup/$ip -ptar zcfh /backup/$ip/bak_$(date+%F_%w).tar.gz var/www/html app/logs var/spool/cron/root etc/rc.local&&\find /backup/$ip -type f -name"*$(date +%F_%w).tar.gz"|xargs md5sum >/backup/$ip/flag_$(date+%F_%w).txt &&\rsync -av /backup/$ip rsync_backup@172.16.1.41::backup/--password-file=/etc/rsync.passwordfind /backup/$ip -type f -mtime +7-name "*.tar.gz"|xargs rm -fr
cd / &&\第一条命令切换到上级目录

ip=`ifconfig eth1|awk -F "[: ]+"'NR==2{print $4}'`mkdir /backup/$ip -p因为我们模拟的是50台服务器要区分打包的文件是那台服务器的所以我们取没台服务器的IP作为目录把去出的IP数字变量为ip 创建以ip命名的目录
tar zcfh /backup/$ip/bak_$(date +%F_%w).tar.gzvar/www/html app/logs var/spool/cron/root etc/rc.local打包我们要备份的数据,打包到上一步创建的以IP为目录下面,因为要删除备份服务器180天前的备份数据

,为了区分是哪天备份的数据所以把包名以date+%F日期命名,题目还要求保留每周六的所以加了%w打印出周几以方便以后操作

rsync -av /backup/$iprsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password把打包的数据推送到服务端要让rsync成免密码模式
find /backup/$ip -type f -name "*$(date+%F_%w).tar.gz"|xargs md5sum >/backup/$ip/flag_$(date +%F_%w)查找出当天打包的数据并附上md5sum,同时把生成的md5sum值保存到flag_$(date +%F_%w)下,给服务端对比md5sum值用

find /backup/$ip -type f -mtime +7 -name"*.tar.gz"|xargs rm -fr因为当前目录只用保留七天的备份数据所以删除七天以前的数据

服务端
LANG=enflag_num=/tmp/check_$(date +%F).txtfind /backup/ -type f -name"flag_$(date +%F_%w).txt"|xargs md5sum -c|grep FAILED&>$flag_numif [ `cat $flag_num|wc -l` -gt 0];then mail -s "$(date +%F\ %T) backup isfail!!" 15855157334@163.com <$flag_numelse echo "backup is ok"|mail -s"$(date +%F\ %T) backup is successful" 15855157334@163.comfi#find /backup/172.16.1.31/ -type f -mtime -7 \! -name "bak*_6.tar.gz"|xargs rm -fr

LANG=en把字符集调成英文
flag_num=/tmp/check_$(date +%F).txt做一个变量把/tmp/check_$(date+%F).txt变量成flag_num
find /backup/ -type f -name "flag_$(date+%F_%w).txt"|xargs md5sum -c|grep FAILED &>$flag_numif [ `cat$flag_num|wc -l` -gt 0 ];then对比客户端打包的md5sum值如服务端的md5sum有没有变化,没有变化会输出成FAILED然后用grep过滤出来文件内容是空md5sum值如有变化文件不会变里面则有内容,最后查看文件里的内容,是空的则代表没有问题,如有内容代表包出了故障

mail -s"$(date +%F\ %T) backup is fail!!" 15855157337@163.com<$flag_numelse 如果里面有内容就会向设定的邮箱发报错信息,
echo"backup is ok"|mail -s "$(date +%F\ %T) backup issuccessful" 15855157337@163.comfi如果没有内容就会向设定邮箱发ok信息

find /backup/172.16.1.31/ -type f -mtime +180 \! -name "bak*_6.tar.gz"|xargs rm -fr按题目最后要求删除180天以前的数据,但周六的永久保存

想要发邮件到自己的邮箱必须要在/etc/mail.rc配置文件添加内容
set from=15855157334@163.com smtp=smtp.163.comsmtp-auth-user=15855157334 smtp-auth-password=cai1234 smtp-auth=login
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息