linux rsync文件夾增量同步
就是說用rsync去同步一個很大的文件夾幾十G,第一次的時候會同步幾十G的數據,然後又更新/刪除的時候只需要同步跟新、刪除的文件)用的是xxx算法,這不是我們需要管的,大多說情況我們需要知道怎麼用就行了
問題1:用rsync同步文件夾,我的主機用的是ssh帶密碼登錄的,可以用嗎?
回答:用rsync同部文件、文件夾,不需要知道你的ssh key,也不需要知道你登錄賬號密碼,就像QQ一樣,它的運行不需要知道你的電腦賬號密碼,你只要開着機,把軟件運行,然後設置你rsync ( QQ ) 密碼不要被別人知道就行了
問題2:用rsync同步文件,設置的密碼跟系統的密碼有關係嗎?
回答:同上,你在開機的狀態下,啓動rsync這個軟件,然後設置相應的參數,它就會把文件/文件夾共享出去,別人通過你的ip密碼就能訪問到相應的文件/文件夾
linux生產服務器的文件定時同步到備用的服務器(ps我們的代碼其實已經走git了,只是一些圖片文件和配置文件是沒有用版本控制的,其實嘛我覺得圖片文件夾也最好進入版本控制吧,只是倉庫大一點而已)
生產服務器ip :78.159.xxx.238 (下面稱爲服務器)
從服務器ip :78.159.xxx.209 (下面成爲客戶端)
備份生產服務器的 /home/html 文件夾到從服務器 /home/backup_html文件夾
1.安裝rsync : yum -y install rsync
記得開啓要873端口哦,rsync默認是用這個端口的
查看有沒有開啓873端口:telnet 78.159.xxx.238 873 如果沒有提示連接錯誤
配置rsync服務端 : vim /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = root
gid = root
use chroot = yes
max connections = 4
read only = yes
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
timeout = 1800
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[backup]
path=/home/html
ignore errors
auth users = root
secrets file = /etc/rsyncd.pass
新建編輯密碼文件 vim /etc/rsyncd.pass 輸入你要的密碼:格式root:123456
注意這裏的密碼跟你服務器的root密碼沒有關係的,你把873端口開放出來了,然後在別的機器就可以通過你這個密碼和端口訪問到你設置的文件夾(例如這裏的:/home/html ),別人知道我的ip用123456這個密碼,就可以訪問到我的/home/html這個目錄不過我只設置了它能讀取,還是不能修改我的文件夾的
給密碼文件設置權限:chmod 600 /etc/rsyncd.pass (注意是600權限哦,其他權限聽說不行,自行測試)
啓動rsyncd服務 :service rsyncd start
如果你新增了文件夾需要重啓:service rsyncd restart
查看進程佔用端口:netstat -tunlp (啓動rsyncd服務後會顯示873端口被rsync佔用)
到這裏服務端的配置已經完成了,下面配置rsync的客戶端
rsync客戶端:同樣是安裝rsync:yum -y install rsync
啓動rsyncd服務 :service rsyncd start
新建編輯密碼文件 vim /etc/rsyncd.pass 輸入你要的密碼:123456 (不要root: 不然連接的時候是無法連接哦)
同樣給客戶端密碼文件權限:chmod 600 /etc/rsyncd.pass
在客戶端執行:
rsync -avzP --delete --progress --password-file=/etc/rsyncd.pass [email protected]::backup /home/backup_html
參數解析
78.159.xxx.238是服務端的ip
/home/backup_html是你想要把服務端的文件同步到這臺機的那個位置
::backup backup 是服務端那邊的認證的模塊名(你在服務端叫什麼這邊就叫什麼)
--password-file 路徑是我們剛纔新建的密碼文件
-a 參數,相當於-rlptgoD(-r 是遞歸 -l 是鏈接文件,意思是拷貝鏈接文件;-p 表示保持文件原有權限;-t 保持文件原有時間;-g 保持文件原有用戶組;-o 保持文件原有屬主;-D 相當於塊設備文件);
-z 傳輸時壓縮;
-P 傳輸進度;
-v 傳輸時的進度等信息;
--progress 指顯示
--delete 指如果服務器端刪除了這一文件,那麼客戶端也相應把文件刪除,保持真正的一致
然後設置定時任務多久執行一次更新,rsync它的算法文件夾的內容沒有改變不用更新的,就是增量更新
設置腳本執行的時間:crontab -e,添加如下內容
vim /etc/rsyncd.sh
把這段東西扔進去:/usr/bin/rsync -avzP --delete --progress --password-file=/etc/rsyncd.pass [email protected]::backup /home/backup_html
chmod 755 /etc/rsyncd.sh
*/1 * * * * sh /etc/rsyncd.sh #第1分鐘執行一次同步;
如果你想1秒鐘執行一次就寫個shell,可以翻一下我其他文章有寫過的
rsync error:error starting client-server protocol(code 5) at main.c(1503)
如果有報錯,大多數是客戶端密碼設置的問題,客戶端的密碼不需要寫用戶名的直接寫跟服務端的密碼一樣就行了
參考文章(文章有一點難讀懂,基本上跟他的一樣,就是有些地方我修改過更好讀懂一點):https://blog.csdn.net/yao940622/article/details/102511689?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task