在上一篇部落格中,我們隻使用了rsync來實作資料的備份,但卻不能做到實時,因為守護程序觸發和執行有一段的時間間隔,如果對于資料量大的網站來說,一旦崩潰,就很難做到資料的完整性。在本篇文章中我們使用rsync+inotify的方式來解決這一問題。
inotify是一種強大的、細粒度的、異步的檔案系統時間監控機制,Linux核心從2.6.13版本開始就加入了對它的支援,通過它可以監控檔案系統中添加、删除、修改、移動等各種細微事件。
接下來使用rsync+inotify搭建實時同步系統:
現在有兩台伺服器:A伺服器(網站伺服器)、B伺服器(備份伺服器),當inotify工具檢測到A伺服器上檔案發生變化時,就會檢測差異,然後同步到B伺服器上。
1、安裝inotify工具inotify-tools
yum install inotify-tools
2、配置B伺服器上的rsyncd.conf檔案
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = nobody
gid = nobody
use chroot = no
max connections =
strict modes = no
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
[betterlife]
path = /var/www
comment = betterlife file
ignore errors
read only = no
write only = no
hosts allow = *
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass
其中server.pass檔案内容如下:
backup:密碼
修改server.pass檔案權限
然後啟動rsync守護程序
将rsync加入到自啟問價中
echo "rsync --daemon" >>/etc/rc.local
3、配置A伺服器
建立同步腳本
#!/bin/bash
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib 監測目錄 \
| while read files
do
rsync -vzrtopg --delete --progress --password-file=/etc/server.pass 同步檔案目錄 [email protected]伺服器位址::子產品名
echo "${files} was rsynced" >>/tmp/rsync.log >&
done
其中server.pass内容如下:
密碼
修改腳本檔案權限
chmod /var/www/inotifyrsync.sh
運作該腳本,并放入到背景
./inotifyrsync.sh >>/var/www/inotifyrsync.log &
最後将該指令放入到自啟檔案中
echo "./inotifyrsync.sh >>/var/www/inotifyrsync.log &" >>/etc/rc.local
至此,實時同步系統就算搭建完畢,但在搭建過程中,遇到一個問題,就是,将A伺服器檔案rsyncd.conf中的使用者名改成其他的名字,執行過程中會出現unauthorized user錯誤,但将使用者名改為backup就不會出現該錯誤,也不知道是什麼原因。
利用以上方式,結合crontab定時守護程序,可以完成定時資料庫備份,并且将備份的資料庫同步到另外一台伺服器上去。
定時備份資料庫代碼如下:
cronab -e
* * mysqldump -uroot -p密碼 需要備份的資料庫 >> 備份檔案存放位置
文章來源:http://www.turtletl.com