(一)、跨服務器自動備份

將數據同步到其它服務器這裏使用Linux同步文件工具rsync來進行文件的同步
1.    rsync
rsync是類unix系統下的數據鏡像備份工具——remote sync。一款快速增量備份工具 Remote Sync,遠程同步 支持本地複製,或者與其他SSH、rsync主機同步

2.    用法
rsync src dest

這是最簡單的用法,表示同步src,dest文件。(即,執行之後,dest的文件與src的相同,以src的爲準)

常用選項

-a: 等價於-rlptgoD,歸檔式
-r: 遞歸
-l: 複製軟件鏈接
-p: 保留權限信息
-t: 將src的修改時間,同步到dest
-g: 同步組信息(group)
-o: 同步擁有者信息(own)
-D: 保持字符與塊設備文件
-z: 啓用壓縮傳輸
–delete:如果src沒有此文件,那麼dest也不能有,即在dest刪除src裏沒有的文件。(如果你使用這個選項,就必須搭配-r選項一起)

例如:
## 將本地/bak/mysqlbak/文件同步到 遠程服務器 /bak/mysql/bak 目錄下面 排除 mysqlbak/index目錄 通過ssh端口
rsync -vzacu  /bak/mysqlbak/  [email protected]:/bak/mysqlbak   --exclude  "mysqlbak/index"   -e "ssh -p 22"
# 將遠程目錄 /bak/mysqlbak下的文件同步到本地 /bak/mysqlbak/目錄下
rsync -vzrtopg --progress --delete [email protected]:/bak/mysqlbak  /bak

client連接SERVER
向SERVER端上傳文件
/usr/bin/rsync -vzrtopg --progress --password-file=/root/rsync.pas  /home/backup [email protected]::backup

從SERVER端取文件
/usr/bin/rsync -vzrtopg --progress --delete [email protected]::backup /home/backup --password-file=/etc/rsync.pas
3.    rsync安裝
rsync 服務器安裝比較簡單,但是安裝好rsync後,我們並沒有發現配置文件,以及rsync服務器啓動程序,不要着急,那是因爲每個管理員可能對rsync 用途不一樣,所以發行版只是讓安裝好軟件就可以了,配置文件都是讓管理員來根據自己的用途和方向來自己設置的。

1)    檢查rsycn是否安裝
檢查方法:
      rpm -qa rsync
出現rsync 包名就是安裝了
 
如果是以下提示,表示沒有安裝rsync
 
2)    安裝rsycn
 rsync的安裝可以使用yum直接安裝:yum install rsync
 
3)    檢查rsycn是否安裝成功
檢查方法:
      rpm -qa rsync
出現rsync 包名就是安裝成功了
 
4.    啓用rsync服務器端同步遠程文件
rsycn的服務端爲服務器的文件接收端,rsycn的客戶端爲服務器的文件推動端。
5.    rsycn的服務端/文件接收端配置
1)    先創建備份目錄

2)    服務端需要開啓rsyncd服務
(1)    添加配置文件rsyncd.conf
vi /etc/rsyncd.conf
#以下是全局配置
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd
[zentaobak]     #模塊名,在源服務器指定這個名字
   comment = sync rsync/home      #描述信息
   path = /home/zentao_bak      #備份目錄
   use chroot=yes           #使用chroot,用root權限
   read only = no          #設置本地備份目錄爲讀寫權限
   uid=root          
   gid=root
   max connections=10       #客戶端最大連接數
   auth users = root      #指定數據同步用戶
   secrets file = /etc/rsyncd.pass          #指定數據同步用戶信息文件
   hosts allow=10.250.151.233     #允許連接的客戶端
   ignore errors = yes     #忽略出現I/O錯誤
   timeout = 600
 
(2)    創建認證文件
  vi /etc/rsyncd.pass
  ##代碼
  root:glong@123      #格式是用戶名:密碼
 
  #屬主要有權限讀這個文件,否則會報沒權限
  chmod 600 /etc/rsyncd.pass  
 
(3)    修改/etc/xinetd.d/rsync文件,disable 改爲 no
service rsync
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
 
(4)    啓動服務端
rsync --daemon --config=/etc/rsyncd.conf
 

注:重啓時記得刪除rsyncd.pid:rm -rf /var/run/rsyncd.pid


rsync默認端口是873,防火牆要放開該端口,否則客戶端會無法連接的
#開放873端口
sudo firewall-cmd --zone=public --add-port=873/tcp --permanent
#重啓防火牆服務
sudo systemctl restart firewalld.service

6.    rsycn的客戶端/文件發送端配置
客戶端配置簡單 只需要配置密碼既可

  vi /etc/rsync_client.pwd
  ##代碼
  glong@123    #只需要填寫rsync服務的密碼

  #屬主要有權限讀這個文件,否則會報沒權限
  chmod 600 /etc/rsync_client.pwd 
 
7.    客戶端同步測試
## 將本地/root/hjl/文件同步到 10.250.151.231遠程服務器 zentaobak 目錄下面,命令如下:
rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /root/hjl [email protected]::zentaobak
 
注:zentaobak就是服務端/etc/rsyncd.conf裏的配置
 
在服務端檢查數據是否傳送成功

rsync只是一次性同步,如果需要實時同步就需要引入另一個工具inotify了

