通過Rsync實現文件遠程備份


通過Rsync實現文件遠程備份

一、概述

Linux實現文件遠程同步備份,可以考慮的方案是scp和rsync。
比較常用的方案包括:
1、nfs實現web數據共享
2、rsync+inotify實現數據同步
3、rsync+sersync實現數據同步
4、unison+inotify實現數據雙向同步
5、lsyncd實現數據同步

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/ rsync_backup@192.168.1.100::ossbackup

從服務器端下載到本地
rsync -avz --delete --progress --password-file=/etc/rsync_client.passwd rsync_backup@192.168.1.100::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/ rsync_backup@192.168.1.100::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/ rsync_backup@192.168.1.100::mysqlbackup >/dev/null 2>&1 &
done

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

五、相關參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM