企业实战项目:rsync全网备份的过程
某公司里有一台Web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份。要求如下:
1.每天晚上12点整在Web服务器A(web01 )上打包备份网站程序目录并通过rsync命令推送到服务器B(backup)上备份保留
(备份思路可以是先在本地按日期打包,然后再利用rsync推到备份服务器上)。
rsync守护进程模式
定时任务 (脚本)
具体要求如下:
1)Web服务器A和备份服务器B的备份目录必须都为/backup。
#扩展要求/backup/ip地址命名目录中
2)Web服务器站点目录假定为(/var/www/html)。
3)Web服务器本地仅保留7天内的备份。
4)备份服务器上每周六的数据都保留,其他备份仅保留180天备份。
5)备份服务器上检查备份结果是否正常(备份内容变?),并将每天的备份结果发给管理员信箱。
发邮件:
1.注册一个163的邮箱
2.保证 postfix 邮件服务运行
首先准备俩台机器
web01 10.0.0.7
backup 10.0.0.41
配置rsync守护进程模式并测试
让服务端和客户端可以实现推拉
然后我们来完成全网备份的任务:
一、首先是下面四步:
客户端web01
1.取ip地址,并在/backup/下以ip地址为目录
2.打包备份/etc/ /var/www/html 到/backup/172.16.1.7,压缩包命名为conf-2019-05-20-1.tar.gz
3.把备份推送到backup服务器的backup模块中
4.制作md5校验
5.删除7天之前的备份
1.取ip地址,并在/backup/下以ip地址为目录
[15:48 root@web01 ~]# hostname -I
10.0.0.7 172.16.1.7
[15:48 root@web01 ~]# hostname -I|awk '{print $NF}'
172.16.1.7
[15:49 root@web01 ~]# IP=$(hostname -I|awk '{print $NF}')
[15:49 root@web01 ~]# echo $IP
172.16.1.7
[15:49 root@web01 ~]# mkdir -p /backup/$IP
[15:50 root@web01 ~]# ll /backup/
total 0
drwxr-xr-x 2 root root 38 May 21 15:48 172.16.1.7
2.打包备份/etc/ /var/www/html 到/backup/172.16.1.7
压缩包命名为conf-2019-05-20-1.tar.gz
创建一个/var/www/html目录
[6:01 root@web01 ~]# mkdir -p /var/www/html
[16:01 root@web01 ~]# echo $IP
172.16.1.7
[16:01 root@web01 ~]# mkdir -p /backup/$IP
[16:01 root@web01 ~]# tar zcf /backup/$IP/conf-$(date +%F-%w).tar.gz /etc/ /var/www/html
tar: Removing leading `/' from member names
[16:01 root@web01 ~]# tree /backup/
/backup/
└── 172.16.1.7
└── conf-2019-05-21-2.tar.gz
3.把备份推送到backup服务器的backup模块中
[16:34 root@web01 ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
172.16.1.7/
172.16.1.7/conf-2019-05-21-2.tar.gz
sent 10,016,822 bytes received 54 bytes 6,677,917.33 bytes/sec
total size is 10,214,680 speedup is 1.02
服务端看一下:
[16:35 root@backup ~]# tree /backup/
/backup/
└── 172.16.1.7
└── conf-2019-05-21-2.tar.gz
1 directory, 1 file
4. 制作md5校验信息
[19:51 root@web01 ~]# find /backup/ -type f -name "*.tar.gz"|xargs md5sum
37f059ed20b843ed23b212b42a8a63f2 /backup/172.16.1.7/conf-2019-05-21-2.tar.gz
[19:52 root@web01 ~]# find /backup/ -type f -name "*.tar.gz"|xargs md5sum >/backup/*/*.md5
[19:52 root@web01 ~]# cat /backup/*/*.md5
37f059ed20b843ed23b212b42a8a63f2 /backup/172.16.1.7/conf-2019-05-21-2.tar.gz
5.删除7天之前的备份
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -rf
以上4步完成后把/backup下的测试文件删除掉
6.然后我们就可以写入脚本文件了
[16:45 root@web01 ~]# vim /server/scripts/rsync_backup.sh
#!/usr/bin/bash
. /etc/profile
#定义变量
IP=$(hostname -I|awk '{print $NF}')
HOSTNAME=$(hostname)
#创建目录
mkdir -p /backup/$IP
#打包压缩
tar zcf /backup/$IP/conf-$(date +%F-%w).tar.gz /etc/ /var/www/html
#md5校验
find /backup/ -type f -name "*.tar.gz"|xargs md5sum >/backup/$IP/$HOSTNAME.md5
#推送
rsync -az /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
#删除7天之前的
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -rf
md5sum校验信息在下文中
7.执行一下脚本并查看目录是否创建成功
[17:48 root@web01 ~]# tree /backup/
/backup/
└── 172.16.1.7
├── conf-2019-05-21-2.tar.gz
└── web01.md5
1 directory, 2 files
1 directory, 1 file
8.写入定时任务测试是否成功然后修改规定时间
每天晚上12点备份
[17:02 root@web01 ~]# crontab -e
#rsync_backup
00 00 * * * sh /server/scripts/rsync_backup.sh >/dev/null 2>&1
二、接着我们去backup服务器上配置
我们为了方便测试,可以先创建6个从周一到周6的备份文件
忽略180天,环境中没有
[17:12 root@backup ~]# touch /backup/172.16.1.7/conf-2019-05-21-{0..6}.tar.gz
[17:13 root@backup ~]# find /backup/ -type f -name "*.tar.gz"
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz
/backup/172.16.1.7/conf-2019-05-21-0.tar.gz
/backup/172.16.1.7/conf-2019-05-21-1.tar.gz
/backup/172.16.1.7/conf-2019-05-21-3.tar.gz
/backup/172.16.1.7/conf-2019-05-21-4.tar.gz
/backup/172.16.1.7/conf-2019-05-21-5.tar.gz
/backup/172.16.1.7/conf-2019-05-21-6.tar.gz
1.备份服务器上的每周六的数据都保留,其他备份仅保留180天备份
先测试一下如何保留周六的数据
[17:14 root@backup ~]# find /backup/ -type f -name "*.tar.gz" ! -name "*-6.tar.gz"
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz
/backup/172.16.1.7/conf-2019-05-21-0.tar.gz
/backup/172.16.1.7/conf-2019-05-21-1.tar.gz
/backup/172.16.1.7/conf-2019-05-21-3.tar.gz
/backup/172.16.1.7/conf-2019-05-21-4.tar.gz
/backup/172.16.1.7/conf-2019-05-21-5.tar.gz
然后删除掉
[17:20 root@backup ~]# find /backup/ -type f -name "*.tar.gz" ! -name "*-6.tar.gz"|xargs rm -rf
[17:21 root@backup ~]# ll /backup/172.16.1.7/
total 0
-rw-r--r-- 1 root root 0 May 21 17:13 conf-2019-05-21-6.tar.gz
2.检查备份结果是否正常(备份内容是否改变?)
md5sum检验信息
[17:21 root@backup ~]# tree /backup/
/backup/
└── 172.16.1.7
└── conf-2019-05-21-6.tar.gz
1 directory, 1 file
[17:22 root@backup ~]# find /backup/ -type f -name "*.tar.gz" |xargs md5sum
d41d8cd98f00b204e9800998ecf8427e /backup/172.16.1.7/conf-2019-05-21-6.tar.gz
[17:22 root@backup ~]# find /backup/ -type f -name "*.tar.gz" |xargs md5sum >/backup/172.16.1.7/web01.md5
[17:23 root@backup ~]# md5sum -c /backup/172.16.1.7/web01.md5
/backup/172.16.1.7/conf-2019-05-21-6.tar.gz: OK
校验md5信息的几种方法
[17:42 root@backup ~]# cp -a /backup/172.16.1.7/ /backup/172.16.1.8
[17:42 root@backup ~]# cp -a /backup/172.16.1.7/ /backup/172.16.1.9
[17:42 root@backup ~]# cp -a /backup/172.16.1.7/ /backup/172.16.1.10
[17:42 root@backup ~]# find /backup/ -type f -name "*.md5"|xargs md5sum -c
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
[17:42 root@backup ~]# md5sum -c /backup/\*/\*.md5 \\撬棍无意义
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
3.将校验信息写入文件中
先创建一个文件/backup/md5.txt
[18:48 root@backup ~]# find /backup/ -type f -name "*.md5"|xargs md5sum -c
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
[18:51 root@backup ~]# find /backup/ -type f -name "*.md5"|xargs md5sum -c >/backup/md5.txt
[18:52 root@backup ~]# cat /backup/md5.txt
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
4.发送邮件
1.注册一个163的邮箱
记得添加配置邮箱的授权码,不然邮箱会被屏蔽掉了
2.保证 postfix 邮件服务运行
[17:47 root@backup ~]# systemctl restart postfix.service
[17:50 root@backup ~]# systemctl is-active postfix.service
active
[17:50 root@backup ~]# systemctl is-enabled postfix.service
enabled
3.配置邮箱配置文件
默认没有安装
yum install -y mailx
配置/etc/mail.rc最后一行加入:
[17:56 root@backup ~]# vim /etc/mail.rc
....
set from=lichenxing0430@163.com
set smtp=smtp.163.com
set smtp-auth-user=lichenxing0430
set smtp-auth-password=\\邮箱密码,这里不方便写入
set smtp‐auth=login
执行一下发送邮件的命令
mail -s:指定邮件的主题
mail -s " Rsync Backup 完成" lichenxing0430@163.com </backup/md5.txt
稍等几秒钟...5.以上完成后我们就可以将命令写到脚本里了
[19:02 root@backup ~]# vim /server/scripts/backup.sh
#!/bin/bash
. /etc/profile
#校验md5信息
find /backup/ -type f -name "*.md5"|xargs md5sum -c >/backup/md5.txt
#删除180天前的
find /backup/ -type f -name "*.tar.gz" ! -name "*-6.tar.gz" -mtime +180|xargs rm -rf
#发送邮件
mail -s " Rsync Backup 完成" 245684979@qq.com </backup/md5.txt
6.书写定时任务
[19:06 root@backup ~]# crontab -e
#backup.sh
00 06 * * * sh /server/scripts/check_backup.sh >/dev/null 2>&1
今天的知识点看似很多其实不多,要理解客户端和服务端的每一条脚本命令的作用。
未完待续......