rsync是一款开源的免费的,可实现全量和增量的本地和远程数据镜像同步备份的优秀工具。
区别于传统的复制工具cp,scp只能全量的进行本地的或者远程的拷贝
而rsync既可以进行全量的,还可以进行增量
rsync还可以实现删除功能
rsync可以快速的同步备份数据,包括最后修改时间变化,主从变化甚至文件部分内容变化等…都可以实时同步
rsync的三种工作模式
1.本地数据传输模式
rsync本地传输模式的语法为:
rsync OPTION XXX... DEST... ##和cp的语法一样
其中OPTION表示要加的参数
XXX表示要拷贝的东西
DEST表示要拷贝的目的地
实例1.将hosts同步到/mnt下
[root@localhost mnt]# cp /etc/hosts /mnt
[root@localhost mnt]# rsync /etc/hosts /mnt/
##这两个命令完全相同
实例2.将/home同步到/mnt下
[root@localhost /]# cp -ap /home /mnt
[root@localhost mnt]# rsync -avz /home/ /mnt/
sending incremental file list
./
student/
student/.bash_history
student/.bash_logout
student/.bash_profile
student/.bashrc
......
sent 5568 bytes received 667 bytes 12470.00 bytes/sec
total size is 9282 speedup is 1.49
##这两个命令也相同
2.通过远程shell进行数据传输
通过远程shell(ssh rcp)进行传输,分为两种方式:
推送push:rsync [OPTION...] SRC [user@]ip:DEST
拉取pull:rsync [opTION...] [user@]ip:SRC DEST
实例1.将server上~/123传送到desktop上
[root@localhost mnt]# rsync -avz -e 'ssh ' root@172.25.254.203:/root/123 /mnt
root@172.25.254.203's password:
receiving incremental file list
123
sent 30 bytes received 69 bytes 22.00 bytes/sec
total size is 0 speedup is 0.00
实例2.将刚刚得到的123返还回去
[root@localhost mnt]# rsync -avz 123 -e 'ssh' root@172.25.254.203:~/
root@172.25.254.203's password:
sending incremental file list
123
sent 64 bytes received 31 bytes 27.14 bytes/sec
total size is 0 speedup is 0.00
3.通过守护进程的方式进行远程传输
与shell方式差不多,不过采用的是虚拟用户,因用的较少,在此不总结。
- 参数解析
-v, –verbose 详细模式输出。
-z, –compress 对备份的文件在传输时进行压缩处理。
-q, –quiet 精简输出模式。
-r, –recursive 对子目录以递归模式处理。
-t, –times 保持文件时间信息。
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-e, –rsh=command 指定使用rsh、ssh方式进行数据同步。
-D, –devices 保持设备文件信息。
-l, –links 保留软链结。
特别说明:
rsync -avz /opt /mnt ##opt后面没有斜线,将opt及内容都同步过来
rsync -avz /opt/ /mnt ##opt后面有斜线,只同步opt里的内容而不包括opt
以守护进程的方式传输数据
1.首先准备三台机器
服务端:172.25.62.1(server3)
进程端:172.25.254.103(server1)
172.25.254.203(server2)
安装rsync服务之后
配置服务端的配置文件
[root@server3 /]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = rsync
gid = rsync
#use chroot = yes
max connections = 4 ##最大连接数
pid file = /var/run/rsyncd.pid ##进程号的文件,进程启动之后会将进程号放里面
lock file = /var/run/rsync.lock ##锁文件,服务停止时会用到
log file = /var/log/rsyncd.log ##日志文件
# exclude = lost+found/
# transfer logging = yes
timeout = 900 ##超时时间
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[oldboy] ##模块
path = /oldboy/ ##路径 rysnc服务端的路径。客户端下载或上传的路径
ignore errors ##忽略错误
read only = false ##只读为假,就可以上传文件
list = false ##列表为假,可以列表文件
hosts allow = 172.25.254.103/32 ##允许谁来连
hosts deny = 0.0.0.0/32 ##禁止谁来连
auth users = rsync_backup ##虚拟用户
secrets file = /etc/rsync.password ##存放上边虚拟用户的密码文件
配置完文件之后,创建配置文件中所需要的目录及文件:
以下操作全是用超户完成:
mkdir -p /oldboy
useradd rsync -s /sbin/nologin -M ##建立用户rsync,不可登陆,并且没有家目录
chown -R rsync.rsync /oldboy/ ##给oldboy目录一个权限
echo "rsync_backup:oldboy" >>/etc/rsync.password
##按照配置文件的设定设定密码
chmod 600 /etc/rsync.password
##给秘密文件进行权限设置
rsync --daemon ##启动该服务
ss -antlp |grep 873
##查看服务是否启动成功
客户端:
[root@server2 www]# rsync -avz html_2017-10-29.tar.gz rsync://rsync_backup@172.25.254.1:/oldboy --password-file=/etc/rsync.password
sending incremental file list
html_2017-10-29.tar.gz
sent 196 bytes received 27 bytes 446.00 bytes/sec
total size is 109 speedup is 0.49
##指定路径
[root@server2 www]# rsync -avz html_2017-10-29.tar.gz rsync_backup@172.25.254.1::oldboy --password-file=/etc/rsync.password
sending incremental file list
html_2017-10-29.tar.gz
sent 196 bytes received 27 bytes 446.00 bytes/sec
total size is 109 speedup is 0.49
##指定模块
拉取:
[root@server2 www]# rsync -avz rsync_backup@172.25.254.1::oldboy .Password:
receiving incremental file list
./
html_2017-10-29.tar.gz
sent 86 bytes received 303 bytes 111.14 bytes/sec
total size is 112 speedup is 0.29
##拉取模块(包含模块的所有东西)
[root@server2 www]# rsync -avz rsync://rsync_backup@172.25.254.1:/oldboy/html_2017-10-29.tar.gz .
Password:
receiving incremental file list
html_2017-10-29.tar.gz
sent 83 bytes received 286 bytes 105.43 bytes/sec
total size is 112 speedup is 0.30
##拉取指定的东西