Linux的rsync远程数据同步工具
Rsync(remote synchronize) 是一個遠程數據同步工具,可以使用“Rsync算法”同步本地和遠程主機之間的文件。?
rsync的好處是只同步兩個文件不同的部分,相同的部分不在傳遞。類似于增量備份,?
這使的在服務器傳遞備份文件或者同步文件,比起scp工具要省好多時間。?
OS:ubuntu server 10.04?
server:192.168.64.128?
client:192.168.64.145
server
1.ubuntu? server 10.04默認已安裝rsync,rsync服務默認不是啟動的,我們要修改下面的文件。?
$sudo vi /etc/default/rsync?
RSYNC_ENABLE=true?? #false改true?
2.修改配置文件?
$sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc?? #已默認安裝的軟件,默認不啟動的似乎都要這么做?
我們先來查看一下這個文件?
$sudo cat /etc/rsyncd.conf?
# sample rsyncd.conf configuration file?
# GLOBAL OPTIONS?
#motd file=/etc/motd #登錄歡迎信息?
#log file=/var/log/rsyncd #日志文件?
# for pid file, do not use /var/run/rsync.pid if?
# you are going to run rsync out of the init.d script.?
pid file=/var/run/rsyncd.pid?
#指定rsync發送日志消息給syslog時的消息級別,常見的消息級別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默認值是daemon。?
#syslog facility=daemon?
#自定義tcp選項,默認是關閉的?
#socket options=?
#以下是模塊信息,我們可以創建多個模塊?
# MODULE OPTIONS?
[ftp]?
??????? comment = public archive #模塊描述?
??????? path = /var/www/pub #需要同步的路徑?
??????? use chroot = yes #默認是yes|true,如果為true,那么在rsync在傳輸文件以前首先chroot到path參數指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要root權限,并且不能備份指向外部的符號連接指向的目錄文件。?
#?????? max connections=10 #最大連接數?
??????? lock file = /var/lock/rsyncd #指定支持max connections參數的鎖文件。?
# the default for read only is yes...?
??????? read only = yes #只讀選項?
??????? list = yes #客戶請求時可用模塊時是否列出該模塊?
??????? uid = nobody #設定該模塊傳輸文件時守護進程應該具有的uid?
??????? gid = nogroup #設定該模塊傳輸文件時守護進程應具有的gid,此項與uid配合可以確定文件的訪問權限?
#?????? exclude = #用來指定多個由空格隔開的多個模式列表,并將其添加到exclude列表中。這等同于在客戶端命令中使用--exclude來指定模式,不過配置文件中指定的exlude模式不會傳遞給客戶端,而僅僅應用于服務器。一個模塊只能指定一個exlude選項,但是可以在模式前面使用"-"和"+"來指定是exclude還是include??? #這個我的理解是排除目錄中不需同步的文件?
#?????? exclude from = #可以指定一個包含exclude模式定義的文件名?
#?????? include = #與exclude相似?
#?????? include from = #可以指定一個包含include模式定義的文件名?
#?????? auth users = #該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這里的用戶和系統用戶沒有任何關系。如果"auth users"被設置,那么客戶端發出對該模塊的連接請求以后會被rsync請求challenged進行驗證身份這里使用的 challenge/response認證協議。用戶的名和密碼以明文方式存放在"secrets file"選項指定的文件中。默認情況下無需密碼就可以連接模塊(也就是匿名方式)?
#?????? secrets file = /etc/rsyncd.secrets #該文件每行包含一個username:password對,以明文方式存儲,只有在auth users被定義時,此選項才生效。同時我們需要將此文件權限設置為0600?
??????? strict modes = yes #該選項指定是否監測密碼文件的權限,如果該選項值為true那么密碼文件只能被rsync服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。默認值為true?
#?????? hosts allow = #允許的主機?
#?????? hosts deny = #拒絕訪問的主機?
??????? ignore errors = no #設定rsync服務器在運行delete操作時是否忽略I/O錯誤?
??????? ignore nonreadable = yes #設定rysnc服務器忽略那些沒有訪問文件權限的用戶?
??????? transfer logging = no #使rsync服務器使用ftp格式的文件來記錄下載和上載操作在自己單獨的日志中?
#?????? log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. #設定日志格式?
??????? timeout = 600 #超時設置(秒)?
??????? refuse options = checksum dry-run #定義一些不允許客戶對該模塊使用的命令選項列表?
??????? dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz #告訴rysnc那些文件在傳輸前不用壓縮,默認已設定壓縮包不再進行壓縮?
日志格式選項列表:?
%h:遠程主機名?
%a:遠程IP地址?
%l:文件長度字符數?
%p:該次rsync會話的進程id?
%o:操作類型:"send"或"recv"、”del.”?
%f:文件名?
%P:模塊路徑?
%m:模塊名?
%t:當前時間?
%u:認證的用戶名(匿名時是null)?
%b:實際傳輸的字節數?
%c:當發送文件時,該字段記錄該文件的校驗碼?
下面我們來定義自己的conf文件
# sample rsyncd.conf configuration file
# GLOBAL OPTIONS
#motd file=/etc/motd?
log file=/var/log/rsyncd?
# for pid file, do not use /var/run/rsync.pid if?
# you are going to run rsync out of the init.d script.?
pid file=/var/run/rsyncd.pid?
syslog facility=daemon?
#socket options=
# MODULE OPTIONS
[rsync_bk]
??????? comment = public archive?
??????? path = /home/rsync_bk???????????????????????????? #指定路徑,如果沒有這個目錄自己建。?
??????? use chroot = no?
#?????? max connections=10?
??????? lock file = /var/lock/rsyncd?
# the default for read only is yes...?
??????? read only = yes?
??????? list = yes?
??????? uid = nobody?
??????? gid = nogroup?
#?????? exclude =?
#?????? exclude from =?
#?????? include =?
#?????? include from =?
??????? auth users = rsync????????????? #rsync連接時的用戶名?
??????? secrets file = /etc/rsyncd.secrets?
??????? strict modes = yes?
??????? hosts allow = 192.168.64.145?
#?????? hosts deny =?
??????? ignore errors = yes?
??????? ignore nonreadable = yes?
??????? transfer logging = yes?
??????? log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.?
??????? timeout = 600?
??????? refuse options = checksum dry-run?
??????? dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
創建一個密碼文件?
$sudo vi /etc/rsyncd.secrets?
rsync:123?
$sudo chmod 0600 /etc/rsyncd.secrets????
啟動rsync?
sudo /etc/init.d/rsync start?
client?
我們再來看一下客戶端的操作,一般客戶端不需要進行特殊的配置,直接同步即可?
rsync -vzrtopg --progress rsync@192.168.64.128::rsync_bk .? #.為當前目錄,在服務端touch一個文件,同步后就會出現,當然你也可以指定一個位置比如/databk,需注意所建立的權限!
我們把這個同步工作交給crontab去執行。首先我們要創建一個密碼文件?
$sudo vi /etc/rsync.pwd輸入123,保存???? #密碼要一致?
!注意:下面這兩步操作是必須的,沒有足夠權限同步就會不成功,ls -l 你所指向的目錄?
sudo chmod 0600 /etc/rsync.pwd?
sudo chown 普通用戶:普通用戶組 /etc/rsync.pwd?
然后我們打開crontab,使它自動同步?
$crontab -e?
* * * * * rsync -a --password-file=/etc/rsync.pwd rsync@192.168.64.128::rsync_bk /databk??
crontab隨機啟動? sudo vi /etc/rc.local
參數說明:
-v verbose,即詳細模式
-z 壓縮
-r recursive 遞歸
-topg 保持文件原有屬性,一般不用加
--progress 用來顯示詳細進度情況
--delete 表示如果服務器刪除了一個文件,客戶端也應對應刪除
--exclude="*.sh" 表明不包括某些文件
--password-file=/etc/rsync.pwd 指定所使用的密碼文件
最后一項是需要同步的目錄
注意指定使用的密碼文件中只需要有密碼,不要有用戶名。
------------------------------------------------------------------------
1.在本地機器上對兩個目錄同步
$ rsync -zvr filename1 filename2
上述代碼是將filename1中的文件與filename2中的文件同步,如果將filename2中的文件同步到filename1中,修改代碼為:
$ rsync -zvr filename2 filename1
2.使用rsync –a 同步保留時間按標記
$ rsync -azv filename1 filename2
使用上述命令,將filename2中新同步的文件的時間與filename1中的創建的時間相同,
它保留符號鏈接、權限、時間標記、用戶名及組名相同。
3.從本地同步文件到遠程服務器
$rsync -avz filename1 ubuntu@192.168.0.1:/home/ubuntu/filename2
上述命令是將本地的filename1同步到遠程192.168.0.1的主機上。
注意:如果遠程主機的端口不是默認的22端口,假如是3000端口,上述的命令修改為,
$ rsync -avz '-e ssh -p 4000' filename1 ubuntu@192.168.0.1:/home/ubuntu/filename2
4.將遠程服務器的文件同步到本地
與步驟3類似,只是將filename1與遠程服務器的位置對換一下,
$rsync -avz ubuntu@192.168.0.1:/home/ubuntu/filename2 filename1
同理如果端口不是22,使用以下命令
$ rsync -avz '-e ssh -p 4000' ubuntu@192.168.0.1:/home/ubuntu/filename2 filename1
轉載于:https://blog.51cto.com/zhaoshilei/1890034
總結
以上是生活随笔為你收集整理的Linux的rsync远程数据同步工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS魔法堂:深入理解line-heig
- 下一篇: HBase 的存储结构