需求
1 2 3 4 5 6 7 8 9 10 11 12 |
客户端需求 1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02 2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02 3.客户端最后将备份的数据进行推送至备份服务器 4.客户端每天凌晨1点定时执行该脚本 5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间 服务端需求 1.服务端部署rsync,用于接收客户端推送过来的备份数据 2.服务端需要每天校验客户端推送过来的数据是否完整 3.服务端需要每天校验的结果通知给管理员 4.服务端仅保留6个月的备份数据,其余的全部删除 |
准备服务器

客户端
1)创建备份目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#备份目录格式 /backup/web01_172.16.1.31_2018-09-02 #取主机名 [root@web01 ~]# hostname web01 #取IP [root@web01 ~]# ifconfig eth1 | awk 'NR==2 {print $2}' 172.16.1.7 [root@web01 ~]# hostname -I | awk '{print $2}' 172.16.1.7 #取时间 [root@web01 ~]# date +%F 2020-08-12 #创建目录 [root@web01 ~]# mkdir -p /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F` |
2)打包
1 2 3 |
[root@web01 ~]# cd /backup/web01_172.16.1.7_2020-08-12/ [root@web01 /backup/web01_172.16.1.7_2020-08-12]# tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null |
3)推送数据
1 2 3 4 5 6 7 |
[root@web01 ~]# rsync -avz /backup/web01_172.16.1.7_2020-08-12 rsync_backup@172.16.1.41::backup sending incremental file list web01_172.16.1.7_2020-08-12/ web01_172.16.1.7_2020-08-12/conf.tar.gz sent 62,567 bytes received 47 bytes 125,228.00 bytes/sec total size is 68,669 speedup is 1.10 |
4)将以上内容写成脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@web01 ~]# mkdir /scripts [root@web01 ~]# vim /scripts/backup.sh #!/bin/bash #0.定义变量 SRC=/backup HOST=`hostname` IP=`hostname -I | awk '{print $2}'` DATE=`date +%F` DIR=${SRC}/${HOST}_${IP}_${DATE} #1.创建目录 mkdir -p $DIR #2.进到目录下并打包文件 cd $DIR tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null #3.推送 export RSYNC_PASSWORD=123456 rsync -avz $DIR rsync_backup@172.16.1.41::backup |
5)写入定时任务
1 2 3 |
[root@web01 ~]# crontab -e #每天凌晨1点进行文件备份 00 01 * * * /bin/bash /scripts/backup.sh &> /dev/null |
6)清理数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#模拟生成一个月数据 [root@web01 ~]# for i in {1..30};do date -s 2020/08/$i;sh /scripts/backup.sh;done #只保留七天的文件 [root@web01 ~]# find /backup/ -type d -mtime +7 | xargs rm -rf [root@web01 ~]# ll /backup/ total 0 drwxr-xr-x 2 root root 25 Aug 23 00:00 web01_172.16.1.7_2020-08-23 drwxr-xr-x 2 root root 25 Aug 24 00:00 web01_172.16.1.7_2020-08-24 drwxr-xr-x 2 root root 25 Aug 25 00:00 web01_172.16.1.7_2020-08-25 drwxr-xr-x 2 root root 25 Aug 26 00:00 web01_172.16.1.7_2020-08-26 drwxr-xr-x 2 root root 25 Aug 27 00:00 web01_172.16.1.7_2020-08-27 drwxr-xr-x 2 root root 25 Aug 28 00:00 web01_172.16.1.7_2020-08-28 drwxr-xr-x 2 root root 25 Aug 29 00:00 web01_172.16.1.7_2020-08-29 drwxr-xr-x 2 root root 25 Aug 30 00:00 web01_172.16.1.7_2020-08-30 |
7)完善脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@web01 ~]# vim /scripts/backup.sh #!/bin/bash #0.定义变量 SRC=/backup HOST=`hostname` IP=`hostname -I | awk '{print $2}'` DATE=`date +%F` DIR=${SRC}/${HOST}_${IP}_${DATE} #1.创建目录 mkdir -p $DIR #2.进到目录下并打包文件 cd $DIR tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null #3.对文件生成验证文件 md5sum $DIR/conf.tar.gz > $DIR/auth.txt #4.推送 export RSYNC_PASSWORD=123456 rsync -avz $DIR rsync_backup@172.16.1.41::backup #5.清理数据 find $SRC -type d -mtime +7 | xargs rm -rf |
服务端
1)安装邮件系统
1 2 3 4 5 6 7 8 9 10 11 |
[root@backup ~]# yum install -y mailx #编辑邮件系统 [root@backup ~]# vim /etc/mail.rc set from=1240206455@qq.com set smtp=smtps://smtp.qq.com:465 set smtp-auth-user=1240206455@qq.com set smtp-auth-password=jtyrsvysyukehgdi set smtp-auth=login set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb/ |
2)脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@web01 ~]# vim /scripts/auth.sh #!/bin/bash #0.定义变量 SRC=/backup HOST=`hostname` IP=`hostname -I | awk '{print $2}'` DATE=`date +%F` DIR=${SRC}/${HOST}_${IP}_${DATE} #1.验证文件的完整性 md5sum -c $SRC/*_$DATE/auth.txt > $SRC/result.txt #2.把验证结果发送到QQ mail -s "备份数据完整性" 124xxxx455@qq.com < $SRC/result.txt #3.清理数据 find $SRC -type d -mtime +180 | xargs rm -rf |