1. 程式人生 > 實用技巧 >通過Rsync實現檔案遠端備份

通過Rsync實現檔案遠端備份

通過Rsync實現檔案遠端備份

目錄

一、概述

Linux實現檔案遠端同步備份,可以考慮的方案是scp和rsync。
另外rsync+inotify-tools可實現實時同步。

其他基於rsync的實現的解決方案還有sersync,zsync

rsync官網 https://rsync.samba.org/


rsync使用角色包括客戶端(SRC)和服務端(DEST),客戶端和服務端都需要安裝rsync,服務端需要啟動rsync服務。

二、使用說明

1.安裝和常用命令說明

yum方式安裝
yum -y install rsync

檢視配置檔案路徑
rpm -qc rsync

檢視版本
rsync --version

守護程序啟動rsync
rsync --daemon


原始碼編譯安裝
wget https://download.samba.org/pub/rsync/src/rsync-3.2.3.tar.gz
tar zxf rsync-3.2.3.tar.gz
cd rsync-3.2.3
./configure
make
make install

2.快速使用示例

從本地上傳到伺服器
rsync -avz --delete --progress --password-file=/etc/rsync_client.passwd /data/backup/tmp/ [email protected]::ossbackup

從伺服器端下載到本地
rsync -avz --delete --progress --password-file=/etc/rsync_client.passwd [email protected]::ossbackup /data/backup/tmp/

可以發現,上傳和下載僅是src和dest引數位置對調


對應rsync服務端配置示例/etc/rsyncd.conf:
uid = root
gid = root
use chroot = no
max connections = 10 
timeout = 900
ignore nonreadable = yes
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
dont compress=*.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[mysqlbackup]
comment=MySQL remote backup
path=/data/mysqldb_backup
ignore errors=yes
hosts allow=192.168.1.101
auth users=rsync_backup
secrets file=/etc/rsyncd.passwd
list=false
read only=no
[ossbackup]
comment=oss remote backup
path=/data/oss_files
ignore errors=yes
hosts allow=192.168.1.102
auth users=rsync_backup
secrets file=/etc/rsyncd.passwd
list=false
read only=no

3.引數說明

daemon(服務端)模式

用途: rsync --daemon [選項]...
 
選項
 --address=ADDRESS 繫結到指定的地址
 --bwlimit=RATE 限制套接字I/O頻寬
 --config=FILE 不使用預設位置的rsyncd.conf檔案,額外指定
 -M, --dparam=OVERRIDE 覆蓋全域性守護程序配置引數
 --no-detach 不要進行fork並後臺執行
 --port=PORT 監聽指定的埠
 --log-file=FILE 輸出日誌到指定檔案
 --log-file-format=FMT 用指定格式更新日誌
 --sockopts=OPTIONS 指定自定義的TCP選項
 -v, --verbose 詳細模式輸出
 -4, --ipv4 偏向於使用IPv4
 -6, --ipv6 偏向於使用IPv6
 --help 顯示幫助資訊

客戶端引數

用途: rsync [OPTION]... SRC [SRC]... DEST
通過遠端shell訪問方式:
rsync [選項]... [使用者名稱@]HOST:SRC [DEST]
rsync [選項]... SRC [SRC]... [使用者名稱@]HOST:DEST
通過rsync daemon訪問方式:
rsync [選項]... [使用者名稱@]HOST::SRC [DEST]
rsync [選項]... SRC [SRC]... [使用者名稱@]HOST::DEST
rsync [選項]... SRC [SRC]... rsync://[使用者名稱@]HOST[:PORT]/DEST
rsync [選項]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
 
請注意,':'會使用ssh來遠端連線,而'::'以及'rsync://'則用於以tcp方式連線一個rsync daemon伺服器,這個需要SRC(源),以及包含模組名字的DEST(目的)
 
