衆多數據庫服務器的管理過程當中,在不一樣服務器間的文件傳輸是免不了的。您可使用scp命令或FTP方法完成文件的發送和接收,這篇文章我將給你們介紹另一種方法,這就是rsync命令。
rsync是文件傳輸程序,它的功能和算法描述能夠參考維基百科中的介紹。
參考連接:http://zh.wikipedia.org/zh-cn/Rsync
我來經過實驗給你們展現一下rsync命令的經常使用方法。
這裏咱們演示使用的操做系統是Linux,rsync已經預裝好。若是是AIX操做系統,須要單獨在IBM網站下載安裝包安裝。
演示場景:將secDB1服務器SRC目錄下的內容同步傳輸到secDB2服務器DEST目錄下,整個過程在secDB1服務器上來完成。
1.在第一臺主機的根目錄下建立一個名爲「/usr/20160626」的目錄,做爲咱們傳輸演示的源目錄。
[root@secDB1 /]# mkdir /usr/20160626
2.建立文件,根據日期生成文件夾,並拷貝每日生成的文件到新的文件夾中linux
datestr=$(date +%Y%m%d)
mkdir $datestr
cp $(find /orcl/dir -name "*$datestr.txt" ) /orcl/$datestr/算法
3.在第二臺主機的根目錄下建立一個名爲「test」的目錄,做爲咱們傳輸演示的目標目錄
[root@secDB2 /]# cd /usr
[root@secDB2 /]# mkdir /test
4.將secDB1服務器20160926目錄下的內容同步傳輸到secDB2服務器test目錄下
[root@secDB1 SRC]# rsync -av "ssh -i /usr/rsync_id_dsa" /orcl/20160926/ csdn@61.132.54.173:/usr/test
root@172.17.193.211's password:
building file list ... done
./數據庫
pos898321045110581_20160926.txt
pos898321045110582_20160926.txt
pos898321045110583_20160926.txt
pos898321045110584_20160926.txt
pos898321045110593_20160926.txt
pos898321045110594_20160926.txt
pos898321045110595_20160926.txt
pos898321045110596_20160926.txtbash
sent 162 bytes received 70 bytes 42.18 bytes/sec
total size is 0 speedup is 0.00
5.驗證第二臺主機的test目錄下是否有發送過來的文件
[root@secDB2 /]# cd /test
[root@secDB2 DEST]# ls -ltr
total 0
-rw-r--r-- 1 root root 0 Feb 21 02:37 f1
-rw-r--r-- 1 root root 0 Feb 21 02:37 f2
文件發送成功,目的達到。
6.修改test目錄下的f1文件內容,使之與源目錄SRC中的f1目錄不相同
[root@secDB2 DEST]# echo "mod" > f1
[root@secDB2 DEST]# cat f1
mod
[root@secDB2 DEST]# ls -ltr
total 4
-rw-r--r-- 1 root root 0 Feb 21 02:37 f2
-rw-r--r-- 1 root root 4 Feb 21 02:59 f1
7.再次將20160926目錄下的內容向test目錄同步
[root@secDB1 SRC]# rsync -av /SRC/ -e ssh root@172.17.193.211:/DEST
root@172.17.193.211's password:
building file list ... done
f1
sent 114 bytes received 48 bytes 46.29 bytes/sec
total size is 0 speedup is 0.00
注意,此時僅僅將有變化的內容f1同步到了test目錄,這也是rsync命令的優點所在。
8.在通過再次同步以後,此時DEST目錄下的文件再一次與SRC目錄下的內容保持一致。
[root@secDB2 DEST]# ls -ltr
total 0
-rw-r--r-- 1 root root 0 Feb 21 02:37 f1
-rw-r--r-- 1 root root 0 Feb 21 02:37 f2
9.注意「/」符號帶來的差異
若是將「/SRC/」後面的「/」去掉,此時將會將SRC目錄和目錄的下的全部內容通通的發送到DEST目錄下。
[root@secDB1 SRC]# rsync -av /SRC -e ssh root@172.17.193.211:/DEST
root@172.17.193.211's password:
building file list ... done
SRC/
SRC/f1
SRC/f2
sent 166 bytes received 70 bytes 67.43 bytes/sec
total size is 0 speedup is 0.00
10.使用rsync命令的聯機幫助文檔能夠得到更多的提示信息
[root@secDB1 SRC]# rsync -h
……此處內容省略……
11.小結
rsync在給咱們傳輸文件提供另一種途徑的同時,也提升了咱們的工做效率。在存在少許差別須要完成文件同步的場合下是不二選擇。善用之。
Good luck.服務器
-------------------------------------------------------------------------------------------------------------------------------------ssh
2、取消輸入密碼ide
問題描述post
在linux平臺上經常使用rsync協議來同步文件和目錄,'rsync'也是各類linux發行版標配的命令。當咱們基於linux平臺開發應用程序時,經常須要從Java或者Python代碼中調用rsync命令來實現文件的傳輸。網站
例如,假設咱們要按照以下需求來傳輸文件:ui
要實現rsync的無密碼傳輸,基本思路是用一對公私鑰來代替賬戶密碼,實現ssh鏈接時的認證。
下面咱們來看看一步步如何實現。
配置rsync
1. [遠端機器] 建立專用賬戶csdn
注意:
2. [本地機器] 用ssh-keygen生成密鑰
注意:
3. [本地機器] 將公鑰傳送到遠端機器csdn賬戶的.ssh目錄下
4. [遠端機器] 將傳輸過來的公鑰導入csdn的authorized_keys文件
rsync命令
這樣,咱們就能夠免輸密碼在兩機器間同步文件和目錄了,好比,一個最簡單的命令:
值得注意的是,當從Java或Python代碼中構建rsync命令時,有時很難將-e "ssh -i xxxx"做爲一個普通的command option,這裏有一個簡單的替代方法,就是在啓動rsync命令以前,往rsync進程中添加一個環境變量:RSYNC_RSH="ssh -i xxxx"
上面只是一個最簡單的rsync命令,其實rsync有許多有意思的選項,能夠幫助咱們完成不少高端大氣上檔次的功能。好比,下面是一個更加複雜的命令,用來在兩臺機器間傳輸整個目錄並在傳輸完成後刪除源文件:
具體參數的含義可參考rsync文檔,這裏僅做簡單說明: