前言
rsync(remote sync 远程同步)是 Linux 系统下常用的备份工具。rsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp)。
但不同于cp或scp的一点是,它不会覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。
安装rsync
# yum install -y rsync
rsync 常用的命令语法格式
-
rsync [option] source destination
-
rsync [option] source [user@]host:destination //默认是root
-
rsync [option] [user@]host:source destination //从远程目录同步数据到本地
-
rsync [option] [user@]host::source destination
-
rsync [option] source [user@]host::destination
rsync 常用选项
rsync是一个功能非常强大的工具,其命令也有很多功能特色选项。
rsync 使用
(1)本地备份/复制,如:将 /etc/passwd 文件拷贝到/tmp为1.txt
rsync -av /etc/passwd /tmp/1.txt
-
a
参数中包含很多选项,后面详细介绍; -
v
参数表示可视化过程,如:查看到发送了多少字节、多少字节每秒、文件一共有多大,速度是多少等;
(2)远程备份/复制
格式:用户名@IP:path
,如:root@192.168.112.136:/root
举例:rsync -av /etc/passwd root@192.168.112.136:/tmp/1.txt
注意⚠️:远程主机也必须安装rsync!
(3)假如对方的机器端口不是22
这里有两种方法:
-
-e "ssh -p 22"
,其中 “ssh -p 22” 是一个命令,可以直接连接对方机器; -
--rsh=ssh -p 22
也可以指定端口
rsync 服务器部署
这种方式可以理解为:在远程主机上建立一个 rsync 服务器,在服务器上配置好 rsync 的各种应用,然后将本机作为 rsync 的一个客户端连接远程 rsync 服务器,具体步骤如下:
(1)编辑配置文件:/etc/rsyncd.conf
cat >>/etc/rsyncd.conf <<EOF
port = 873
log file = /var/log/rsync.log
pid file = /var/run/rsyncd.pid
address = 192.168.246.180
[test]
path = /tmp/rsync
use chroot = true
max connections = 4
read only = no
list = true
uid = root
gid = root
#auth users = test
#secrets file = /etc/rsyncd.passwd
hosts allow = 192.168.246.176
(2)启动 rsync 服务
# rsync --daemon
(3)建立试验目录,并给予 777 权限
# mkdir /tmp/rsync
# chmod 777 /tmp/rsync
(4)检测端口是否通畅
在另外一台服务器上执行:[root@localhost ~]# telnet 192.168.246.180 873
说明⚠️:
-
关闭系统
selinux
; -
关闭系统 firewalld
systemctl stop firewalld
(5)在 root@localhost 这个客户机上给 rsync 服务器写文件
# rsync -avP /root/test.py 192.168.246.180::test/test.py
Password:
@ERROR: auth failed on module test
rsync error: error starting client-server protocol (code 5) at main.c(1516) [sender=3.0.9]
修改配置文件/etc/rsyncd.conf:
#auth users = test
#secrets file = /etc/rsyncd.passwd
再次传输,此时不需要密码:
(6)查看传输结果
# ll /tmp/rsync/
/etc/rsyncd.conf配置文件详解
use chroot = true|false 当有软连接,需要给其定义为false
(1)在服务端,建立一个软连接
ln -s /etc/passwd 12.txt
,具体步骤:
(2)修改配置文件/etc/rsyncd.conf
use chroot = ture 更改为 false
(3)在客户端上,开始同步test模块
[root@localhost test]# rsync -avLP 192.168.246.180::test/ /tmp/test/
说明:客户机上 test 目录可以不用事先创建~
(4)查看文件 12.txt 文件内容
[root@localhost test]# cat /tmp/test/12.txt |head
max_connections:指定最大的连接数,默认为0
max connections = 4
我们配置文件中设置为4
read only = ture|false
如果为 true,则不能上传到该模块指定的路径下
read only = no
如果为true,则不能给服务端写数据
list:该模块是否被列出,设定为 true则列出,false则隐藏(--port 8730 指定端口)
配置文件为:list=true
更改配置文件为:list=false
uid/gid:指定传输文件时以哪个用户/组身份传输
配置文件为:uid = root gid = root
auth users:指定传输时要使用的用户名
secrets file:指定密码文件
(1)修改服务端 /etc/rsyncd.conf 配置文件,更改如下:
auth users = test
secrets file = /etc/rsyncd.passwd
(2)在rsync服务器上新建 rsyncd.passwd 文件。并且设置600权限;
[root@mysql-nginx ~]# vim /etc/rsyncd.passwd
test:wtf //书写格式,用户名:密码
[root@mysql-nginx ~]# chmod 600 !$
(3)在客户端,同步test目录:此时不需要输入密码
# rsync -avP /tmp/test --port=873 test@192.168.246.180::test/
(4)在客户端,设置密码文件
# vim /etc/rsync_pass.txt //在文本里面只输入 密码
wtf
# chmod 600 !$
chmod 600 /etc/rsync_pass.txt
# rsync -avP /tmp/test --port=873 --password-file=/etc/rsync_pass.txt test@192.168.246.180::test/
# touch /tmp/test/3.txt //新建一个文件
# rsync -avP /tmp/test --port=873 --password-file=/etc/rsync_pass.txt test@192.168.246.180::test/
hosts allow = IP 定义哪个IP连接它
hosts allow = 192.168.246.172 1.1.1.1 192.168.236.89 192.168.246.0/24 //指定多个IP,也可以指定Ip段,用空格隔开