選項
 -v, --verbose 詳細模式輸出
 --info=FLAGS 輸出INFO級別
 --debug=FLAGS 輸出DEBUG級別
 --msgs2stderr 用於除錯的特殊輸出處理
 -q, --quiet 忽略非error的輸出
 --no-motd 忽略Daemon模式的MOTD
 -c, --checksum 讓自動跳過基於校驗和而非預設的修改時間以及檔案大小
 -a, --archive 歸檔(壓縮)模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性等同於-rlptgoD(無 -H,-A,-X)
 --no-OPTION 關閉隱含的選項(例如 --no-D)
 -r, --recursive 對子目錄以遞迴模式處理
 -R, --relative 使用相對路徑資訊
 --no-implied-dirs 不使用--relative傳送隱含的目錄
 -b, --backup 建立備份,也就是對於目的已經存在有同樣的檔名時,將老的檔案重新命名為~filename.可以使用--suffix選項來指定不同的備份檔案字首
 --backup-dir=DIR 將備份檔案(如~filename)存放在指定目錄下
 --suffix=SUFFIX 定義備份檔案字首,預設是~
 -u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且檔案時間晚於要備份的檔案(不覆蓋更新的檔案)
 --inplace update destination files in-place (SEE MAN PAGE)
 --append 將資料附加到較短的檔案
 --append-verify 類似--append,但是對舊資料會計算校驗和
 -d, --dirs 不使用遞迴傳輸目錄
 -l, --links 不處理符號連結(保留符號連結)
 -L, --copy-links 將符號連結處理為具體的檔案或者資料夾
 --copy-unsafe-links 只處理不安全的符號連結
 --safe-links 忽略不在SRC源目錄的符號連結
 --munge-links munge符號連結使它們更安全(但會無法使用)
 -k, --copy-dirlinks 把指向資料夾的符號連結轉換為資料夾
 -K, --keep-dirlinks 把接收端的指向資料夾的符號連結當做資料夾
 -H, --hard-links 保留硬連結
 -p, --perms 保留許可權
 -E, --executability 保留檔案的可執行屬性
 --chmod=CHMOD 影響檔案或資料夾的屬性
 -A, --acls 保留ACLs (代表--perms)
 -X, --xattrs 保留擴充套件屬性
 -o, --owner 保留所有者(僅限superuser)
 -g, --group 保留組
 --devices 保留裝置檔案(僅限superuser)
 --copy-devices 把裝置檔案內容當做檔案一樣進行復制處理
 --specials 保留特殊檔案
 -D 和--devices --specials一樣
 -t, --times 保留修改時間
 -O, --omit-dir-times 忽略資料夾的修改時間
 -J, --omit-link-times 忽略符號連結的修改時間
 --super 接收端嘗試使用superuser進行操作
 --fake-super 使用xattrs來儲存和恢復許可權屬性
 -S, --sparse 對稀疏檔案進行特殊處理以節省空間
 --preallocate 在寫入前預分配DST檔案
 -n, --dry-run 執行一個沒有實際更改的試執行,只會顯示檔案會被如何操作
 -W, --whole-file 拷貝檔案,不進行增量檢測
 -x, --one-file-system 不要跨越檔案系統邊界
 -B, --block-size=SIZE 檢驗演算法使用的塊尺寸,預設是700位元組
 -e, --rsh=COMMAND 指定使用rsh,ssh方式進行資料同步
 --rsync-path=PROGRAM 指定遠端伺服器上的rsync命令所在路徑
 --existing 僅僅更新那些已經存在於DST的檔案,而不備份那些新建立的檔案 
 --ignore-existing 跳過更新已存在於DST的檔案
 --remove-source-files 傳送方刪除非資料夾的原始檔
 --del --delete-during的一個alias
 --delete 刪除那些DST中SRC沒有的檔案
 --delete-before 傳輸前刪除,而非傳輸過程中
 --delete-during 在傳輸過程中刪除
 --delete-delay 在傳輸過程中確定要刪除的,在傳輸結束後進行刪除
 --delete-after 在傳輸結束後刪除,而非傳輸過程中
 --delete-excluded 同樣刪除接收端那些被該選項指定排除的檔案
 --ignore-missing-args 忽略丟失的源引數不輸出錯誤
 --delete-missing-args 從DEST刪除丟失的源引數
 --ignore-errors 即使出現I/O錯誤也進行刪除
 --force 即使資料夾非空也強制刪除
 --max-delete=NUM 不刪除超過指定數量的檔案
 --max-size=SIZE 不傳輸超過指定大小的檔案
 --min-size=SIZE 不傳輸小於指定大小的檔案
 --partial 保留那些因故沒有完全傳輸的檔案,以是加快隨後的再次傳輸(即斷點續傳)
 --partial-dir=DIR 將因故沒有完全傳輸的檔案放到指定資料夾
 --delay-updates 在傳輸末尾把所有更新的檔案放到位
 -m, --prune-empty-dirs 從檔案列表中刪除空目錄鏈
 --numeric-ids 不要把uid/gid值對映為使用者/組名
 --usermap=STRING 自定義使用者名稱對映
 --groupmap=STRING 自定義組名對映
 --chown=USER:GROUP 簡單的使用者/組名對映
 --timeout=SECONDS 設定I/O超時,單位為秒
 --contimeout=SECONDS 設定Daemon連線超時,單位為秒
 -I, --ignore-times 不跳過那些有同樣的時間和大小的檔案
 -M, --remote-option=OPTION 只把指定選項傳送到遠端
 --size-only 只跳過大小相同的檔案
 --modify-window=NUM 決定檔案是否時間相同時使用的時間戳視窗,預設為0
 -T, --temp-dir=DIR 在指定資料夾中建立臨時檔案
 -y, --fuzzy 如果DEST沒有任何檔案,查詢類似的檔案
 --compare-dest=DIR 同樣比較DIR中的檔案來決定是否需要備份
 --copy-dest=DIR 和上面的類似,但是還會複製指定資料夾中的沒有改變的檔案
 --link-dest=DIR 和上面類似,只是沒有改變的檔案會被硬連結到DST
 -z, --compress 在傳輸過程中進行壓縮
 --compress-level=NUM 指定壓縮級別0-9,預設為6
 --skip-compress=LIST 跳過壓縮檔案字尾在指定列表中的檔案
 -C, --cvs-exclude 自動跳過CVS的生成檔案
 -f, --filter=RULE 新增一個檔案過濾規則
 -F 等於--filter='dir-merge /.rsync-filter'
    重複的: --filter='- .rsync-filter'
 --exclude=PATTERN 排除符合匹配規則的檔案
 --exclude-from=FILE 從指定檔案中讀取需要排除的檔案
 --include=PATTERN 包含(不排除)符合匹配規則的檔案
 --include-from=FILE 從指定檔案中讀取需要包含(不排除)的檔案
 --files-from=FILE 從指定檔案中讀取SRC原始檔列表
 -0, --from0 從檔案中讀取的檔名以'\0'終止
 -s, --protect-args 沒有空格分隔;只有萬用字元的特殊字元
 --address=ADDRESS 繫結到指定的地址
 --port=PORT 指定其他的rsync服務埠
 --sockopts=OPTIONS 指定自定義的TCP選項
 --blocking-io 對遠端shell使用阻塞IO
 --stats 提供某些檔案的傳輸狀態
 -8, --8-bit-output 在輸出中留下高位元的字元
 -h, --human-readable 用人類可讀的格式輸出數字
 --progress 在傳輸過程中顯示進度
 -P 等同於--partial --progress
 -i, --itemize-changes 輸出對所有更新的變更摘要
 --out-format=FORMAT 用指定格式輸出更新
 --log-file=FILE 將日誌儲存到指定檔案
 --log-file-format=FMT 用指定格式更新日誌
 --password-file=FILE 從檔案讀取Daemon伺服器密碼
 --list-only 不復制而是隻列出
 --bwlimit=RATE 限制套接字I/O頻寬
 --outbuf=N|L|B 設定輸出緩衝,為None,Line或者Block
 --write-batch=FILE 寫入批量更新到指定檔案
 --only-write-batch=FILE 和上面類似,但是對DST進行只寫的更新
 --read-batch=FILE 從指定檔案讀取一個批量更新
 --protocol=NUM 強制使用指定的老版本協議
 --iconv=CONVERT_SPEC 對檔名進行字元編碼轉換
 --checksum-seed=NUM 設定塊/檔案的校驗和種子
 -4, --ipv4 偏向於使用IPv4
 -6, --ipv6 偏向於使用IPv6
 --version 列印版本號
