到寫方案的時候很頭疼,不如和山河老師一起看看如何完成完整的備份方案。
## 二 rsync介紹與完整備份方案
**(1)rsync是什么**
rsync 全稱remote synchronize,即"遠程同步",是Liunx/Unix下的一個遠程數據同步工具。它可通過LAN/WAN快速同步多臺主機間的文件和目錄,并適當利用rsync算法(差分編碼)以減少數據的傳輸。
**(2)rsync是用來干什么的?**
我們用rsync 是為了備份的,這種說法不夠準確,容易讓人誤解,其實rsync的工作只是用來完成遠程同步的、只是為異地備份數據做好了一個鋪墊,且聽我細細道來。
首先:本地備份不可靠的,為什么呢?
如果一份重要數據在本地的某個文件夾里存放著,并且該文件夾內的數據每天都可能會發(fā)生變化,為了防止某一天數據突然丟失的情況下我們可以找回數據,我們需要結合計劃任務把每天的數據都備份一下然后存在本機,此時,備份是有了,但這就萬無一失了嗎?錯!如果本機掛掉了,你備份的數據都不可用,所以備份的數據一定需要傳送到遠端,那么你的思路可能是這樣的
```bash
結合計劃任務
1、每天備份一下數據,此時備份的數據是在本地存放著
2、然后將備份的數據發(fā)送到遠端
3、隔一段時間就刪除七天前的本地備份數據,只留下七天內的,節(jié)省本地空間
```
上述思路既浪費空間,傳輸效率又低,而且如果本機的計劃任務尚未觸發(fā)本機就掛了,異地將獲取不到備份數據
我們可以這么做
```bash
# 一 制異地鏡像
計劃任務+rsync將本地數據定期同步到異地->無法做到實時同步
rsync+inotify或sersync將本地數據實時同步到異地->可以做到實時同步,異地就是本地的一個鏡像點
# 二 結合計劃任務對異地鏡像點的目錄做增量備份
```
體會下上述方案
```bash
1、本機無需再做備份,我們只需要對遠程的鏡像站點制作備份即可,因為遠程的鏡像點與本機完全一致/同步
這樣就節(jié)省了本機的空間,并且減少了本機的工作量
2、如果本機突然掛掉,不必擔心丟失最近的數據,因為遠程的鏡像點與本機的數據是同步的,本機掛了,遠程的鏡像點仍然可以保留下最近的數據,亦可對其進行一次備份。
3、如果本機掛掉了,不必擔心數據無法恢復,因為備份的數據也都在遠程存放著呢。
```
**(3)rsync的原理與特點**
rsync的遠程傳數據可以簡單總結為三步
```bash
1、先驗證用戶身份
2、檢測出到底需要傳哪些文件,默認quick check算法(依據源路徑與目標路徑下對應文件的大小或修改時間是否有變動),檢測出需要傳輸的文件后,并非是將文件全部傳到遠端,而是只傳文件改動的部分,俗稱增量,然后傳到遠端后,遠端再依據之前的內容與傳過來的新內容按照算法拼成一個新文件,所以說rsync并不耗費IO,但是耗cpu
3、傳輸
```
rsync的特點
-?1、IO效率高,但耗費cpu資源
```bash
與其他遠程文件傳輸工具(如 FTP 或 scp)不同的是,rsync 的最大特點是會檢查發(fā)送方和接收方對應的、已有的文件,然后僅傳輸有變動的部分。
因此,在第一次rsync遠程同步時,遠端無任何內容,所以同步的是全量,以后每次都只是傳內容有改變的部分,而不是全部傳,這可以極大地節(jié)省帶寬與傳輸時間,因此rysnc的IO效率比較高,這在做鏡像方面是很不錯的。
但是傳到遠端后,遠端再依據之前的內容與傳過來的新內容按照算法拼成一個新文件,這是非常耗費cpu計算資源的
```
綜上rsync不適用于的場景如下
```bash
??# 1、源路徑下的內容都不能算是經常改動的,而是頻繁改動的場景,rsync不適合,比如數據庫文件
如果源路徑頻繁改動,rsync將時刻處于高頻計算中,因為rsync的底層算法要計算出改動的位置然后把文件分段后再進行重新拼接,io沒啥問題,cpu都得累死
??# 2、不適合同步大文件
因為一個10T的文件但凡修改一個字符,遠程同步時只會傳一個字符,這并不影響io,但是該字符到達遠端后,遠端主機的rsync卻需要把之前文件的內容與該字符拼成一個新文件,如果文件過大,背后的算法是非常消耗cpu資源的,而且跟重寫了一個文件也沒多大區(qū)別
```
-?2、rsync可以實現類似scp的本地路徑與遠程路徑之間的拷貝(rsync不支持遠程到遠程的拷貝,即源路徑與目標路徑都是遠程路徑,但scp支持這一點)
```bash
scp我們經常都是遠端到本地,本地到遠端,
遠端到遠端其實scp也是可以的,只不過看不到進度
scp -pr3 root@192.168.12.17:/root/1.txt root@192.168.12.39:/aaa
-p保留權限
-r遞歸
-3就是遠端到遠端了
??# 依次輸入源主機的密碼+回車,然后再輸入目標主機的密碼+回車即可
```
-?2、rsync雖然是遠程同步,但也支持兩個本地目錄之間同步文件,因此它也可以當作文件復制工具,所以說rsync相當于是集成了cp和scp的功能,但是他們的底層機制不一樣
-?4、rsync的遠程同步是跨平臺的
```
linux --> windows???
windows --> linux???
linux --> mac??
mac --> linux??
mac --> windows
```