1. 程式人生 > >Rsync 實現window伺服器資料同步備份到Linux伺服器

Rsync 實現window伺服器資料同步備份到Linux伺服器

公司最近window伺服器各種磁碟告警,都是老機器了,一時半會也沒有新機器來擴容,於是我就想把MySQL的每日全量檔案備份到Linux新機器上(別問為啥是每日全量,歷史問題);

查詢了下方案,大致分為兩類:

1、FTP/SSH等方式直接同步;服務端主動推送

2、通過第三方客戶端同步,如本次使用的Rsync;客戶端主動獲取

 

由於我要實現的是備份,代表著我不僅僅要把資料同步到Linux上,還要把Windows上的資料給刪除掉,SSH等方式需要在windows配置定時任務等,考慮到如果有意外發生可能導致資料被主動誤刪,所以採用了客戶端主動獲取的方式,使用第三方同步;

關於Rsync,它實現了不僅僅資料同步功能(兩個不同主機之間資料的完全同步),還提供了差異化引數的同步設定,如A伺服器同步B,若A檔案>B,可實現差異化同步到B ;當A<B,若要實現A與B一致,可用delete引數,主動刪除掉B上的多餘資料;若要實現A同步B後,刪除A中磁碟的佔用(資料轉移),可用remove引數再同步完後自動刪除A上的資料;

 

第三方同步軟體比較多,公認比較好的是Rsync,本次分享Rsync如何實現,以及注意事項;

 

上圖就是實現原理,具體表現為:

1、Windows伺服器上安裝Rsync軟體,官網下載即可,和常規Windows軟體一樣傻瓜式安裝,指的注意的一點是:

在安裝最後,會要求建立一個賬戶和密碼,作為Rsync管理的賬戶,必須要設定的,不設定無法執行,所以建立一個賬戶就行了,對賬戶授予資料夾的許可權(按需授權)。這裡和後面的同步賬戶不一樣,是兩個不同的賬戶,後面會做對比;

2、Windows上安裝完後對Rsync配置檔案進行設定,使得之後Linux客戶端的資訊能夠有正確校驗;

3、Linux安裝客戶端,方法直接yum install就行了

4、Linux上安裝完後需要新建一個密碼文件,並且授予只能root使用者使用的許可權,(這部建立和授權是必須的,即使最後我們不經過賬戶校驗也要建立這一步)

5、Linux客戶端執行同步命令即可;

關於Windows服務端配置檔案,單獨拿出來說明:

#不驗證使用者密碼
pid = 0
uid = 0
gid = 0
use chroot = false
strict modes = false
#指定ip連結,*代表不限制
hosts allow = *
#最大連結數
max connections = 5
#日誌檔案
pid file = rsyncd.pid
log file = rsyncd.log
#埠
port = 873

# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
#備份資訊說明,Linux客戶端通過這個名字來找服務端資料資訊,可以自定義,
#但最後客戶端執行命令需要和#這個一致
#可以定義多個備份資訊,讓不同ip的機子同步不同的資料
[svndata]

#服務端資料存放位置
path = /cygdrive/d/mysqlbackup
#執行連結ip
hosts allow = *
#只讀許可權,若是開啟則只能同步無法刪除
read only = false
transfer logging = yes
list = no
lock file = rsyncd.lock

#資料同步校驗賬戶,和Linux客戶端進行資料同步的驗證使用,當然可以不適用,由於我是在內網,所以沒用
#auth users = jf_backup_sync
#同步校驗賬戶的驗證密碼
#secrets file = /cygdrive/d/Setting/Rsync/rsync_db.ps   

 

這裡需要說明的是:資料同步賬戶和Windows服務端安裝時新建的賬戶是不一樣的;

可以理解是:windows安裝的時候新建的賬戶是管理Rsync這個工具的,

而配置檔案中的賬戶,是校驗同步資料的;

 

所以:要想Rsync工具能夠在同步完後刪除掉服務端資料,需要給管理賬戶賦予windows所有許可權,若是隻同步資料,也要資料可讀寫許可權,所以我們需要對管理賬戶授予windows許可權,一般授予所有許可權

 

同步賬戶的使用者名稱密碼和Linux客戶端上的資訊應該一致,因為Linux客戶端不要求同步賬戶名,所以要保證的是Linux客戶端上的密碼要一致;

 

最後要實現每天自動同步備份,只需要Linux上寫個shell指令碼,再配置一個定時任務即可;具體安裝方式可參考:

https://www.cnblogs.com/kevingrace/p/5972563.html

在Linux上啟動可能會有很多報錯,最好谷歌下Rsync具體引數意義;

實現服務端同步完後刪除檔案的引數是:--remove-source-files:

如:

 rsync -av --progress --remove-source-files  --port=873  172.16.**.**::svndata/* /data/win-backup

報錯若是報錯GID,UID等等,請按照相關報錯進行設定=0,我在搭建的時候報錯GID錯誤,百度上全都說UID=0,PID=0,實際上是要加一個GID=0,解決這個問題百度很久沒找到,最後去谷歌查了官方文件找到GID報錯解決方法;