rsync可以做到在本地和远程之间同步文件,而且第一次是全量备份,接下来则是增量备份,但是默认不会删除存在目标目录中,不存在源目录的文件
指令使用
同步文件
rsync source.txt /tmp/dest/
注意:使用指令同步目标文件路径不存在时会自动创建
递归同步目录
rsync -r /tmp/source /tmp/dest
rsync -a /tmp/source/ /tmp/dest
-r参数表示将源目录下的子文件夹和子文件一起同步
-a参数表示将文件属性也递归同步
注意:源目录末尾加了/表示仅同步该目录下的所有子文件夹或者子文件,即/tmp/dest/source.txt;末尾不加/则是将源目录也拷贝过去,即/tmp/dest/source/source.txt
压缩同步
rsync -az /tmp/source/ /tmp/dest
同步时删除源目录失效文件
rsync -a /tmp/source/ /tmp/dest --delete
同步指定文件(可用正则)
rsync -a --include="*.txt" /tmp/source/ /tmp/dest --delete
不同步指定文件(可用正则)
rsync -a --exclude="*.log" /tmp/source/ /tmp/dest --delete
显示同步传输统计数据
rsync -av /tmp/source/ /tmp/dest
显示同步传输进程详情
rsync -aP /tmp/source/ tmp/dest
远程同步
rsync -a -e ssh /tmp/source/ wakamizu@192.168.1.102:/tmp/dest
rsync -a -e ssh wakamizu@192.168.1.102:/tmp/source/ /tmp/dest
使用其他ssh端口
rsync -a -e 'ssh -p 2222' /tmp/source/ wakamizu@192.168.1.102:/tmp/dest
模拟同步,实际不执行
rsync -a /tmp/source /tmp/dest --dry-run
配置使用
目标主机
在目标主机上创建文件
vim /etc/rsyncd.conf
log file = /var/log/rsyncd.log
#日志文件位置,启动rsync后自动产生这个文件,无需提前创建
log format = %t %a %m %f %b
#格式化日志
pidfile = /var/run/rsyncd.pid
#pid文件的存放位置
lock file = /var/run/rsync.lock
#支持max connections参数的锁文件
secrets file = /etc/rsync.pass
#用户认证配置文件
uid = wakamizu
#设置rsync运行权限
gid = wakamizu
#设置rsync运行权限
port = 873
#默认端口
ignore errors
#忽略错误
use chroot = true
#默认为true,在chroot环境中运行rsync守护进程。
read only = no
#设置rsync源服务器为读写权限
list = no
#不显示rsync源服务器资源列表
max connections = 200
#最大连接数
timeout = 600
#设置超时时间
hosts allow = 192.168.1.105
#允许访问来源地址
hosts deny = 0.0.0.0/24
#禁止访问来源地址
[test]
#自定义同步模块名称
path = /tmp/dest
#目标主机数据存放路径
comment = test
#模块描述
auth users = test
#执行数据同步的用户名
创建目标文件夹
mkdir /tmp/dest
创建验证文件
echo "test:test">/etc/rsync.pass
chmod 600 /etc/rsync.pass
重新启动服务
systemctl restart rsync
源主机
显示目标主机模块详情
#显示模块列表,需要list=yes
rsync rsync://192.168.1.106/
#显示模块目录文件
rsync test@192.168.1.106::test
在源主机上执行同步指令
rsync -avzP /tmp/source/ test@192.168.1.106::test
或者
echo "test" > /etc/rsync.pass && chmod 600 /etc/rsync.pass
rsync --password-file=/etc/pass.txt -avzP /tmp/source/ test@192.168.1.106::test
定时备份
crontab -e
0 0 * * * * * /usr/bin/rsync -az /tmp/source/ /tmp/dest/
0 0 * * * * * /usr/bin/rsync --password-file=/etc/pass.txt -az /tmp/source/ test@192.168.1.106::test