(-h) --help 顯示幫助資訊

服務端全域性引數(rsyncd.conf)

在檔案中[modlue模組名]之前的所有引數都是全域性引數,當然也可以在全域性引數部分定義模組引數,這時候該引數的值就是所有模組的預設值。

全域性引數 描述
motd file motd file
log file 指定rsync的日誌檔案,而不將日誌傳送給syslog。
pid file 指定rsync的pid檔案。
syslog facility 指定rsync傳送日誌訊息給syslog時的訊息級別,常見的訊息級別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。預設值是daemon。

服務端模組引數(rsyncd.conf)

在全域性引數之後就需要定義一個或多個模組了,模組中可以定義以下引數:模組以[模組名]開始,直到另一個模組的開始結束

模組引數 描述
comment 給模組指定一個描述,該描述連同模組名在客戶連線得到模組列表時顯示給客戶。預設沒有描述定義。
path 指定該模組的供備份的目錄樹路徑,該引數是必須指定的
use chroot 如果"use chroot"指定為true,那麼rsync在傳輸檔案以前首先chroot到path引數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要以roots許可權,並且不能備份指向外部的符號連線所指向的目錄檔案。預設情況下chroot值為true。推薦:?
max connections 指定該模組的最大併發連線數量以保護伺服器,超過限制的連線請求將被告知隨後再試。預設值是0,也就是沒有限制。
lock file 指定支援max connections引數的鎖檔案,預設值是/var/run/rsyncd.lock
read only 該選項設定是否允許客戶上載檔案。如果為true那麼任何上載請求都會失敗,如果為false並且伺服器目錄讀寫許可權允許那麼上載是允許的。預設值為true。
list 該選項設定當客戶請求可以使用的模組列表時,該模組是否應該被列出。如果設定該選項為false,可以建立隱藏的模組。預設值是true。
uid 該選項指定當該模組傳輸檔案時守護程序應該具有的uid,配合gid選項使用可以確定哪些可以訪問怎麼樣的檔案許可權,預設值是"nobody"。
gid 該選項指定當該模組傳輸檔案時守護程序應該具有的gid。預設值為"nobody"。就是說當同步到這個模組的時候,rsync守護進行要使用什麼樣的UID和GID許可權來讀取本地檔案。(疑問:不懂是否是這樣理解)
exlude 用來指定多個由空格隔開的多個模式列表,並將其新增到exclude列表中。這等同於在客戶端命令中使用--exclude來指定模式,不過配置檔案中指定的exlude模式不會傳遞給客戶端,而僅僅應用於伺服器。一個模組只能指定一個exlude選項,但是可以在模式前面使用"-"和"+"來指定是 exclude還是include。但是需要注意的一點是該選項有一定的安全性問題,客戶很有可能繞過exlude列表,如果希望確保特定的檔案不能被訪問,那就最好結合uid/gid選項一起使用。
include 用來指定多個由空格隔開的多個rsync並應該exlude的模式列表。這等同於在客戶端命令中使用--include來指定模式,結合 include和 exlude可以定義複雜的exlude/include規則。一個模組只能指定一個include選項,但是可以在模式前面使用"-"和"+"來指定是 exclude還是include。
auth users 該選項指定由空格或逗號分隔的使用者名稱列表,只有這些使用者才允許連線該模組。這裡的使用者和系統使用者沒有任何關係。如果"auth users"被設定,那麼客戶端發出對該模組的連線請求以後會被rsync請求challenged進行驗證身份這裡使用的 challenge/response認證協議。使用者的名和密碼以明文方式存放在"secrets file"選項指定的檔案中。預設情況下無需密碼就可以連線模組(也就是匿名方式)。
secrets file 該選項指定一個包含定義使用者名稱:密碼對的檔案。只有在"auth users"被定義時,該檔案才有作用。檔案每行包含一個username:passwd對。一般來說密碼最好不要超過8個字元。沒有預設的 secures file名,需要限式指定一個。(例如:/etc/rsyncd.secrets)
hosts allow 該選項指定哪些IP的客戶允許連線該模組。客戶模式定義可以是以下式: 192.168.1.1 指定只有某個IP地址 192.168.1.0/24 指定某個網路的客戶端Backup.linux.com 指定某個主機名才能訪問預設是允許所有主機連線。
hosts deny 指定不允許連線rsync伺服器的機器,可以使用hosts allow的定義方式來進行定義。預設是沒有hosts deny定義
ignore errors 指定rsyncd在判斷是否執行傳輸時的刪除操作時忽略server上的IP錯誤,一般來說rsync在出現IO錯誤時將將跳過--delete操作,以防止因為暫時的資源不足或其它IO錯誤導致的嚴重問題。
ignore nonreadable 指定rysnc伺服器完全忽略那些使用者沒有訪問許可權的檔案。這對於在需要備份的目錄中有些檔案是不應該被備份者得到的情況是有意義的。
transfer logging 使rsync伺服器使用ftp格式的檔案來記錄下載和上載操作在自己單獨的日誌中。
log format 通過該選項使用者在使用transfer logging可以自己定製日誌檔案的欄位。其格式是一個包含格式定義符的字串,可以使用的格式定義符如下所示:預設log格式為:"%o %h [%a] %m (%u) %f %l",一般來說,在每行的頭上會新增"%t [%p] "。在原始碼中同時釋出有一個叫rsyncstats的perl指令碼程式來統計這種格式的日誌檔案。%h 遠端主機名%a 遠端IP地址%m 模組名%t 當前時間%f 檔名%l 檔案長度字元數
timeout 通過該選項可以覆蓋客戶指定的IP超時時間。通過該選項可以確保rsync伺服器不會永遠等待一個崩潰的客戶。超時單位為秒鐘,0表示沒有超時定義,這也是預設值。對於匿名rsync伺服器來說,一個理想的數字是600。
dont compress 用來指定那些不進行壓縮處理再傳輸的檔案,預設值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz 因為這些檔案已經經過壓縮咯,預設不用修改。

