Fork me on GitHub

rsync使用详解

1.rsync本地模式及参数总结

本地拷贝,相当于cp
-e,使用通道协议;
-v,--verbose详细模式输出;
-z,--compress传输时进行压缩以提高传输效率;
-a,--archive归档模式,以递归方式传输文件,并保持所有文件属性,相当于-rtopgD
-r,--recursive对子目录以递归模式;
-o,--owner保持文件属主;
-p,--perms保持文件权限;
-g,--group包吃文件属组信息;
--exclude=PATTERN,指定排除不需要传输的文件模式;
--exclude-from=file
--bwlimit=RATE
--delete,让目标目录和源目录数据一致.

rsync -avz /etc/hosts* /mnt/
# /tmp1/是一个空目录,下面命令会导致清空/mnt目录
rsync -avz --delete /tmp1/ /mnt/
# 下面两条命令的执行结果是不一样的,带斜线是只拷贝目录中的文件,
# 不带斜线是将目录和文件一起拷贝到目标目录
rsync -avz  /tmp1/ /mnt/
rsync -avz  /tmp1 /mnt/

2.rsync实现不同主机拷贝数据

2.rsync实现不同主机拷贝数据
rsync -az /etc/hosts* -e 'ssh -p 22' root@10.0.0.31:/mnt
# 会出现解析慢的情况
Address 10.0.0.31 maps to localhost, but this does not map back to the address
 - POSSIBLE BREAK-IN ATTEMPT!
# 修改目标主机的ssh配置文件
vi /etc/ssh/sshd_config
GSSAPIAuthentication no
UseDNS no

3.服务器端、客户端的操作和配置

服务器端

vim /etc/rsyncd.conf
# uid是运行进程的用户,客户端通过验证后使用rsync用户访问共享目录,
# 默认是nobody,用默认也行,系统安装完之后,是存在这个用户的
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log

[backup]
path = /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

# auth users在man手册中有说明:
This usernames do not need to exists on the local system.

# 该文件中的用户名作用:验证客户端是否有资格登录服务器端
vi /etc/rsync.password
rsync_backup:oldboy

useradd -M -s /sbin/nologin rsync
mkdir /backup
ls -ld /backup
drwxr-xr-x 2 root root 4096 Nov 26 00:38 /backup
# 如果这个目录的权限不是rsync而是root,
# 那么客户端通过验证之后以rsync用户访问该目录就会没有权限
chown rsync.rsync /backup/  
drwxr-xr-x 2 rsync rsync 4096 Nov 26 00:38 /backup
chmod 600 /etc/rsync.password  # 必须修改权限
rsync --daemon
echo "/usr/bin/rsync --daemon" >> /etc/rc.local

客户端

客户端密码文件中只有密码

vi /etc/rsync.password
oldboy
chmod 600 /etc/rsync.password
如果没有缩小权限,那么还是会让你输入密码:
password file must not be other-accessible
continuing without password file
Password:

客户端的拉取(pull)和推送(push)

推送:
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
rsync -avz /backup/ rsync://rsync_backup@172.16.1.41/backup/ --password-file=/etc/rsync.password 
拉取:
rsync -avz rsync_backup@172.16.1.41::backup /backup/ --password-file=/etc/rsync.password
rsync -avz rsync://rsync_backup@172.16.1.41/backup/  /backup/ --password-file=/etc/rsync.password 
提示:上述的backup是模块名,不是路径

4.多模块配置

cp /etc/rsyncd.conf{,.bak}
mkdir -p /data/{nginx,mysql}
chown -R rsync.rsync /data/

vi /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
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

[web]
path = /data/nginx

[mysql]
path = /data/mysql

客户端命令:
rsync -avz /backup/ rsync_backup@172.16.1.41::web --password-file=/etc/rsync.password
rsync -avz /backup/ rsync_backup@172.16.1.41::mysql --password-file=/etc/rsync.password

5.排除及无差异同步

# 排除单个文件
rsync -avz --exclude=stu01 /backup/ rsync_backup@172.16.1.41::mysql --password-file=/etc/rsync.password
# 排除多个文件,一般用来排除日志
rsync -avz --exclude={stu01,stu02} /backup/ rsync_backup@172.16.1.41::mysql --password-file=/etc/rsync.password
touch {01..10}.log
rsync -avz --exclude=*.log /backup/ rsync_backup@172.16.1.41::mysql --password-file=/etc/rsync.password
# 如果文件名连续的话可以这样
rsync -avz --exclude={01..10}.log /backup/ rsync_backup@172.16.1.41::web --password-file=/etc/rsync.password
# 无差异同步,即:使用参数--delete
# 让服务器端和客户端保持一模一样,但实际情况是服务器端保存着远多于客户端的数据,所以此参数慎用.

优点:增量备份,利用通道模式可以ssh加密传输;
缺点:大量小文件同步时间可能较长,进程可能会停止,较大文件可能会中断.

 

参考博客-rsync搭建:https://www.cnblogs.com/wenxinphp/p/5800446.html

posted @ 2018-11-26 14:51  法外狂徒  阅读(924)  评论(0编辑  收藏  举报