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

每天晚上00点钟在web服务器A上打包备份网站目录并通过rsync命令推送到服务器B上备份保留(备份思路可以是按日期打包,然后再推到备份服务器上。)

具体要求如下

1、    web服务器A和备份服务器B的备份目录必须都是/backup

2、    web服务器站点目录假定(/var/www/html)

3、    web服务器本地仅保留7天内的备份

4、    备份服务器上检查备份结果是否正常,并将每天的备份结果发送给管理员信箱

5、    备份服务器上每周6的数据都保留,其他备份仅仅保留180天备份 

 

 

 

 

客服端

cd / &&\

ip=`ifconfig eth1|awk -F "[:]+" 'NR==2{print $4}'`

mkdir /backup/$ip -p

tar 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.password

find /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=en

flag_num=/tmp/check_$(date +%F).txt

find /backup/ -type f -name"flag_$(date +%F_%w).txt"|xargs md5sum -c|grep FAILED&>$flag_num

if [ `cat $flag_num|wc -l` -gt 0];then

        mail -s "$(date +%F\ %T) backup isfail!!" 15855157334@163.com <$flag_num

else

        echo "backup is ok"|mail -s"$(date +%F\ %T) backup is successful" 15855157334@163.com

fi

#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.com

fi

如果没有内容就会向设定邮箱发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 s

mtp-auth=login