rsyncd.conf方式引數說明

#指定傳輸檔案時守護程序具有的使用者ID,這裡表示預設為nobady
uid=nobady
#指定傳輸檔案時守護程序具有的使用者組ID,這裡表示預設為nobady
gid=nobody
#禁止切換目錄
use chroot=no
#客戶端的最大連線數
max connection=10
#檢查口令檔案的許可權,口令檔案的許可權使用者屬組必須是root,許可權必須是600
strict modes=yes
#pid檔案的位置
pid file=/var/run/rsyncd.pid
#lock檔案的位置
lock file=/var/run/rsyncd.lock
#日誌檔案的位置
log file=/var/log/rsyncd.log
 
#定義模組名,客戶端命令跟在IP後面的,作為DST的一部分
[mysqlbackup]
#指定這個模組需要同步的路徑
path=/data/mysqldb_backup
#這個是註釋 可以自己定義
comment=MySQL remote backup
#忽略一些無關的IO錯誤
ignore errors
#no代表客戶端可以上傳檔案,yes表示只讀取
read only=no
#no表示客戶端可以下載檔案,yes表示不能下載
write only=no
#表示允許連線的主機地址
hosts allow=192.168.1.101
#表示不允許連線的主機地址
hosts deny=*
#不允許該模組被客戶端列出
list=false
#指定傳輸檔案時守護程序具有的使用者ID,
uid=root
#指定傳輸檔案時守護程序具有的使用者組ID,
gid=root
#用來指定連線該模組的使用者名稱,使用者名稱可以自定義,這個是客戶端命令跟在IP前面那個
auth users=rsync_backup
#指定密碼檔案,檔案裡面記錄的是使用者名稱:密碼
secrets file=/etc/rsyncd.passwd
EOF
 
