rsync+inotify-tools+ssh實現mysql-bin日志文件實時備份
1、環境:兩台Centos計算機直連,其服務器A的IP地址為192.168.1.124,服務器B的IP地址為192.168.1.121。
2、需求軟件安裝(ssh系統默認已經安裝):
服務器A:
yum install rsync inotify-tools
服務器B:
yum install rsync
3、建立用戶(備份執行用戶)
建立用戶:useradd rsync
設置密碼:略
注意:兩台服務器都需要建立用戶(此處兩天服務器建立了相同的用戶,也可建立不同的用戶)
4、建立ssh-key實現ssh自動連接
服務器A
建立公鑰和私鑰
[root@A ~]# su - rsync
[rsync@A ~]$ ssh-keygen -t rsa(全部使用默認值,一直按回車即可)
完成後,此時會在/home/rsync/.ssh下,生成一對“公鑰和私鑰”,如下所示
[rsync@A .ssh]# ll
total 12
-rw-------. 1 rsync rsync 1675 Oct 20 01:47 id_rsa
-rw-r--r--. 1 rsync rsync 393 Oct 20 01:47 id_rsa.pub
然後,如下命令,將id_rsa.pub負責到服務器B上。
scp /home/rsync/.ssh/id.rsa.pub [email protected]:/home/rsync/
服務器B:
建立ssh存儲“公鑰”的目錄:
mkdir /home/rsync/.ssh
chmod 700 /home/rsync/.ssh
將服務器A上傳遞的公鑰,mv到/home/rsync/.ssh。如下命令
mv /home/rsync/id_rsa.pub /home/rsync/.ssh/authorized_keys
chmod 600 /home/rsync/.ssh/authorized_keys
重啟SSH服務
[root@A ~]# /etc/init.d/sshd restart
[root@B ~]# /etc/init.d/sshd restart
5、inotify_tools的使用
1、確定inotifywait的位置
2、inotifywait的常見使用方法
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib
命令解釋:
-m 是保持一直監聽
-r 是遞歸查看目錄
-q 是打印出事件
-e create,move,delete,modify,attrib 是指 “監聽 創建 移動 刪除 寫入 權限” 事件
6、服務器A上創建實時監控備份腳本inotify.ssh
#!/bin/sh
SRC=/usr/local/mysql/binlog/
DST=[email protected]:/home/rsync1/test
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F
do
/usr/bin/rsync -ahqzt --delete $SRC $DST
done
命令解釋:
SRC:監控的目錄()
DST:備份的目錄
while read D E F:inotifywait 命令產生三個返回值,分別是“日期,時間,文件” 這3個返回值會做為參數傳給read,因此腳本中的“while read D E F” 寫法細化了返回值。
rsync命令解釋:
/usr/bin/rsync -ahqzt --delete $SRC $DST
-a 存檔模式
-h 保存硬連接
-q 制止非錯誤信息
-z 壓縮文件數據在傳輸
-t 維護修改時間
-delete 刪除於多余文件
7、腳本的運行
服務器A:
修改執行權限:chmod +x inotify.sh
在rsync用戶模式下運行該腳本(ssh-key是rsync用戶建立的):
su - rsync
[rsync@A sbin]$ ./inotify_rsync.sh & #在後台運行
此次在服務器A的/usr/local/mysql/binlog/#在該目錄下,建立文件和目錄,可以實時備份到目標位置
注意:
1、備份用戶rsync有沒有讀取/usr/local/mysql/binlog/目錄的權限,不然備份失敗
2、建議修改mysql-bin的存儲目錄,如下所示
log-bin=/usr/local/mysql/binlog/mysql-bin
#打開日志(主機需要打開),這個mysql-bin也可以自定義,這裡也可以加上路徑,如:/usr/local/mysql/binlog/mysql-bin