1. 程式人生 > >Linux遠程增量備份-Rsync

Linux遠程增量備份-Rsync

bcp 實時 install root ets post 通過 端口 遞歸

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