8.    crontab定時備份
1)    備份場景說明
該路徑下每天都會新增3個文件,分別是*code.zip.php、*file.zip.php、*sql.zip.php。我們只需將每天新增3個文件備份到另一個服務器上即可

2)    編寫運行腳本
vi back.sh
腳本代碼: 
#!/bin/sh
#備份目錄
BACK_HOME="/opt/zbox/app/zentaopro/tmp/backup"
newfile="aa"
#獲取最新文件夾名
code_newfile=`ls -t $BACK_HOME/*code.zip.php | head -1`
file_newfile=`ls -t $BACK_HOME/*file.zip.php | head -1`
sql_newfile=`ls -t $BACK_HOME/*sql.php | head -1`
#將最新文件夾下的包遠程到服務端取
rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd $code_newfile [email protected]::zentaobak
rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd $file_newfile [email protected]::zentaobak
rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd $sql_newfile [email protected]::zentaobak

腳本說明:
code_newfil:獲取最新的*code.zip.php文件
file_newfile:獲取最新的* file.zip.php文件
sql_newfile:獲取最新的* sql.zip.php文件

 
3)    爲腳本添加執行權限
chmod 777 back.sh
 
4)    驗證腳本準確性
執行客戶端的備份sh腳本,成功如下
 
檢查服務端的數據如下:
 
5)    設置crontab定時執行
vi /etc/crontab 
#在最後一行中加入:  
00 3 * * * root /opt/zbox/back.sh
#表示每天3點00分執行備份
 
注:crontab配置文件格式如下: 
分 時 日 月 周  命令

6)    重啓crontab
service crond restart  

這樣每天就可以執行備份啦


9.    crontab定時清理
由於磁盤大小受限制,爲了避免磁盤空間爆炸,往往需要做定期自動清理,具體清理多少天前的數據,根據實際情況來定
1)    清理場景說明
該路徑下每天都會新增3個文件,分別是*code.zip.php、*file.zip.php、*sql.zip.php。每天大概新增5G的數據量,長年累計下,數據量會比較大。所以需要做定期清理,建議只保留7天的數據即可

2)    編寫運行腳本
vi clear.sh
腳本代碼: 
#!/bin/sh
#禪道備份目錄
zentao_BACK_HOME="/mnt/main_back/zentao_bak"
#SVN備份目錄
SVN_BACK_HOME="/mnt/main_back/svn_bak"
#刪除7天前備份的所有文件(包括文件夾)
find /mnt/main_back/zentao_bak/* -mtime +7 -exec rm -rf {} \;
find /mnt/main_back/svn_bak/* -mtime +7 -exec rm -rf {} \;

注:
/*
#查找10天前的所有文件(不包括文件夾)
find /home/Busines/version/new_version_back/* -type f -mtime +10 -exec ls -l {} \;

#刪除10天前的所有文件(不包括文件夾)
find /home/Busines/version/new_version_back/* -type f -mtime +10 -exec rm {} \;

#查找10天前的所有文件(包括文件夾)
find /home/Busines/version/new_version_back/* -mtime +10 -exec ls -l {} \;
#刪除10天前的所有文件(包括文件夾)
find /home/Busines/version/new_version_back/* -mtime +10 -exec rm -rf {} \;
*/


3)    爲腳本添加執行權限
chmod 777 clear.sh
 
4)    驗證腳本準確性
執行sh腳本,成功如下
 
由於這裏不會打印信息,所以具體還得到對應的目錄下檢查

5)    設置crontab定時執行
vi /etc/crontab 
#在最後一行中加入:  
0 1 * * 0 root /mnt/main_back/clear.sh
#表示每週日1點0分執行清除
 
注:crontab配置文件格式如下: 
分 時 日 月 周  命令

6)    重啓crontab
service crond restart  
 
這樣數據每週就可以清理一次了。
10.    常見問題
(1)    客服端連接不上服務端
 
問題分析:
   通過再三確定,配置的沒有問題的,後來才發現rsync默認的端口是873,初步懷疑端口在防火牆沒有開放,被防火牆給限制了。
解決方案:
     放開rsync端口,操作如下

#開放873端口
sudo firewall-cmd --zone=public --add-port=873/tcp --permanent
#重啓防火牆服務
sudo systemctl restart firewalld.service
 
放開端口之後,傳送成功

(2)    @ERROR: chroot failed
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
 
原因: 
服務器端的目錄不存在或無權限,創建目錄並修正權限可解決問題。

通過分析,我在服務端的/etc/rsyncd.conf文件裏,路徑使用了`date +%Y%m%d`變量,可/etc/rsyncd.conf裏又不能跟shell一樣很好使用變量,所以導致chroot failed錯誤,就是找不到路徑。
可我要每天進行備份的,所以必須要有日期作爲代表。
 

解決方案一:
   直接指定服務端路徑,結果又報The --password-file option may only be used when accessing an rsync daemon.錯誤
 
網上說這個報錯是服務器端沒有執行rsync --daemon命令(沒有啓動服務),可服務器是有啓這個服務的,結果這個錯誤一直無法解決,只能用方案二了。
解決方案二:
     置換法,即之前是客戶端是作爲服務端,之前是服務端的作爲客戶端。
    從SERVER端取文件,由於SERVER端文件路徑是固定的,備份路徑可以做變量了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章