一. 環境和測試說明linux
rsync(remote sync)是unix及類unix平臺下的數據鏡像備份軟件,它不像FTP那樣須要全備份,rsync能夠根據數據的變化進行差別備份,從而減小數據流量,提升工做效率web
rsync主要分爲三個配置文件,分別是rsyncd.conf(主配置文件),rsyncd.secrets(密碼文件),rsyncd.motd(服務器信息文件)shell
本文件以2臺機器爲列子進行說明ubuntu
pc1,IP:192.168.0.230,做爲rsync服務器,須要配置rsyncd.conf文件vim
pc2,IP:192.168.0.234,做爲rsync客戶端,不須要配置rsyncd.conf,文件可爲空centos
在服務器端建立/common目錄做爲共享目錄,複製一些測試文件到該目錄中,進行測試bash
yum -y install rsync #centos默認安裝了服務器
mkdir /common; cp /etc/init.d/* /common/併發
二. 主配置文件說明tcp
vim /etc/rsyncd.conf
motd file = /etc/rsyncd.motd #設置服務器信息提示文件,在該文件中編寫提示信息
transfer logging = yes #開啓rsync數據傳輸日誌功能
log file = /var/log/rsyncd.log #設置日誌文件名,可經過log format參數設置日誌格式
pid file = /var/run/rsyncd.log #設置rsync進程號保存文件名稱
lock file = /var/run/rsync.lock #設置鎖文件名稱
port = 873 #設置服務器監聽的端口號,默認是873
address = 192.168.0.230 #設置本服務器所監聽網卡接口的ip地址
uid = nobody #設置進行數據傳輸時所使用的賬戶名或ID號,默認使用nobody
gid = nobody #設置進行數據傳輸時所使用的組名或GID號,默認使用nobody
#若爲yes, rsync會首先進行chroot設置,將根映射在下面的path參數路徑下,對客戶端而言,系統的根就是path參數指定的路徑。但這樣作須要root權限,而且在同步符號鏈接資料時只會同步名稱,不會同步內容。
use chroot = no
read only = yes #是否容許客戶端上傳數據,yes表示不容許
max connections =10 #設置併發鏈接數,0表示無限制
[common] #自定義模塊名,rsync經過模塊定義同步的目錄,可定義多個
comment = web content #定義註釋說明字串
path = /common #同步目錄的真是路徑經過path指定
ignore errors #忽略一些IO錯誤
#exclude = test/ #exclude指定common目錄下某個目錄能夠不一樣步數據
auth users = tom, jerry #設置容許鏈接服務器的帳戶,此帳戶能夠是系統中不存在的用戶
secrets file = /etc/rysncd.secrets #密碼驗證文件名,該文件權限要求爲只讀,建議爲600,僅在設置auth users後有效
hosts allow = 192.168.0.0/255.255.255.0 #設置哪些主機能夠同步數據,多ip和網段之間使用空格分隔
hosts deny=* #除了hosts allow定義的主機外,拒絕其餘全部
list = false #客戶端請求顯示模塊列表時,本模塊名稱是否顯示,默認爲true
三. 建立密碼文件,防火牆設置,客戶端和服務器端都要作以下操做
echo "tom:123" > /etc/rsyncd.secrets
echo "jerry:123" >> /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
echo "welcome to access" > /etc/rsyncd.motd #此項客戶端不須要作
rsync --daemon # --daemon表示後臺執行,客戶端開啓rsync不須要--daemon選項
echo "/usr/bin/rsync --daemon" >> /etc/rc.local #開機啓動rsync服務
firewall-cmd --permanent --add-port=873/tcp #添加防火牆規則,容許873端口的數據訪問
四. 客戶端同步數據
yum -y install rsync
rsync -vzrtopg --progress tom@192.168.0.230::common /test #通common模塊指定的/common目錄下的文件拷貝到本客戶端的/test目錄下
參數說明
v:顯示詳細信息
z:傳輸過程當中對數據進行壓縮
r:遞歸
t:保留修改時間屬性
o:保留文件全部者屬性
p:保留文件權限屬性
g:保留文件所屬組屬性
a:歸檔模式,主要保留文件屬性,等同於-rlptgoD
--progress:顯示數據傳輸的進度信息
--password-file=FILE:指定密碼文件,將密碼寫入文件,實現非交互式數據同步,這個文件名也須要修改權限爲600
--delete:刪除那些僅在目標路徑中存在的文件(源路徑中不存在),在腳本中的數據同步常常加上此參數
--list-only:僅列出服務器模塊列表,須要rsync服務器設置list=true
五. rsync語法格式,SRC表示源路徑,DEST表示目標路徑
1. 本地複製
rsync [選項] SRC... [DEST]
2. 經過遠程shell複製
下載數據:rsync [選項] [user@a]HOST:SRC...[DEST] #不加user@表示用root用戶進行登錄遠程主機下載數據到 本地的DEST路徑
上傳數據:rsync[選項] SRC...[user@]HOST:DEST #這裏的SRC表示本地數據,DEST表示遠端主機目錄
3. 經過rsync進程複製
下載數據
rsync [選項] [user@] HOST::SRC ... [DEST] #這裏雙冒號後的SRC表示遠端服務端的模塊名
rsync [選項] rsync://[user@]HOST[:port]/SRC...[DEST] #這裏的SRC表示實際的同步目錄名,這種方式能夠指定端口
上傳數據
rsync [選項] SRC...[user@]HOST::DEST #上傳本地客戶端數據到遠端服務端的DEST模塊名指定的路徑
rsync [選項] SRC...rsync://[user@HOST[:port]/DEST
一些例子
1. rsync -t *.c 192.168.0.54:src/ #將本機當前目錄下的以.c結尾的文件賦值到192.168.0.54的src目錄下
2. rsync -avz 192.168.0.54:src/bar /data/tmp #從192.168.0.54主機上將src/bar目錄以遞歸方式複製到本機/data/tmp目錄
3. rsync -avz 192.168.0.54:src/bar/ /data/tmp #和例子2的區別是不在/data/tmp目錄下建立bar目錄
4. rsync -avz /src/foo /dest #將本機/src/foo目錄複製到/dest目錄
5. rsync -avz tom@192.168.0.230::common /test3 #使用tom帳戶鏈接遠程192.168.0.230主機的rsync進程,將common模塊定義的path路徑下載到本地test3目錄
6. rsync -avz 192.168.0.230::common /test3 #匿名下載192.168.0.230服務器的common模塊至本地的/test3目錄
7. rsync --list-only tom@192.168.0.254:: #顯示192.168.0.254服務器全部的模塊名稱,須要服務器端配置list=true纔會顯示
8. 客戶端每次鏈接服務器都須要輸入密碼很麻煩,能夠建立密碼文件rsync.pass,在其中包含密碼,而後使用--password-file指定此文件
echo "123" > rsync.pass #服務器端用戶tom的密碼
rsync -avz --delete --password-file=rsync.pass tom@192.168.0.254::common /dest
六. 編寫簡單shell腳本,使客戶端按期對rsync服務器(192.168.0.230)的數據進行備份
#!/bin/bash
export PATH=/bin:/usr/bin:/usr/local/bin
SRC=common #模塊名
DEST=/data
server=192.168.0.230
user=tom
passfile=/root/rsync.pass
#if the DEST directory not found, then create one
[ ! -d $DEST ] && mkdir $DEST
[ ! -e $passfile ] && exit 2
rsync -az --delete --password-file=$passfile ${user}@${server}::$SRC $DEST/$(data +%Y%m%d) #加上日期
以後在定時任務中加入執行此腳本便可
七. 附加
ubuntu上作rsync同步可參考 https://www.linuxidc.com/Linux/2016-08/134584.htm