某公司里有一台web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份。要求如下:
每天晚上00点整在Web服务器web01上打包备份网站程序目录并通过rsync命令推送到服务器Rsync服务器上备份保留
具体要求:
1) web服务器web01和备份服务器rsync的备份目录必须都为/backup
2) Web服务器站点目录假定位(/var/www/html,/app/logs)
3) Wen服务器本地仅保留7天内的备份
4) 备份服务器上检查本分结果是否正常,并将每天的备份结果发给管理员
5) 备份服务器上每周六的数据都保留,其他备份仅保留180天备份
实际操作:
1, 构建rsync服务端:
rsync-3.0.6-9.el6_4.1.x86_64 #安装rsync软件包 创建服务端配置文件/etc/rsyncd.conf uid = rsync #守护进程的虚拟账号 gid = rsync #守护进程的虚拟用户组 use chroot = no #和安全相关的 max connections = 200 #最大连接数,同时 timeout = 300 #超时时间 pid file = /var/run/rsyncd.pid #PID进程id号存放位置 lock file = /var/run/rsyncd.lock #锁文件 log file = /var/log/rsyncd.log #日志文件存放位置 [backup] #模块名称 path = /backup #客户端推送过来的目录 ignore errors #忽略错误 read only = false #只读为假,即可读可写 list = false #列表为假,不能ls hosts allow = 172.16.1.0/24 #允许访问的网段 auth users = rsync_backup #推送用的账户,可以不是系统账户 secrets file=/etc/rsync.password #账户密码的存放位置,格式为UserName:password [root@backup /]# useradd -s /sbin/nologin rsync –M #创建虚拟用户rsync,不创建家目录 [root@backup /]# grep ^rsync /etc/passwd #检查一下用户是否创建成功 rsync:x:501:501::/home/rsync:/sbin/nologin [root@backup /]# mkdir /backup #创建目录 [root@backup /]# chown rsync:rsync /backup/ #更改目录的属主和属组,以便有权限推送 [root@backup /]# ll -d /backup/ #以长格式显示文件属性 drwxr-xr-x. 2 rsync rsync 4096 May 5 11:36 /backup/ [root@backup /]# cat >>/etc/rsync.password<<EOF > rsync_backup:password > EOF [root@backup /]# chmod 600 /etc/rsync.password #因为里面存放的是明文的密码文件,所以要给他600权限,防止别人读取密码 [root@backup /]#rsync --daemon #启动服务 [root@backup /]# netstat -ntalp | grep rsync | grep -v grep #查看服务有没有处于监听状态 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 9079/rsync tcp 0 0 :::873 :::* LISTEN 9079/rsync
|
2, 然后进入到客户端
也安装rsync-3.0.6-9.el6_4.1.x86_64 #安装rsync软件包 创建密码文件,我们习惯和服务器端使用同一个文件/etc/rsync.password [root@web01 ~]# echo "password" >>/etc/rsync.password #这个文件里只需要密码 [root@web01 ~]#chmod 600 /etc/rsync.password #同上 [root@web01 ~]# ll -d /etc/rsync.password -rw-------. 1 root root 9 May 8 05:10 /etc/rsync.password [root@web01 ~]# mkdir /backup #创建推送内容存在的目录 测试一下/backup目录下的内容能不能推送到rsync服务器端 [root@web01 ~]# echo "test" >>/backup/test.txt [root@web01 ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup/ --password-file\=/etc/rsync.password sending incremental file list ./ test.txt sent 87 bytes received 30 bytes 234.00 bytes/sec total size is 5 speedup is 0.04 服务端能看到刚才推送过来的内容,服务搭建完成 [root@backup /]# cat /backup/test.txt test |
3, 然后开始在web01服务器上创建打包文件,打包文件名包含日期,并设置存放七天
vim / scripts/html_tar.sh #!/bin/bash #创建一个归档压缩文件到/backup这个目录里面 IP=`/sbin/ifconfig eth2 | /bin/awk -F "[ :]+" 'NR==2 {print $4}'` Path=/backup/$IP #前一天的时间 Time=`/bin/date +"%F" -d "-1 days"` #判断一下这个目录如果不存在就创建 [ ! -d $Path ] && mkdir -p $Path #打包文件并生成md5校验文件 /bin/tar -czf $Path/conf_$Time.tar.gz /var/spool/cron/root /etc/rc.local /scripts/ && /usr/bin/md5sum $Path/conf_$Time.tar.gz >>$Path/conf_$Time .md5 >>/dev/null 2&>1 /bin/tar -czf $Path/www_$Time.tar.gz /var/www/html && /usr/bin/md5sum $Path/www_$Time.tar.gz >>$Path/www_$Time.md5 /bin/tar -czf $Path/logs_$Time.tar.gz /app/logs >>/dev/null 2&>1 && /usr/bin/md5sum $Path/logs_$Time.tar.gz >> $Path/logs_$Time.md5 #传到备份服务器上 /usr/bin/rsync -az /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password #删除7天以前的文件 find /backup -type f -mtime +7 -name "*.tar.gz" |xargs -i rm -rf{} find /backup -type f -mtime +7 -name "*.md5" |xargs -i rm -rf{} 定时执行这个脚本: [root@web01 sh]# crontab -l -u root 00 * * * * /bin/sh /scripts/html_tar.sh >>/dev/null 2&>1
|
4, 服务器上检查备份过来的文件有没有错误
#!/bin/bash #找到修改日期是一天以内的md5校验文件,进行校验,然后判断同步数据是否完全 fileMd5Lits=$(find /backup/ -type f -mtime -1 -name "*.md5") for file in $fileMd5List do if [ $(/usr/bin/md5sum -c $file | awk '{print $2}') == 'OK' ] then echo "$file 校验完成数据,备份正常" fi done #查找180天意外备份过来的目录,然后进行删除,并排除日期为星期6的不删除 fileList=`find /backup/ -type f -mtime +180` for i in $fileList do #截取这个文件的修改日期 mtime=`/usr/bin/stat $i | awk 'NR==6 {print $2}'` #指定一个日期,查看这个日期是星期几, week=`/bin/date -d $mtime +%w ` #判断当前是不是星期6,不是星期六才能删除 if [ $week -ne 6 ] then rm -r $i fi done [root@backup backup]# crontab -l -u root 00 3 * * * /bin/sh /scripts/baskup_del.sh >>/dev/null 2&>1 #创建一个定时任务 |
5, 检查是否成功
[root@web01 backup]# date -s "23:59:00 2018-05-08" Tue May 8 23:59:00 EDT 2018 [root@web01 backup]# cd /var/www/html/ [root@web01 html]# touch {1..10} 然后等一分钟去服务器端看看有没有备份成功 [root@backup log]# ls /backup/172.16.1.8 服务端文件存在,备份脚本成功 conf_2018-05-08.md5 conf_2018-05-08.tar.gz logs_2018-05-08.md5 logs_2018-05-08.tar.gz www_2018-05-08.md5 www_2018-05-08.tar.gz |
原文:http://blog.51cto.com/13447608/2114587