Rsync小规模备份

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.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 #账户密码的存放位置,格式为UserNamepassword

[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/ [email protected]::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/ [email protected]::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

 


猜你喜欢

转载自blog.51cto.com/13447608/2114587