·rsync全称remote sync,是Unix/Linux一款优秀的复制工具,能够实现cp和scp的功能,可是rsync在实现跨主机复制时,并无加密功能,因此在远程复制时,须要ssh来承载rsync,可是rsync比起cp和scp来,有一个很显著个特性,那就是快,这个快并非说在复制过程当中的传输速率高,而是rsync在复制的过程当中,会比较源文件和目标文件的特征码,若是特征码一致,就不复制.
mysql
·rsync有4中工做模式:linux
第一种:shell模式,也称做本地模式,在本地复制文件的.web
第二种:远程shell模式,使用ssh(rsh)协议进行链接.sql
第三种:列表模式,其工做模式相似ls,仅列出源内容shell
第四种:服务器模式,esync能够工做为守护进程,可以接受客户端的数据传输请求,直接使用tcp协议进行链接,并监听在873端口vim
·远程shell模式和服务器模式的区别:bash
远程shell模式 | 服务器模式 |
rsync使用远程shell模式传输时:服务器 1.源路径或目的路径的主机名后面包含一个冒号分隔符.网络 2.链接远程主机时,不须要启动服务,不须要配置文件.ssh 3.链接远程主机时使用ssh做为传输工具 |
rsync使用服务器模式传输时: 1.源路径或目的路径的主机名后面包含两个冒号分,或使用rsync://URL 2.链接远程主机时,需验证身份,需rsync的配置文件,以及目标文件和源文件的读写权限,而后启动一个服务进程, 3.链接远程主机时使用tcp协议并监听在873端口 |
不要把服务器和服务器模式混淆了,服务器模式必定有服务器,有服务器的不必定就的服务器模式,远程shell也有服务器,但不是服务器模式. |
·rsync命令选项:
-n,--dry-run : 仅仅测试,并不真正的执行 -v,--verbose : 详细输出模式 -q,--quiet : 静默模式 -c,--checksum : 开启校验功能,强制对文件传输进行校验 -r,--recursive : 递归复制,通常只有复制目录时才有用 -a,--archives : 归档,保留文件的原有属性,包括扩展属性,访问控制列表等 -p,--perms : 保留文件的权限 -t,--times : 保留文件的时间戳 -l,--links :保留文件的符号连接 -g,--group : 保留文件的属组 -o,--owner : 保留文件的属主 -D,--devices :保留设备文件 -rptlgo : 组合起来至关于-a -e ssh(rsh) : 表示使用ssh协议做承载 -z : 基于网络传输,使用对文件压缩后传输 --progress :显示进度条 --stats : 显示如何执行压缩和传输
·注意:
rsync命令使用中,若是源参数的末尾有斜线,就会复制指定目录内的内容,而不复制目录自己,没有斜线,则会复制目录自己,目标参数末尾的斜线没有做用,以下例子:
[root@www tmp]# rm -rf test/ [root@www tmp]# mkdir test [root@www tmp]# rsync -r etc test/ #这里的复制是不加斜线的,为了和下面作对比,会复制目录自己 [root@www tmp]# cd test/ [root@www test]# ls etc ------------------------------------------------------------------------------------- [root@www tmp]#rm -rf test/ [root@www tmp]# mkdir test [root@www tmp]# rsync -r etc/ test/ #这里的复制是加斜线的,为了和上面的对比,仅复制目录内的内容 [root@www tmp]# cd test/ [root@www test]# ls abrt fonts mke2fs.conf rpc ... fcoe makedev.d request-key.d yum.repos.d ...
# rsync -r /mydata/data /backups/ : 会把目录data直接同步至/backups目录中 # rsync -r /mydata/data/ /backups/: 会把目录data/中的内容的同步至/backups目录中
示例:
1.本地模式
[root@www ~]# cp -r /etc /tmp/ #准备测试数据 [root@www tmp]# mkdir test #同上 [root@www tmp]# rsync etc/passwd test/ -n #测试可否同步 [root@www tmp]# rsync etc/passwd test/ #执行同步 [root@www tmp]# ls test/ #查看是否同步过去了 passwd [root@www tmp]# rsync etc/passwd test/ -nv #查看显示的详细信息 passwd sent 30 bytes received 15 bytes 90.00 bytes/sec total size is 2337 speedup is 51.93 (DRY RUN)
2.shell模式:把 172.16.21.2的文件推送到172.16.21.1服务器上去
[root@www test]# rsync -e ssh -r /tmp/etc root@172.16.21.1:/tmp #注意格式 ####rsync -e ssh -r /tmp/etc root@172.16.21.1:/tmp --progress ##显示每一个文件的传输进度的 The authenticity of host '172.16.21.1 (172.16.21.1)' can't be established. RSA key fingerprint is 15:03:48:51:95:07:ac:2b:1d:c7:0e:e6:e1:43:be:6d. Are you sure you want to continue connecting (yes/no)? yrs Please type 'yes' or 'no': yes Warning: Permanently added '172.16.21.1' (RSA) to the list of known hosts. root@172.16.21.1's password: -------------------------------------------------------------------------- 到172.16.21.1服务器上去查看 [root@www ~]# ls /tmp #推送过来了 etc ks-script-j1sUcU ...
3.shell模式:拉取服务器的内容到本地
[root@www test]# rsync -e ssh -r root@172.16.21.1:/etc/pam.d ./ root@172.16.21.1's password: [root@www test]# ls pam.d/ #同步到本地了 atd gdm-fingerprint remote system-auth-ac ... eject polkit-1 su vsftpd.mysql ...
服务器模式:
服务器端:192.168.112.136
客户端:192.168.112.134
vim /etc/xinetd.d/rsyn
service rsync { disable = no #这里改为no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
uid=nobody #使用哪一个用户运行该程序 gid=nobody #使用哪一个组运行该程序 use chroot=no max connections=10 #这里的复制大可能是IO操做,因此10也算高的了 strict modes =yes pid file=/var/run/rsyncd.pid log file=/var/log/rsyncd.log [test1] path=/tmp/web ignore errors = yes read only =no write only = no host allow = * uid = root gid = root
注意防火墙和SElinux的问题.
能够把线上的web当成服务器端,要发布新内容的时候,先把内容写到客户端,而后就能够同步到服务器端了.
rsync -av --progress web/ 192.168.112.136::test1