rsync是一款開源的,快速的,多功能的,可實現全量及增量的本地或遠程數據同步備份的優秀工具。html
全量:將所有數據,進行傳輸覆蓋
增量:只傳輸差別部分的數據redis
Rsync經過其獨特的「快速檢查」算法,實現增量傳輸數據算法
[root@backup ~]#man rsync Rsync finds files that need to be transferred using a 「quick check」 algorithm (by default) that looks for files that have changed in size or in last-modified time. Any changes in the other preserved attributes (as requested by options) are made on the destination file directly when the quick check indicates that the file’s data does not need to be updated.
在同步備份數據時,默認狀況下,Rsync經過其獨特的「quick check」算法,它僅同步大小或者最後修改時間發生變化的文件或目錄,固然也可根據權限,屬主等屬性的變化同步,但須要指定相應的參數,甚至能夠實現只同步一個文件裏有變化的內容部分,因此,能夠實現快速的同步備份數據。shell
centos 5 rsync 2.x 先比對再同步,速度較慢
centos 6 rsync 3.x 一邊比對,一邊對差別部分進行同步centos
[root@mico ~]# rsync --version rsync version 3.1.2 protocol version 31 Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others. Web site: http://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append, ACLs, xattrs, iconv, symtimes, prealloc rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details
相似於 cp 命令 -- 實現本地備份傳輸數據
相似於scp 命令 -- 遠程備份傳輸數據
相似於 rm 命令 -- 實現無差別同步備份
相似於 ls 命令 -- 本地文件信息查看安全
rsync 命令屬於1 v 4 的命令服務器
[root@mico practices]# cp -a /root/practices/source/tmp_file.txt tmp/ cp:是否覆蓋"tmp/tmp_file.txt"? [root@mico practices]# rm -rf tmp/tmp_file.txt [root@mico practices]# cp -a /root/practices/source/tmp_file.txt tmp/ [root@mico practices]# ls tmp/ tmp_file.txt [root@mico practices]# rm tmp/tmp_file.txt rm:是否刪除普通空文件 "tmp/tmp_file.txt"? [root@mico practices]# rsync /root/practices/source/tmp_file.txt tmp/ [root@mico practices]# ls tmp/ tmp_file.txt [root@mico practices]# ls tmp/tmp_file.txt tmp/tmp_file.txt
檢查對端服務器目標位置上是否有該文件app
root@vicodona practices]# ls tmp/tmp_file.txt ls: cannot access tmp/tmp_file.txt: No such file or directory
從本地拷貝到遠端服務器上ssh
[root@mico practices]# ls tmp/tmp_file.txt tmp/tmp_file.txt [root@mico practices]# scp -rp /root/practices/source/tmp_file.txt 47.107.108.121:/root/practices/tmp/ The authenticity of host '47.107.108.121 (47.107.108.121)' can't be established. ECDSA key fingerprint is SHA256:XRAgcbGsezufwlo5zaYbN4gO/8tS7pHAcNtfc7T1URA. ECDSA key fingerprint is MD5:e0:07:d1:80:ae:1f:8c:58:46:69:15:d6:46:0e:76:4f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '47.107.108.121' (ECDSA) to the list of known hosts. root@47.107.108.121's password: tmp_file.txt 100% 0 0.0KB/s 00:00 [root@mico practices]#
檢查遠端服務器上的結果socket
[root@vicodona practices]# ls tmp/tmp_file.txt tmp/tmp_file.txt
[root@mico practices]# rsync -rp /root/practices/source/tmp_file.txt 47.107.108.121:/root/practices/tmp/ root@47.107.108.121's password: [root@mico practices]#
檢查遠端服務器上的結果
[root@vicodona practices]# ls tmp/tmp_file.txt tmp/tmp_file.txt
[root@mico practices]# ls source/tmp_file.txt tmp/tmp_file.txt [root@mico practices]# rm -rf source/tmp_file.txt [root@mico practices]# ll source/tmp_file.txt ls: 沒法訪問source/tmp_file.txt: 沒有那個文件或目錄 [root@mico practices]#
建立一個空目錄,使用空目錄進行無差別同步
[root@mico practices]# ll tmp/ 總用量 0 -rw-r--r-- 1 root root 0 7月 12 15:17 tmp_file.txt [root@mico practices]# mkdir null [root@mico practices]# rsync --delete null/ tmp/ rsync: --delete does not work without --recursive (-r) or --dirs (-d). rsync error: syntax or usage error (code 1) at main.c(1567) [client=3.1.2] [root@mico practices]# rsync -a --delete null/ tmp/ [root@mico practices]# ll tmp/ 總用量 0
使用 rsync 能夠實現與ls相似的功能
[root@mico practices]# ls -l source/tmp_file.txt -rw-r--r-- 1 root root 0 7月 12 15:44 source/tmp_file.txt [root@mico practices]# rsync source/tmp_file.txt -rw-r--r-- 0 2019/07/12 15:44:57 tmp_file.txt [root@mico practices]#
#tar zcvf backup_1.tar.gz /opt/data -exclude=mico 說明:在打包/opt/data時就排除了mico命名的目錄和文件。
# 將備份/home 目錄自 2008-01-29 以來修改過的文件 # tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home # 將備份 /home 目錄昨天以來修改過的文件 # tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home # 添加文件到已經打包的文件 # tar -rf all.tar *.gif 說明:這條命令是將全部.gif的文件增長到all.tar的包裏面去。-r是表示增長文件的意思。
兩臺服務器之間數據同步(定時任務cron+rsync)
同步網站內部人員數據信息(定時任務最小週期爲1分鐘)
兩臺服務器之間數據同步(實時任務inotify/sersync/lrsyncd+rsync)
同步網站用戶人員數據信息
SYNOPSIS 本地數據同步方式 Local: rsync [OPTION...] SRC... [DEST] 遠程數據同步方式 Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 守護進程方式同步數據 Access via rsync daemon: Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
Local: rsync [OPTION...] SRC... [DEST]
參數 | 含義 |
---|---|
rsync | 數據同步命令 |
[OPTION...] | rsync命令參數信息 |
SRC | 要同不得數據信息(文件或目錄) |
[DEST] | 將數據傳輸到什麼位置 |
實例演示命令
[root@backup ~]# rsync /etc/hosts /tmp/ [root@backup ~]# ls /tmp/hosts /tmp/hosts
Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
說明:須要進行交互傳輸數據。若是想實現免交互傳輸數據,須要藉助ssh+key方式實現
pull: 拉: | |
---|---|
[USER@] : | 以什麼用戶身份傳輸數據信息 |
HOST: | 遠程主機信息(IP地址信息 主機名稱信息) |
SRC: | 遠端要恏過來的數據信息 |
[dest] | 恏到本地什麼位置 |
push:推: | |
SRC: | 本地要懟過去的數據信息 |
DEST | 懟到遠端什麼位置 |
從遠端拉文件到當前目錄
[root@vicodona tmp]# touch 1.txt [root@vicodona tmp]# ll total 0 -rw-r--r-- 1 root root 0 Jul 13 16:00 1.txt [root@vicodona tmp]# pwd /root/practices/tmp ---------------------------------------- [root@mico tmp]# rsync 47.107.108.121:/root/practices/tmp/1.txt . root@47.107.108.121's password: [root@mico tmp]# ll 總用量 0 -rw-r--r-- 1 root root 0 7月 13 16:03 1.txt
將本地的tmp目錄推到遠端服務器上
[root@vicodona practices]# ls tmp ls: cannot access tmp: No such file or directory ---------------- [root@mico practices]# rsync -r /root/practices/tmp 47.107.108.121:/root/practices root@47.107.108.121's password: ---------------------------- [root@vicodona practices]# ll total 4 drwxr-xr-x 2 root root 4096 Jul 13 16:11 tmp
若是僅是推送目錄下的文件並不包括目錄自己,使用/tmp/
/tmp --表示將tmp目錄自己及目錄下的內容進行傳輸
/tmp/ --表示只傳輸tmp目錄下面的內容信息
Access via rsync daemon: Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
- vicodona 服務器做爲rsync服務端
- 以rsync客戶端做爲參照物,將數據推到rsync服務器上
第一步:檢查軟件是否存在
[root@vicodona ~]# rpm -qa|grep rsync rsync-3.1.2-4.el7.x86_64
第二步:進行軟件服務配置
[root@vicodona ~]# cat /etc/rsyncd.conf # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # configuration example: # uid = nobody # gid = nobody # use chroot = yes # max connections = 4 # pid file = /var/run/rsyncd.pid # exclude = lost+found/ # transfer logging = yes # timeout = 900 # ignore nonreadable = yes # dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # [ftp] # path = /home/ftp # comment = ftp export area uid = rsync gid = rsync use chroot = no max connections = 200 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false hosts allow = 47.107.108.121/24 hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.password fake super = yes [backup] comment = "backu dir by vicodona" path = /backup
第三步:建立rsync用戶
[root@vicodona ~]# id rsync id: rsync: no such user [root@vicodona ~]# useradd -s /sbin/nologin -M rsync
第四步:建立數據備份存儲目錄,目錄修改屬主
[root@vicodona ~]# mkdir /backup/ [root@vicodona ~]# chown -R rsync.rsync /backup/
第五步:建立認證用戶密碼文件
[root@vicodona ~]# echo "rsync_backup:vicodona123">>/etc/rsync.password [root@vicodona ~]# chmod 600 /etc/rsync
第六步:啓動rsync服務
[root@vicodona ~]# rsync --daemon
查看啓動的服務
[root@vicodona ~]# ps -ef|grep rsync root 7860 1 0 08:58 ? 00:00:00 rsync --daemon root 7863 7841 0 08:58 pts/19 00:00:00 grep --color=auto rsync [root@vicodona ~]# netstat -lntup |grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7860/rsync tcp6 0 0 :::873 :::* LISTEN 7860/rsync
第一步:查看軟件是否存在
[root@mico ~]# rpm -qa|grep rsync rsync-3.1.2-4.el7.x86_64
第二步:建立認證文件
客戶端認證文件只須要有密碼便可
[root@mico ~]# echo "vicodona123">>/etc/rsync.passwd [root@mico ~]# chmod 600 /etc/rsync.passwd
第三步:實現數據傳輸
交互式
[root@mico practices]# rsync -azvP /root/practices/tmp/1.txt rsync_backup@47.107.108.121::backup Password: sending incremental file list 1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 88 bytes received 43 bytes 29.11 bytes/sec total size is 0 speedup is 0.00
非交互式
[root@mico practices]# rsync -azvP /root/practices/tmp/1.txt rsync_backup@47.107.108.121::backup --password-file=/etc/rsync.passwd sending incremental file list 1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 88 bytes received 43 bytes 262.00 bytes/sec total size is 0 speedup is 0.00
目錄參數 | 參數說明 |
---|---|
-v, --verbose | 詳細模式輸出 |
-q, --quiet | 精簡輸出模式 |
-c, --checksum | 打開校驗開關,強制對文件傳輸進行校驗 |
-a, --archive | 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等於-rlptgoD |
-r, --recursive | 對子目錄以遞歸模式處理 |
-R, --relative | 使用相對路徑信息 |
-b, --backup | 建立備份,也就是對於目的已經存在有一樣的文件名時,將老的文件從新命名爲~filename。可使用--suffix選項來指定不一樣的備份件前綴。 |
--backup-dir | 將備份文件(如~filename)存放在在目錄下。 |
-suffix=SUFFIX | 定義備份文件前綴 |
-u, --update | 僅僅進行更新,也就是跳過全部已經存在於DST,而且文件時間晚於要備份的文件。(不覆蓋更新的文件) |
-l, --links | 保留軟鏈結 |
-L, --copy-links | 想對待常規文件同樣處理軟鏈結 |
--copy-unsafe-links | 僅僅拷貝指向SRC路徑目錄樹之外的鏈結 |
--safe-links | 忽略指向SRC路徑目錄樹之外的鏈結 |
-H, --hard-links | 保留硬鏈結 |
-p, --perms | 保持文件權限 |
-o, --owner | 保持文件屬主信息 |
-g, --group | 保持文件屬組信息 |
-D, --devices | 保持設備文件信息 |
-t, --times | 保持文件時間信息 |
-S, --sparse | 對稀疏文件進行特殊處理以節省DST的空間 |
-n, --dry-run | 現實哪些文件將被傳輸 |
-W, --whole-file | 拷貝文件,不進行增量檢測 |
-x, --one-file-system | 不要跨越文件系統邊界 |
-B, --block-size=SIZE | 檢驗算法使用的塊尺寸,默認是700字節 |
-e, --rsh=COMMAND | 指定使用rsh、ssh方式進行數據同步 |
--rsync-path=PATH | 指定遠程服務器上的rsync命令所在路徑信息 |
-C, --cvs-exclude | 使用和CVS同樣的方法自動忽略文件,用來排除那些不但願傳輸的文件 |
--existing | 僅僅更新那些已經存在於DST的文件,而不備份那些新建立的文件 |
--delete | 刪除那些DST中SRC沒有的文件 |
--delete-excluded | 一樣刪除接收端那些被該選項指定排除的文件 |
--delete-after | 傳輸結束之後再刪除 |
--ignore-errors | 及時出現IO錯誤也進行刪除 |
--max-delete=NUM | 最多刪除NUM個文件 |
--partial | 保留那些因故沒有徹底傳輸的文件,以是加快隨後的再次傳輸 |
--force | 強制刪除目錄,即便不爲空 |
--numeric-ids | 不將數字的用戶和組ID匹配爲用戶名和組名 |
--timeout=TIME | IP超時時間,單位爲秒 |
-I, --ignore-times | 不跳過那些有一樣的時間和長度的文件 |
--size-only | 當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間 |
--modify-window=NUM | 決定文件是否時間相同時使用的時間戳窗口,默認爲0 |
-T --temp-dir=DIR | 在DIR中建立臨時文件 |
--compare-dest=DIR | 一樣比較DIR中的文件來決定是否須要備份 |
-P | 等同於 --partial |
--progress | 顯示備份過程 |
-z, --compress | 對備份的文件在傳輸時進行壓縮處理 |
--exclude=PATTERN | 指定排除不須要傳輸的文件模式 |
--include=PATTERN | 指定不排除而須要傳輸的文件模式 |
--exclude-from=FILE | 排除FILE中指定模式的文件 |
--include-from=FILE | 不排除FILE指定模式匹配的文件 |
--version | 打印版本信息 |
--address | 綁定到特定的地址 |
--config=FILE | 指定其餘的配置文件,不使用默認的rsyncd.conf文件 |
--port=PORT | 指定其餘的rsync服務端口 |
--blocking-io | 對遠程shell使用阻塞IO |
-stats | 給出某些文件的傳輸狀態 |
--progress | 在傳輸時現實傳輸過程 |
--log-format=formAT | 指定日誌文件格式 |
--password-file=FILE | 從FILE中獲得密碼 |
--bwlimit=KBPS | 限制I/O帶寬,KBytes per second |
-h, --help | 顯示幫助信息 |
保持同步目錄及文件屬性:
這裏的-avzP至關於 -vzetopdDlP,生產環境經常使用的參數爲 -avzP
在腳本中能夠報-vP去掉
--progress能夠用-P代替
daemon啓動擴展參數
參數 | 說明 |
---|---|
--daemon | daemon表示以守護進程的方式啓動rsync服務。 |
--address | 綁定指定IP地址提供服務。 |
--config=FILE | 更改配置文件路徑,而不是默認的/etc/rsyncd.conf |
--port=PORT | 更改其它端口提供服務,而不是缺省的873端口 |
指定ip
[root@vicodona backup]# rsync --daemon --address=47.107.108.121 [root@vicodona backup]# netstat -lntup|grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7860/rsync tcp6 0 0 :::873 :::* LISTEN 7860/rsync -------------------- [root@mico practices]# rsync -azvP /root/practices/tmp/1.txt rsync_backup@47.107.108.121::backup --password-file=/etc/rsync.passwd sending incremental file list 1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 88 bytes received 43 bytes 262.00 bytes/sec total size is 0 speedup is 0.00
服務端指定服務端口
[root@vicodona ~]# rsync --daemon --port=5222 [root@vicodona ~]# netstat -lntup|grep rsync tcp 0 0 0.0.0.0:5222 0.0.0.0:* LISTEN 2598/rsync tcp 0 0 :::5222 :::* LISTEN 2598/rsync