echo "使用者名稱:密碼" >/etc/rsyncd.passwd
#許可權必須600
chmod 600 /etc/rsyncd.passwd
#開機啟動
echo "rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local
#立即執行服務端,其實這兒的配置檔案位置就是預設的,可以不加--config
rsync --daemon --config=/etc/rsyncd.conf

三、場景使用:MySQL備份資料檔案同步至遠端備份伺服器

場景:
CentOS7
MySQL伺服器(192.168.1.100)每天凌晨通過mysqldump全量備份到本機(*.zip格式),保留最近30天的備份檔案。每個zip格式的備份檔案大小超過1G。
需要在本地備份結束後,同步備份檔案至遠端另一臺備份伺服器((192.168.1.101)。

服務端安裝(備份伺服器)

1.安裝rsync

yum -y install rsync

2.修改配置檔案/etc/rsyncd.conf

uid = root
gid = root
use chroot = no
max connections = 10 
timeout = 900
ignore nonreadable = yes
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
dont compress=*.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[mysqlbackup]
comment=MySQL remote backup
path=/data/mysqldb_backup
ignore errors=yes
hosts allow=192.168.1.101
auth users=rsync_backup
secrets file=/etc/rsyncd.passwd
list=false
read only=no

3.建立密碼檔案

#建立密碼檔案,rsync認證的使用者和密碼, 不需要使用useradd真實建立使用者:

echo "rsync_backup:123456" >/etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd

4.通過systemctl啟動rsyncd服務

systemctl start rsyncd #啟動rsync
systemctl status rsyncd #檢視狀態
systemctl enable rsyncd #設定為開機啟動
systemctl restart rsyncd #重啟

檢視rsync的log
cat /var/log/rsyncd.log

5.防火牆配置

#rsync預設埠是873

firewall配置方式:
firewall-cmd --permanent --add-port=873/tcp    
firewall-cmd --reload

iptables配置方式:
iptables -I INPUT -p tcp --dport 873 -j ACCEPT
service iptables save
systemctl restart iptables.service

rsync同步檔案時可能會報錯:
rsync: failed to connect to xxx: Permission denied (13)
出現這個錯誤是因為selinux, linux安全增強的補丁導致的。
解決方法是禁用selinux的安全增強, 可以使用命令 setenforce 0來臨時禁用,或者通過修改配置檔案/etc/sysconfig/selinux 新增 SELINUX=disabled來永久禁用

客戶端安裝(MySQL伺服器)

1.安裝rsync

yum -y install rsync

2.配置密碼檔案

#這裡需要把服務端配置的rsync_backup密碼寫到客戶端的密碼檔案中(僅密碼)

echo "123456" >/etc/rsync_client.passwd
chmod 600 /etc/rsync_client.passwd

3.客戶端執行同步

/data/backup/mysqlbackup_to_remote.sh

nohup rsync -a --delete --include="*.zip" --exclude=* --password-file=/etc/rsync_client.passwd /data/backup/mysql/ [email protected]::mysqlbackup >/dev/null 2>&1 &

備註:

這裡僅用-a引數而未增加壓縮引數-z的原因是,是因為這裡僅同步指定的mysql備份檔案(*.zip),本身就是壓縮檔案格式,且單個檔案比較大,考慮到效能,故無需再壓縮傳輸。

這裡使用--delete引數是因為源資料mysql備份檔案是僅保留最近30天資料(即源資料會自動刪除30天之前的備份檔案)。故同步時,考慮到儲存壓力,讓伺服器端保持同步,也同步刪除30天之前的資料檔案。

4.配置crontab定時執行

crontab -e

#mysql local backup
0 0 * * * root sh /data/backup/mysql/mysql_backup.sh

#mysql remote backup
0 4 * * * root sh /data/backup/mysqlbackup_to_remote.sh

附: mysql本地備份指令碼(mysql_backup.sh)

#!bin/bash
cd /data/backup/mysql

#所有需要備份的庫
zipName="mysqldb_"

#遍歷備份所有的庫
mysqldump -h 127.0.0.1 -uroot -p123456 --all-databases > "./"mysqldb"_"$(date +%y%m%d%H)".sql"

#對備份好的sql打成zip包
zip $zipName$(date +%y%m%d%H)".zip"  ./*.sql

#刪除所有sql臨時檔案
rm -rf ./*.sql

#只保留近30天的備份資料
oldDate=`date --date='30 day ago' +%y%m%d`
rm -rf ./$zipName${oldDate}*

四、rsync+inotify實時資料同步

1.inotify-tools安裝

yum -y install inotify-tools

如果沒有epol源就安裝,然後再執行
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.notify指令碼

/data/backup/inotify_rsync.sh

#!/bin/bash
srcdir=/data/backup/mysql/
inotifywait -mrq --timefmt "%d%m%y%H:%M" --format "%T%w%f%e" -e modify,delete,create,attrib ${srcdir} \
| while read file
do
  #echo "${file} is notified!"
  nohup rsync -a --delete --include="*.zip" --exclude=* --password-file=/etc/rsync_client.passwd /data/backup/mysql/ [email protected]::mysqlbackup >/dev/null 2>&1 &
done

-m 持續監聽
-r 使用遞迴形式監視目錄
-q 減少冗餘資訊,只打印出需要的資訊
-e 指定要監視的事件,多個時間使用逗號隔開
–timefmt 時間格式
–format 監聽到的檔案變化的資訊
ymd分別表示年月日,H表示小時,M表示分鐘
–format 說明:
%w 表示發生事件的目錄
%f 表示發生事件的檔案
%e 表示發生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定義的時間格式

五、相關參考資料