1. Rsync基础介绍
Rsync是一款开源的,快速的,多功能的可实现全量及增量的本地或远程数据镜像同步备份的优秀工具。
Rsync适用于unix/linux/windows等多种操作系统平台。
Rsync主要可以实现增量同步。
Rsync在同步备份数据时,默认情况下,Rsync通过其独特的算法,可以根据大小修改时间,权限,属主等属性。
2. Rsync的特性
支持拷贝特殊文件如链接,设备等。
可以有排除指定文件或目录同步的功能。
可以做到保持原文件或目录的权限,时间,软硬链接,属主,组等所有属性均不改变。
可以实现增量同步。
可以使用rcp,rsh,ssh等方式来配合传输文件。
可以通过socket传输文件和数据。
支持匿名或认证(无需系统用户)的进程模式传输,可以实现方便安全的数据备份及镜像。
3. Rsync的工作方式
1. 主机本地之间的数据传输(类似于cp命令的功能)
2. 借助rcp,ssh等通道来传输数据(类似于scp命令的功能)
3. 以守护进程(socket)的方式来传输数据
4. Rsync的本地模式讲解
1. 在rsync-server服务器上安装rsync服务。
yum install rsync -y
2. 本地模式的语法:
rsync [选项] src dest
常用选项:
-v: 详细模式输出,传输时的进度等信息。
-z: 传输时进行压缩以提高效率。
-a: 以递归方式传输文件,并保持所有文件的属性。相当于Dlrtopg
-r: 以递归方式传输文件。
3. 范例
1. 如果源地址不带有/,复制的是目录本身和目录下的内容。
[root@rsync-server tmp]# rsync -avz /home/tools /tmp/
sending incremental file list
tools/
tools/a/
tools/a/a
tools/b/
tools/c/
sent 195 bytes received 55 bytes 500.00 bytes/sec
total size is 0 speedup is 0.00
[root@rsync-server tmp]# ll
总用量 8
-rw-r--r-- 1 root root 158 5月 27 07:04 hosts
-rwx------. 1 root root 663 5月 27 02:46 ks-script-qyfaOI
drwx------. 3 root root 16 5月 27 03:56 systemd-private-43ff61877bc542cdabd5672379dcd260-systemd-machined.service-tijnCq
drwxr-xr-x 5 root root 30 5月 27 07:10 tools
-rw-------. 1 root root 0 5月 27 02:41 yum.log
可以看到结果是:tools目录被复制过去了。
2. 如果源地址带有/,复制的是目录下的内容。
[root@rsync-server tmp]# rsync -avz /home/tools/ /tmp/
sending incremental file list
./
a/
a/a
b/
c/
sent 182 bytes received 54 bytes 472.00 bytes/sec
total size is 0 speedup is 0.00
[root@rsync-server tmp]# ll
总用量 8
drwxr-xr-x 2 root root 14 5月 27 07:11 a
drwxr-xr-x 2 root root 6 5月 27 07:10 b
drwxr-xr-x 2 root root 6 5月 27 07:10 c
-rw-r--r-- 1 root root 158 5月 27 07:04 hosts
-rwx------. 1 root root 663 5月 27 02:46 ks-script-qyfaOI
drwx------. 3 root root 16 5月 27 03:56 systemd-private-43ff61877bc542cdabd5672379dcd260-systemd-machined.service-tijnCq
-rw-------. 1 root root 0 5月 27 02:41 yum.log
可以看到a,b,c三个子目录复制到目标目录下,而不是tools目录。
3. 排除指定的目录文件。
rsync -avz --exclude a /home/tools/ /tmp/ 这样就把a目录排除了。
4. 排除多个指定的目录文件。
rsync -avz --exclude a --exclude b /home/tools/ /tmp/ 这样把a和b目录都排除了。
5. 排除某种类型的文件。
rsync -avz --exclude *.txt /home/tools/ /tmp/
rsync -avz --exclude *.txt --exclude *.syn /home/tools/ /tmp/
6. 两个复制任务,一个排除*.txt,一个不排除,会影响备份的文件吗?
rsync -avz --exclude *.txt /home/tools/ /tmp/
rsync -avz --include *.txt /home/tools/ /tmp/
5. Rsync的远程复制
1. 语法:
pull: rsync [选项] user@远程IP:/远程目录 本地目录
push: rsync [选项] 本地目录 user@远程IP:/远程目录
2. 范例:
1. 拉一个远程目录到本地
rsync -avz -e "ssh -p 22" root@192.168.0.200:/home/tools/{a..e} /tmp/
2. 推一个目录到远程IP
rsync -avz -e "ssh -p 22" {a..e} root@192.168.0.201:/tmp/
3. 配合ssh key结合使用。
6. Rsync以守护进程的方式传输数据
服务器端:
1. Rsync搭建在单独一台服务器上,然后其他服务器都通过rsync命令推送给Rsync服务器。
2. Rsync的配置文件/etc/rsyncd.conf。
配置内容如下:
uid = rsync
gid = rsync
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/run/rsyncd.log
exclude = lost+found/
timeout = 900
[backup]
path = /tmp/backup
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
3. 创建指定的账户rsync,useradd rsync -s /sbin/nologin -M
4. 启动rsync,rsync --daemon,做一个检查:lsof -i :873,然后加入开机自启动/etc/rc.local。
5. 创建备份的目录,mkdir -p /tmp/backup
6. 给备份的目录,属主和属组。chown rsync.rsync /tmp/backup
7. 创建一个文件,/etc/rsync.password,里面添加账户和密码。rsync_bakcup:oldboy。
客户端:
1. 创建文件/etc/rsync.password,添加内容,只需要密码即可。
权限600。
2. 先把要备份的文件打包,创建一个/backup目录,里面是要备份的数据目录和文件。
rsync -avz /backup/ rsync_backup@192.168.0.201::backup/ --password-file=/etc/rsync.password
rsync -avz /backup/ rsync://rsync_backup@192.168.0.201/backup/ --password-file=/etc/rsync.password
结果报错:rsync error: error starting client-server protocol (code 5) at main.c(1648) [Receiver=3.1.2]
通过查看/var/run/rsyncd.log日志文件,发现:我的/etc/rsync.password里面的账户写错了。
修改以后,重新执行上面的复制命令,结果又有报错。
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
解决方法:
rsync -avz --no-o --no-g /backup/ rsync_backup@192.168.0.201::backup/ --password-file=/etc/rsync.password
原因:因为源文件的属主和属组是root,而备份的时候使用的账户为rsync,当拷贝到rsyn-server服务器上以后,所有的文件的属主和属组都为rsync,所以要排除-o和-g。
7. Rsync服务umoshi故障及常见问题
1. 关于hosts allow与hosts deny保留一个即可。
7. Rsync整体排错思路
8. Rsync多个rsync模块备份
9. Rsync排除同步
1. 在客户端上进行排除同步。
rsync -avz --exclude={a,g} /backup/ rsync_backup@192.168.0.201::backup/ --password-file=/etc/rsync.password
rsync -avz --exclude={a..e} /backup/ rsync_backup@192.168.0.201::backup/ --password-file=/etc/rsync.password
rsync -avz --exclude=a --exclude=b /backup/ rsync_backup@192.168.0.201::backup/ --password-file=/etc/rsync.password
10. Rsync的限速和断点续传
11. Rsync的优点与缺点
1. 优点:增量备份,使用SSH加密传输。
2. 缺点:大量小文件同步的时候,相对时间较长,rsync进程可能会停止。
大文件要使用断点续传。
12. Rsync上机实战考试题
1. http://edu.51cto.com/course/3497.html
自己写
13. rsync实战
1. 将本地的某个目录拷贝到远程服务器的某个目录下
sudo rsync -avz -e "ssh -p 11984" /usr/local/mongodb zhangshaohua1510@192.168.1.231:/usr/local/a
报错:
[zhangshaohua1510@localhost conf]$ sudo rsync -avz -e "ssh -p 11984" /usr/local/mongodb zhangshaohua1510@192.168.1.231:/usr/local/a
zhangshaohua1510@192.168.1.231's password:
sending incremental file list
rsync: mkdir "/usr/local/a" failed: Permission denied (13)
rsync error: error in file IO (code 11) at main.c(576) [receiver=3.0.6]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]
解决方法:
在目标服务器上,执行: sudo chmod 777 /usr/local/a
再次执行命令成功。
2. 将本地的某个目录下的所有文件拷贝到远程服务器的某个目录下
sudo rsync -avz -e "ssh -p 11984" /usr/local/mongodb/ zhangshaohua1510@192.168.1.231:/usr/local/a
注意:源目录后面多了个/
3. 将本地的某个目录拷贝到远程服务器的某个目录下,排除子目录logs
sudo rsync -avz -e "ssh -p 11984" --exclude logs /usr/local/mongodb zhangshaohua1510@192.168.1.231:/usr/local/a
4. 将本地的某个目录拷贝到远程服务器的某个目录下,排除 log后缀的文件,但是logs子目录还是会拷贝的。
sudo rsync -avz -e "ssh -p 11984" --exclude *.log /usr/local/mongodb zhangshaohua1510@192.168.1.231:/usr/local/a
5. 排除多个子目录
sudo rsync -avz -e "ssh -p 11984" --exclude logs --exclude db /usr/local/mongodb zhangshaohua1510@192.168.1.231:/usr/local/a
一往无前虎山行,拨开云雾见光明