前言

rsync 是一款开源,安全性高,备份迅速,支持本地复制,支持增量备份等。是一款功能强大可使本地主机不同分区或目录之间及本地和远程两台主机之间的数据镜像快速同步、复制、远程备份等功能。

Rsync (Remote Sync) 是 Linux/Unix 系统中用于远程和本地复制和同步文件和目录的最常用工具。传统使用的 cp,scp 工具拷贝每次均为完整拷贝,而 rsync 除了完整拷贝,还具备增量拷贝的功能,因此从此性能及效率上更胜一筹。


系统平台

一台 Ubuntu 20.04.3 系统

数据同步工具 Rsync_系统平台

rsync 安装的版本如下 rsync  version 3.1.3

数据同步工具 Rsync_系统平台_02

一台 CentOS 7.9.2 系统

数据同步工具 Rsync_数据_03

rsync 安装的版本如下 rsync  version 3.1.2

数据同步工具 Rsync_系统平台_04


本地备份

scm@scm:~/SonarQube$
scm@scm:~/SonarQube$ rsync -avI --delete -progress es7 ../autotomcat/
scm@scm:~/SonarQube$

数据同步工具 Rsync_tomcat_05

scm@scm:~/SonarQube$
scm@scm:~/SonarQube$ rsync -av Documents/* /home/data/documents
scm@scm:~/SonarQube$

# -a 归档模式
# -v 输出详细的信息
# -r 递归复制数据(但在传输数据时不保留时间戳和权限)。
# -z 压缩文件数据。
# -h 以人类可读的格式输出数字。
# –progress 显示进度,它显示文件和完成传输的剩余时间。
# –-include 允许通过指定参数来包括指定的文件。
# –-exclude 允许通过指定参数来排除指定的文件。
# --delete 使用 --delete 选项来删除源目录中不存在的文件。
# --max-size='200k' 指定要传输或同步的最大文件大小,该命令将只传输那些等于或小于200k的文件。

scm@scm:~/SonarQube$ rsync -aunv Documents/* /home/zcwyou/documents
scm@scm:~/SonarQube$

#或者 # 在同步文件之前执行一个演练,如下所示:
scm@scm:~/SonarQube$ rsync -av --dry-run Documents/* /home/zcwyou/documents
scm@scm:~/SonarQube$

# -n 允许我们在不做任何更改的情况下执行测试操作,它告诉我们将要复制哪些文件。

#如果确认没有错,就执行以下命令进行真同步:
scm@scm:~/SonarQube$ rsync -av --update Documents/* /home/zcwyou/documents
scm@scm:~/SonarQube$

如上图所示,在 SonarQube 目录下,执行指令把 es7 目录,复制备份到上一级的 autotomcat 目录下,执行指令后就完成了复制备份操作,同理,如需要备份其他目录或文件,同样执行上面的指令即可。


远程备份

scm@scm:~/autotomcat$
scm@scm:~/autotomcat$
scm@scm:~/autotomcat$ rsync --delete-before -avlH --progress --stats es7 scm@192.168.109.139:/home/scm/soft/`date +backup%Y%m%d%H%M%S`/
scm@192.168.109.139's password:
building file list ...
359 files to consider
created directory /home/scm/soft/backup20220421140706
es7/
es7/nodes/
es7/nodes/0/
es7/nodes/0/node.lock

数据同步工具 Rsync_tomcat_06

可以看到,执行 rsync 指令后,把想要的数据目录 es7 已同步备份到远程的 192.168.109.139 服务器指定的目录下,并创建了 backup%Y%m%d%H%M%S  的备份目录,进入备份目录后,可以看到 es7 目录数据已从远程同步备份过来了。


个人喜好常用参数

# 要指定使用rsync的协议,您需要使用-e选项和您想要使用的协议名称。
# 如下事例中,利用 SSH 加密通道同步远程服务器上的文件到远程服务器上,使用 -e ssh 选项来进行数据传输。
$ rsync -e "ssh p22" -avpgolr postgresql-42.3.2.jar scm@192.168.109.139:/home/scm/soft/`date +backup%Y%m%d%H%M%S`/

$ rsync -vI -avpgolr *.sh scm@192.168.109.139:/home/scm/soft/`date +backup%Y%m%d%H%M%S`/

$ rsync -vI *.sh scm@192.168.109.139:/home/scm/soft/`date +backup%Y%m%d%H%M%S`/

$ rsync --delete-before -avlH --progress --stats *.sh scm@192.168.109.139:/home/scm/soft/`date +backup%Y%m%d%H%M%S`/

$ rsync -avI --delete -progress mvnwebapp/ ../autotomcat/

$ rsync -avz --delete /home/scm/soft/mvnwebapp scm@192.168.109.139:/home/scm/soft/`date +backup%Y%m%d%H%M%S`/

$ rsync -avzl --delete mvnwebapp scm@192.168.109.139:/home/scm/soft/`date +backup%Y%m%d`/

$ rsync -avzl --delete scm@192.168.109.128:/home/scm/soft/mvnwebapp /home/scm/soft