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