Linux遠程增量備份-Rsync
Rsync使用的Rsync算法來使本地和遠程主機的文件達到同步,這個算法只傳送兩個文件的不同部分,從而實現增量備份
特點:
能同步整個目錄、樹和文件系統
有選擇性的保持符號鏈接、硬連接、文件屬主、權限、設備以及時間等
能用rsh、ssh或端口作為傳輸端口,支持匿名同步
安裝:
yum install -y rsync
rsync命令參數:
-v表示verbose詳細顯示
-z表示壓縮
-r表示recursive遞歸
-t表示保持原文件創建時間
-o表示保持原文件屬主
-p表示保持原文件的參數
-g表示保持原文件的所屬組
-a存檔模式
-P表示代替-partial和-progress兩者的選項功能
-e ssh建立起加密的連接。
--progress是指顯示出詳細的進度情況
--delete是指如果服務器端刪除了這一文件,那麽客戶端也相應把文件刪除,保持真正的一致。
[email protected]::share1 user123是server端指定認證用戶,::share1是模塊名,也就是在/etc/rsyncd.conf中自定義的名稱。
--exclude="*.sh" 不包含某些文件
基於SSH的同步源
從遠程服務器備份到本機
rsync -avz [email protected]:/var/www/html/* /backup/ssh/
從本機上傳到遠程服務器
rsync -avz /backup/ssh/* [email protected]:/var/www/html/
基於rsync的同步源
vim /etc/rsyncd.conf
address=192.168.200.102 #監聽地址
port=873 #監聽端口
use chroot=yes #是否鎖定path目錄
uid=nobody
gid=nobody
log file=/var/log/rsyncd.log #日誌位置
hosts allow=192.168.200.0/255.255.255.0
hosts deny=0.0.0.0/0.0.0.0
[backup]
comment=backup_server #說明
path=/var/www/html #共享目錄
read only=false #權限為讀寫,true為只讀
list=false #不允許列出文件
dont compress=*.gz *.bz2 *.zip #傳輸時那些文件不壓縮
auth users=user123 #虛擬用戶用戶名
secrets file=/etc/rsyncd_users.db #虛擬用戶密碼配置文件位置
vim /etc/rsyncd_users.db
user123:1234
設置密碼文件權限為600(必須,否則提示認證失敗)
chmod 600 /etc/rsyncd_users.db
設置目錄權限
setfacl -m user:nobody:rwx /var/www/html/
啟動rsync
rsync --daemon
centos7啟動
systemctl start rsyncd
客戶端測試
從遠程服務器備份到本機
rsync -avz [email protected]::backup /backup/rsync/
從本機上傳到遠程服務器
rsync -avz /backup/rsync/* [email protected]::backup
rsync -avz /backup/rsync/* rsync://[email protected]/backup#與上述命令結果相同
免密碼驗證
1. 可以通過ssh密鑰登陸實現
2.通過變量RSYNC_PASSWORD實現自動登陸
export RSYNC_PASSWORD=1234
3. 用--password-file=/password/path/file指定密碼文件(權限要為700)
實時同步工具:inotify(需要備份的服務器安裝)
https://sourceforge.net/projects/inotify-tools/
tar -xzvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13/
./configure
make && make install
vim rsync.sh
#!/bin/bash
a="/usr/local/bin/inotifywait -mrq -e create /var/www/html/"
b="/usr/bin/rsync -avz /var/www/html/* [email protected]:/root"
$a | while read directory event file
do
$b
done
chmod 750 rsync.sh
./rsync.sh &
export RSYNC_PASSWORD=1234 #實現免密碼驗證
cd /var/www/html/
[root@local2 html]# touch 123
[root@local2 html]# sending incremental file list
123
sent 102 bytes received 31 bytes 266.00 bytes/sec
total size is 0 speedup is 0.00
inotify+unsion雙向實時同步
環境配置:
兩臺機器能通過密鑰對互相訪問
http://liang-yao.cnblogs.com/p/8448224.html
2. 安裝unison的編譯工具ocaml
wget https://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.1.tar.gz
tar xzvf ocaml-3.10.1.tar.gz
cd ocaml-3.10.1/
./configure
make world opt
make install
3. 安裝unison
wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.32.52/unison-2.32.52.tar.gz
tar xvf unison-2.32.52.tar.gz
cd unison-2.32.52
make UISTYLE=text THREADS=true STATIC=true
#當前工作模式:文本 多進程工作模式
cp unison /usr/local/bin
4. 安裝inotify
https://sourceforge.net/projects/inotify-tools/
tar -xzvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13/
./configure
make && make install
server2和server1步驟相同
server1創建server1目錄
mkdir /server1
server2創建server2目錄
mkdir /server2
5. 腳本:vim 3.sh
#!/bin/bash
#server1和server2的netip和localfile、netfile不同
netip=192.168.200.101
localfile=/server2
netfile=/server1
a="/usr/local/bin/inotifywait -mrq -e create,delete,modify $localfile"
b="/usr/local/bin/unison -batch $localfile/ ssh://$netip/$netfile"
$a | while read directory event file
do
$b
done
chmod +x 3.sh
./3.sh & #把腳本放入後臺執行,查看效果
!!!主機名不能相同
Linux遠程增量備份-Rsync