文章来源:王琦的个人博客-使用rsync进行数据同步 ,互联网打杂,喜欢多语言编程,记录一些知识碎片,分享一些心得。
介绍
rsync是一个可实现全量以及增量的本地或者远程数据同步备份的工具,可以不进行改变原有数据的属性,实现数据备份迁移。可以本地复制,远程复制,或者远程守护进程方式复制,只发送源文件和目标文件之间的差异信息,实现数据的增量同步。首次传输采用全量传输。
rsync特性
- 支持拷贝普通文件和特殊文件,如链接文件,设备等
- 支持排除指定文件或目录同步的功能,类似tar打包命令排除功能。
- 支持保持源文件或目录的所有属性信息不变
- 支持增量同步,只同步变化数据,效率高
- 支持rcp,rsh,ssh来配合进行隧道加密传输文件
- 支持使用通过socket(守护进程方式)传输文件或目录信息
- 支持用户认证方式传输数据
rsync命令简单应用
命令
-a --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于-rtopgDl
-r 对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写的r.
-o 保持文件属性信息
-p 保持文件权限
-g 保持文件属组信息
-P 显示同步的过程及传输时的进度等信息
-D 保持设备文件信息
-l 保持软连接
-avzP 提示:这里的 相当于 -vzrtopgDlP(还多了Dl功能)生产环境常用
-avz 定时任务就不用输出过程了可以-az
rsync同步目录
rsync -rp /tmp 172.16.1.31:/tmp/
注意:rsync 同步目录 /tmp/目录后有/信息,表示将目录下的数据内容进行同步,没有/则同步目录
rsync实现删除
rsync -r --delete /null/ /tmp/
删除是将一个空目录和一个有数据的目录进行同步,会将有数据目录中的文件进行清空
rsync守护进程模式应用
语法格式:
pull:rsync [OPTION…] [USER@]HOST::SRC… [DEST]
push:rsync [OPTION…] SRC… [USER@]HOST::DEST
- SRC:本地要推送到远程的文件或目录
- USER:认证用户
- HOST:主机
- DEST:模块名
rsync -avz ./test.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
服务端部署
1、编写配置文件
vim /etc/rsyncd.conf
#rsync_config
#created by WQ at 2016
##rsyncd.conf start##
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 = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
# 在模块上边的配置是全局配置,对所有模块生效
[backup]
comment = "backup dir"
path = /backup
2、创建用户&创建备份目录
useradd rsync -M -s /sbin/nologin
mkdir /backup
chown -R rsync.rsync /backup
3、创建认证文件
echo "rsync_backup:hiwangqi" >> /etc/rsync.password
chmod 600 /etc/rsync.password
4、启动rsync --daemon
,默认监听端口号873。
可选参数:
–porst 8730 指定端口
–config=/etc/rsyncd.conf 指定配置文件
客户端部署
创建密码文件
echo "hiwangqi" >> /etc/rsync.password
chmod 600 /etc/rsync.password
测试
rsync -avz ./test.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
输出>>
sending incremental file list
test.txt
sent 209 bytes received 27 bytes 157.33 bytes/sec
total size is 292 speedup is 1.24
其他命令
1、排除指定文件
–exclude=file
# --exclude=file
rsync -avz /root/test/ --exclude=b.txt --exclude=d.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
# --exclude={a.txt,b.txt}
rsync -avz /root/test/ --exclude={a.txt,b.txt} rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
# --exclude-from=test.txt
rsync -avz /root/test/ --exclude-from=test.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
2、无差异同步,目录文件保持一致,也可用作清空
–delete
rsync -avz /root/test --delete rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
3、列出目录
# 服务端配置文件需设置list=true
rsync rsync_backup@172.16.1.41::
>>输出
backup "backup dir"
配置文件参数
use chroot=no #进行数据同步时,安全相关参数,默认内网同步,可以关闭。
max connections=200 #定时向备份服务器进行数据存储的并发连接数。
timeout = 300 #超过指定时间没有数据传输就释放链接。
pid file 程序运行时,将pid保存到文件
lock file 定义锁文件,主要配合max connections 参数,达到最大连接就禁止访问
[backup] 指定备份目录的模块信息
path = /backup 指定数据进行备份的目录信息
ignore errors 数据备份传输过程中,忽略一些I/O产生的传输错误
read only = false 讲只读模式进行关闭,也就是可以读写
list = false 服务配置模块的信息是否对客户端可见
hosts allow = 172.16.1.0/24 白名单
hosts deny = 0.0.0.0/32 黑名单
auth user = resync_backup 指定认证用户。
secrets file = /etc/rsync.password 认证用户的密码文件信息。