前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rsync小规模备份

Rsync小规模备份

作者头像
张琳兮
发布2018-09-10 11:35:57
5260
发布2018-09-10 11:35:57
举报
文章被收录于专栏:首富手记首富手记

Rsync上机实战

某公司里有一台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.confuid =   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           #列表为假,不能lshosts   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.passwordsending   incremental file list./test.txtsent 87   bytes  received 30 bytes  234.00 bytes/sectotal 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#打包文件,如果打包成功生成一个flag文件,并把文件的MD5指纹放到这个文件内/bin/tar -czf $Path/conf_$Time.tar.gz /var/spool/cron/root /etc/rc.local /scripts/ &&\/bin/tar -czf $Path/www_$Time.tar.gz /var/www/html &&\/bin/tar -czf $Path/logs_$Time.tar.gz /app/logs &&\touch $Path/falg_$Time.txt && \find $Path -type f -name "*$Time.tar.gz" | xargs md5sum >$Path/falg_$Time.txt#传到备份服务器上/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{}定时执行这个脚本:         [root@web01 sh]# crontab -l -u root00 * * * *   /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 root00 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档