rsync介绍

  Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。


  后端的存储数据库都需要实时同步,而rsync用在存储的实时同步。

  inotify不会对老的数据进行增量,只有新的数据才会增量,这样就不存在比对的问题


   生产场景集群架构服务器备份方案cron+rsync

   rsync结合inotify的功能做实时数据同步rsync+inotify或sersync


Rsync三种同步方式

Local:

Access via remote shell:

Access via rsync daemon:


rsync常用参数说明:

网址:https://www.samba.org/ftp/rsync/rsync.html

   -v,--verbose详细模式输出,传输时的进度等信息

   -z,--compress传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩

   -a,--archive归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgD1

   -r,--recursive对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r

   -t,--times保持文件时间信息

   -o,--owner保持文件属主信息

   -p,--perms保持文件权限

   -g,--group保持文件属组信息

   -P,--progress显示同步的过程及传输时的进度等信息

   -r,--recursive对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r

   -e,--rsh=COMMAND使用的信道协议,指定替代rsh的shell程序。例如:ssh

   --exclude=PATTERN指定排除不需要传输的文件模式

-avz相当于vzrtopgDl

生产参数:-avz或者用-vzrtopg


实例:

用rsync备份目录

1
2
3
4
5
6
7
8
9
[root@ cat  ~] # cp /etc/hosts /tmp/          #用CP命令备份
cp : overwrite ` /tmp/hosts '? y
[root@ cat  ~] # rsync /etc/hosts /tmp/
[root@ cat  ~] # rm -f /tmp/hosts          
[root@ cat  ~] # rsync /etc/hosts /tmp/       #用rsync不加参数备份
[root@ cat  ~] # ll /etc/hosts                             
-rw-r--r--. 1 root root 158 Jan 12  2010  /etc/hosts
[root@ cat  ~] # ll /tmp/hosts                              #查看TMP目录下已有备份过来的文件
-rw-r--r-- 1 root root 158 Jul  1 09:11  /tmp/hosts

rsync最常见的命令组合是-avz

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@ cat  ~] # ll /tmp/hosts   
ls : cannot access  /tmp/hosts : No such  file  or directory
[root@ cat  ~] # rsync -avz /etc/hosts /tmp/                #用参数-avz复制文件夹
sending incremental  file  list                            
hosts                                                     #首次复制,提示hosts拷贝
sent 124 bytes  received 31 bytes  310.00 bytes /sec
total size is 158  speedup is 1.02
[root@ cat  ~] # ll /tmp/hosts              
-rw-r--r-- 1 root root 158 Jan 12  2010  /tmp/hosts
[root@ cat  ~] # rsync -avz /etc/hosts /tmp/                #再次拷贝,已提示不再拷贝
sending incremental  file  list
sent 30 bytes  received 12 bytes  84.00 bytes /sec
total size is 158  speedup is 3.76


删除目录及下面的文件,创建一个空目录。理论是空目录有什么,目标目录就有什么,这样就是空目录是空,执行后,目录也就空了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@ cat  ~] # ll /data/                                   #准备删除/data下的文件
total 8
-rw-r--r-- 1 old111 old111    0 Jun 15 16:36 23.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:30 333
-rw-r--r-- 1 old111 old111    0 Jun 15 16:28 333t.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:26 333.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:37 33.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:39 55.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:39 88.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 15:09 aaa.txt
-rw-r--r-- 1 old111 old111    0 Jun 14 16:31 aa.txt
drwxr-xr-x 3 old111 old111 4096 May 19 16:55 appdatas
drwxr-xr-x 3 old111 old111 4096 May 19 16:55 applogs
-rw-r--r-- 1 old111 old111    0 Jun 15 16:40 eter.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:46 we.txt
[root@ cat  ~] # mkdir /null                                #创建一个/null的文件夹
[root@ cat  ~] # rsync -r --delete /null /data/             #-r是递归--delete是删除
[root@ cat  ~] # ll /data/                                  #查看还在,是因为/null后面还要加(/)不加/它认为是null这个目录名及目录里面的内容。加/后,只表示目录里面的内容,不表示目录名了
total 12
-rw-r--r-- 1 old111 old111    0 Jun 15 16:36rs 23.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:30 333
-rw-r--r-- 1 old111 old111    0 Jun 15 16:28 333t.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:26 333.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:37 33.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:39 55.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 16:39 88.txt
-rw-r--r-- 1 old111 old111    0 Jun 15 15:09 aaa.txt
-rw-r--r-- 1 old111 old111    0 Jun 14 16:31 aa.txt
drwxr-xr-x 3 old111 old111 4096 May 19 16:55 appdatas
drwxr-xr-x 3 old111 old111 4096 May 19 16:55 applogs
-rw-r--r-- 1 old111 old111    0 Jun 15 16:40 eter.txt
drwxr-xr-x 2 root   root   4096 Jul  1 09:25 null
-rw-r--r-- 1 old111 old111    0 Jun 15 16:46 we.txt
[root@ cat  ~] # rsync -r --delete /null/ /data/            #使用/null/再次删除,这次已经删除成功
[root@ cat  ~] # ll /data/
total 0
[root@ cat  ~] # mkdir /null/ddd                            #这个目录有什么,执行后,目标目录也有什么
[root@ cat  ~] # rsync -r --delete /null/ /data/            
[root@ cat  ~] # ll /data/                                  #data下已有ddd文件夹(注:如果用rsync会干掉目标目录里的文件,cp不会)
total 4
drwxr-xr-x 2 root root 4096 Jul  1 09:31 ddd

学习自:

老男孩Linux