Rsync小規模備份
某公司裏有一臺web服務器,裏面的數據很重要,但是如果硬盤壞了,數據就會丟失,現在領導要求你把數據在其他機器上做一個周期性定時備份。要求如下:
每天晚上00點整在Web服務器web01上打包備份網站程序目錄並通過rsync命令推送到服務器Rsync服務器上備份保留
具體要求:
1) web服務器web01和備份服務器rsync的備份目錄必須都為/backup
2) Web服務器站點目錄假定位(/var/www/html,/app/logs)
3) Wen服務器本地僅保留7天內的備份
4) 備份服務器上檢查本分結果是否正常,並將每天的備份結果發給管理員
5) 備份服務器上每周六的數據都保留,其他備份僅保留
實際操作:
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 #賬戶密碼的存放位置,格式為 [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 |
Rsync小規模備份