1. 程式人生 > >Rsync小規模備份

Rsync小規模備份

rsync web服務器備份 定時

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


Rsync小規模備份