1.介绍
Rsync(Remote synchronize) 是一个远程同步工具,通过LAN、WAN快速同步多台主机之前的文件。也可以同步本地硬盘不同目录。
特性:
1. 可以镜像保存整个目录树和文件系统
2. 可以保持源文件权限、时间、软硬链接
3. 无特殊权限即可安装
4. 使用增量同步算法,文件传输效率高,同步时间快
5. 可以使用rcp、ssh方式验证传输
6. 支持匿名传输,方便网站镜像
7. 传输数据加密,保证数据安全性
缺点:
1. 因为增量更新方式,更新前需要检查项目所有文件,所以项目很大会很耗时。
2. 不能实时监测,同步数据。
2.安装配置
1. 安装
yum install rsync -y
2. 配置
[root@backup ~]# cat /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
3. 初始环境配置:
1. 创建rsync用户(rsync程序需要rsync这个用户来运行)
[root@backup ~]# groupadd rsync
[root@backup ~]# useradd -M -s /sbin/nologin rsync -g rsync
[root@backup ~]# id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
2. 虚拟用户 /etc/rsync.passwd username:password
[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
3. 创建一个/backup目录
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
4. 启动
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
5. 检测是否启动
[root@backup ~]# netstat -lntp | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 8616/rsync
3.基本使用
rsync 命令基本格式为:
1:本地使用:
rsync [OPTION…] SRC… [DEST]
2:通过远程 Shell 使用:
PULL: rsync [OPTION…] [USER@]HOST:SRC… [DEST]
PUSH: rsync [OPTION…] SRC… [USER@]HOST:DEST
3:访问 rsync 服务器:
PULL: rsync [OPTION…] [USER@]HOST::SRC… [DEST]
PUSH: rsync [OPTION…] SRC… [USER@]HOST::DEST
PULL: rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC… [DEST]
PUSH: rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST
注:
SRC: 是要复制的源位置
DEST: 是复制目标位置
若本地登录用户与远程主机上的用户一致,可以省略 USER@
使用远程shell 同步时,主机名与资源之间使用单个冒号“:”作为分隔符
使用 rsync服务器同步时,主机名与资源之间使用两个冒号“::”作为分隔符
当访问 rsync 服务器时也可以使用 rsync:// URL
PULL:复制是指从远程主机复制文件到本地主机(下载) PUSH:复制是指从本地主机复制文件到远程主机(上传) 当进行“PULL”复制时,若指定一个SRC 且省略 DEST,则只列出资源而不进行复制
4.参数
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-D #保持设备文件信息
-P #显示同步的过程及传输时的进度等信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输
--delete #让目标目录和源目录数据保持一致,源有什么,目标就有什么(需要源目录和目标目录路径一致)
5.实例:update.sh(本地文件使用SSH验证方式同步到服务器,第一次列出更新的文件,确认更新后,同步文件到服务器)
#!/bin/bash
read -p "是否确定更新? Y|N|YES|NO: " choice
case ${choice} in
[yY][eE][sS]|[yY] )
#检查更新的文件
rsync -acvne 'ssh -i /Users/mini/.ssh/id_rsa' /data/test/ root@120.xx.xx.xx:/data/test
read -p "是否确定更新? Y|N|YES|NO: " choice
case ${choice} in
[yY][eE][sS]|[yY] )
echo -e "\033[31;1m开始更新\033[0m"
#更新
rsync -ave 'ssh -i /Users/mini/.ssh/id_rsa' /data/test/ root@120.xx.xx.xx:/data/test
echo -e "\033[31;1m更新完成\033[0m";;
* )
echo -e "\033[31;1m取消更新\033[0m";;
esac
;;
[nN][oO]|[nN] )
echo -e "\033[31;1m取消更新033[0m"
;;
* )
echo -e "\033[31;1m请输入有效字符\033[0m"
;;
esac
注:
/Users/mini/.ssh/id_rsa:本地SSH KEY公钥(服务器需要添加该公钥)
/data/test/:本地文件目录路径
120.xx.xx.xx:/data/test:目标服务器IP + 目标目录路径