简介
rsync (remote sync) 是unix及类unix平台下的数据镜像备份软件.不需要每次都全量备份. rsync可以根据数据的变化进行差异化备份.提高备份效率.减少数据流量.
语法参数
Local
rsync [OPTION...] SRC... [DEST]
remote shell
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
rsync daemon
Pull:
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
[OPTION]
-v 详细模式输出
-a 归档模式,递归的方式传输文件,并保持文件的属性,equals -rlptgoD
-r 递归拷贝目录
-l 保留软链接
-p 保留原有权限
-t 保留原有时间(修改)
-g 保留属组权限
-o 保留属主权限
-D 等于--devices --specials 表示支持b,c,s,p类型的文件
-R 保留相对路径
-H 保留硬链接
-A 保留ACL策略
-e 指定要执行的远程shell命令
-E 保留可执行权限
-X 保留扩展属性信息 a属性
--progress:显示数据传输的进度信息
--password-file=FILE:指定密码文件,将密码写入文件,实现非交互式数据同步,这个文件名也需要修改权限为600
--delete:删除那些仅在目标路径中存在的文件(源路径中不存在),在脚本中的数据同步经常加上此参数
--list-only:仅列出服务器模块列表,需要rsync服务器设置list=true
本地同步
1. 本地数据同步的时候,源目录后面的“/”会影响同步的结果 rsync -av /dir1/ /dir2 //只同步目录下面的文件到指定的路径 rsync -av /dir1 /dir2 //将当前目录dir1和目录下的所有文件一起同步 2. -R:不管加不加"/",都会将源数据的绝对路径一起同步 rsync -avR /dir1/ /dir2/
3. --delete:删除目标目录里多余的文件 rsync -avR --delete /dir1/ /dir2/
远程同步
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] rsync -av root@10.1.1.1:/backup /dir1 //同步远程机/backup下的所有文件到本地/dir1目录 Push: rsync [OPTION...] SRC... [USER@]HOST:DEST rsync -av /dir1/test.tar.gz code@10.1.1.1:/home/code //上传本地 /dir1/test.tar.gz 文件到远程 /home/code目录
服务同步
rsync --daemon //开启rsync后台服务
配置文件 /etc/rsyncd.conf
motd file = /etc/rsyncd.motd #设置服务器信息提示文件,在该文件中编写提示信息 transfer logging = yes #开启rsync数据传输日志功能 log file = /var/log/rsyncd.log #设置日志文件名,可通过log format参数设置日志格式 pid file = /var/run/rsyncd.log #设置rsync进程号保存文件名称 lock file = /var/run/rsync.lock #设置锁文件名称 port = 873 #设置服务器监听的端口号,默认是873 address = 192.168.0.230 #设置本服务器所监听网卡接口的ip地址 uid = nobody #设置进行数据传输时所使用的帐户名或ID号,默认使用nobody gid = nobody #设置进行数据传输时所使用的组名或GID号,默认使用nobody #若为yes,rsync会首先进行chroot设置,将根映射在下面的path参数路径下,对客户端而言,系统的根就是path参数指定的路径。但这样做需要root权限,并且在同步符号连接资料时只会同步名称,不会同步内容。 use chroot = no read only = yes #是否允许客户端上传数据,yes表示不允许 max connections =10 #设置并发连接数,0表示无限制 [common] #自定义模块名,rsync通过模块定义同步的目录,可定义多个 comment = web content #定义注释说明字串 path = /common #同步目录的真是路径通过path指定 ignore errors #忽略一些IO错误 #exclude = test/ #exclude指定common目录下某个目录可以不同步数据 auth users = tom, jerry #设置允许连接服务器的账户,此账户可以是系统中不存在的用户 secrets file = /etc/rysncd.secrets #密码验证文件名,该文件权限要求为只读,建议为600,仅在设置auth users后有效 hosts allow = 192.168.0.0/255.255.255.0 #设置哪些主机可以同步数据,多ip和网段之间使用空格分隔 hosts deny=* #除了hosts allow定义的主机外,拒绝其他所有 list = false #客户端请求显示模块列表时,本模块名称是否显示,默认为true
服务同步案例
需求
将远程服务器的日志文件打包压缩后定时同步到本地备份服务器.
要求
1.远程服务器每天00:00打包一次日志文件.
2.备份服务器每天00:05分pull一次数据.
实现
服务器 //1.创建备份日志文件夹. /back_log mkdir /back_log
//2.设置定时任务,每天00:00打包一次日志文件到/back_log crontab -e 00 00 * * * /usr/bin/tar -zcvf /back_log/message_log.tar.gz /var/log/messages //3.配置 /etc/rsyncd.conf 文件,配置服务模块.实现非交互式数据同步. [messages_log] #模块名称 path = /back_log/ #模块同步的目录全路径. log file = /var/log/rsync.log #同步日志文件 comment = messages log files #描述文件 hosts allow = 218.17.xx.xx uid = root #后台程序使用root身份运行. gid = root #后台程序使用root用户组身份运行. auth users = kenny #配置允许登录的用户,非系统内置用户. secrets file = /etc/rsyncd.secrets #配置记录账户信息的文件,文件名称不限定. hosts deny=* #除了hosts allow定义的主机外,拒绝其他所有 transfer logging = yes #开启rsync数据传输日志功能 pid file = /var/run/rsyncd.log #设置rsync进程号保存文件名称 //4.创建--password-file文件并设置600权限.所属主和所属组要和执行后台程序的用户身份一致. touch /etc/rsyncd.secrets echo "kenny:12345" >> /etc/rsyncd.secrets chmod 600 /etc/rsyncd.secrets
//5.开启 rsync 后台服务. rsync --daemon
//6.查看服务状态.防火墙添加873端口.云服务器在安全组规则里面也要开放873端口. netstat -nltp | grep "873" firewall-cmd --add-port=873/tcp --permanent firewall-cmd --reload
客户端 //1.创建备份日志文件夹 mkdir /back_messages_log
//2.创建--password-file文件.并设置600权限. 注意: 客户端文件只写入密码无需用户名. touch /etc/rsyncd.secrets echo "12345" >> /etc/rsyncd.secrets chmod 600 /etc/rsyncd.secrets
//3.创建定时任务每天00:05分pull一次数据. crontab -e 00 05 * * * /usr/bin/rsync -av kenny@218.17.xx.xx::messages_log /back_messages_log/