Rsync异地备份的使用方式
Rsync数据同步
目录
Rsync数据同步
1.软件安装
2.本地同步
3.远程同步
4.crontab+rsync定时同步
5.inotify+rsync实时同步
与传统的cp、scp、tar等备份方式不同,它可实现增量同步,即只同步发生改变的的数据,因此传输、备份效率更高。
使用场景:
· 借助cron定时任务+Rsync做定时备份同步到备份服务器。
· 也可以Rsync+inotify实现实时同步(但消耗资源较大)
环境:
角色 | 操作系 | IP |
---|---|---|
备份服务器 | Rocky Linux 9.5 | 10.1.1.5 |
数据服务器 | Ubuntu 22.04.5 LTS | 10.1.1.3 |
1.软件安装
查询命令是由哪个软件包提供的
[root@localhost ~]# dnf provides rsync
上次元数据过期检查:23:31:19 前,执行于 2025年03月10日 星期一 14时50分54秒。
rsync-3.2.3-20.el9.x86_64 : A program for synchronizing files over a network
仓库 :baseos
匹配来源:
提供 : rsync = 3.2.3-20.el9rsync-3.2.3-20.el9_5.1.x86_64 : A program for synchronizing files over a network
仓库 :baseos
匹配来源:
提供 : rsync = 3.2.3-20.el9_5.1
安装它:
[root@localhost ~]# dnf -y install rsync-3.2.3-20.el9.x86_64
如果是Ubuntu好像是默认自带的,如果没有应该是用sudo apt-get install rsync命令来安装。
2.本地同步
语法:
同步目录:rsync 选项 本地目录A 本地目录B/
#即同步文件夹A到目录B下面。
同步文件: rsync 选项 本地目录A/ 本地目录B/
#即同步本地目录A下的所有文件夹和文件到本地目录B下面。
常用的选项:
选项 | 作用 |
---|---|
-n | 测试同步过程,不做实际修改,应该是拿来看是需要同步数据大小的。 |
--delete | 删除目标路径下多余的文件。 |
-v | 显示详细操作信息。 |
-z | 传输过程中使用压缩/解压缩。 |
-a | 递归同步,同时保留文件属性。 |
就记住 rsync -avz 源路径 目标路径
就可以。
注意:因为它同步会同步文件属性,注意填写路径时特别注意,不然不小心会改文件属性。
3.远程同步
与scp命令一样的,语法格式为:
rsync -avz 同步路径 UserName@IP:/路径
例:guojie@guojie:~$ rsync -avz /home/guojie/testA root@10.1.1.5:/root/
注意:
需要两边都安装上rsync
4.crontab+rsync定时同步
被同步的服务器上做免密登录:
# 生成密码
guojie@guojie:~$ ssh-keygen -t rsa# 把密钥拷贝到备份服务器上
guojie@guojie:~$ ssh-copy-id root@10.1.1.5# 测试是否能免密登录
guojie@guojie:~$ ssh root@10.1.1.5
Last login: Tue Mar 11 13:39:57 2025 from 10.1.1.254
[root@localhost ~]#
添加定时任务:
# 查找命令所在路径
guojie@guojie:~$ whereis rsync
rsync: /usr/bin/rsync /usr/share/rsync /usr/share/man/man1/rsync.1.gz# 测试同步命令是否正常
guojie@guojie:~$ /usr/bin/rsync -avz /home/guojie/testA root@10.1.1.5:/root/
sending incremental file list
testA/
testA/1.txt
testA/root@10.1.1.5/
testA/root@10.1.1.5/1.txtsent 242 bytes received 66 bytes 205.33 bytes/sec
total size is 0 speedup is 0.00
把命令写入定时任务(这里是每天0点执行,把当前主机/home/guojie/testA的文件同步到目标主机的/root下面):
guojie@guojie:~$ crontab -e
0 0 * * * /usr/bin/rsync -avz /home/guojie/testA root@10.1.1.5:/root/ >> /var/log/rsync.log 2>&1
给它新建日志文件,这里我用了普通用户,建议大家还是用root用户吧,好像不太方便:
guojie@guojie:~$ sudo touch /var/log/rsync.log
guojie@guojie:~$ sudo chown guojie.guojie rsync.log
由于同步间隔较长,不好验证同步是否成功,你可以先把定时任务改成一分钟一次,这里可以看见任务执行日志均正常:
guojie@guojie:~$ crontab -l
* * * * * /usr/bin/rsync -avz /home/guojie/testA root@10.1.1.5:/root/ >> /var/log/rsync.log 2>&1guojie@guojie:~$ cat /var/log/rsync.log
sending incremental file list
testA/
testA/1.txt
testA/2.txt
testA/3.txt
testA/4.txtsent 334 bytes received 96 bytes 860.00 bytes/sec
total size is 17 speedup is 0.04
sending incremental file list
testA/sent 158 bytes received 20 bytes 118.67 bytes/sec
total size is 17 speedup is 0.10
sending incremental file list
testA/
testA/5.txt
testA/6.txtsent 280 bytes received 58 bytes 676.00 bytes/sec
total size is 17 speedup is 0.05
sending incremental file listsent 201 bytes received 17 bytes 436.00 bytes/sec
total size is 17 speedup is 0.08
sending incremental file list
5.inotify+rsync实时同步
inotify是一款开源的文件监控软件,它可以监控文件的变化并联动rsync达到实时同步的效果。
inotify官网:inotify-tools - Browse Files at SourceForge.net
下载并上传软件到被同步服务器:
guojie@guojie:~$ ls -l
total 388
-rw-rw-r-- 1 guojie guojie 389473 Mar 11 08:17 inotify-tools-3.13.tar.gz
drwxrwxr-x 2 guojie guojie 4096 Mar 11 08:05 testA# 解压
guojie@guojie:~$ tar -zxvf inotify-tools-3.13.tar.gz
guojie@guojie:~$ cd inotify-tools-3.13/# 编译安装
guojie@guojie:~/inotify-tools-3.13$ ./configure # 这里没有安装gcc编译环境会报错,先安装
guojie@guojie:~/inotify-tools-3.13$ sudo apt-get install -y gcc #如果是Redhat系列是yum -y install gcc-c++
guojie@guojie:~/inotify-tools-3.13$ ./configure #再来一次,没问题
guojie@guojie:~/inotify-tools-3.13$ sudo make && make install # 这里又提示没有make命令,还要安装它
guojie@guojie:~/inotify-tools-3.13$ sudo apt-get install -y make #安装make
guojie@guojie:~/inotify-tools-3.13$ sudo make && make install # 再来,到这里就安装成功了,安装到了/usr/local/inotify
guojie@guojie:~$ ls /usr/local/inotify/
bin include lib share
它的监控命令就是inotifywait:
使用方法,可以写个死循环脚本一直监听文件
guojie@guojie:~$ cat rsync.sh
#!/bin/bash
while inotifywait -rq -e modify,create,delete,attrib /home/guojie/testA/
dorsync -avz /home/guojie/testA/ root@10.1.1.5:/root/testA/ >> /var/log/rsync.log 2>&1
done
inotifywait参数详解:
- -r :递归监控,包括子目录。
- -q:静默模式,减少输出信息。
- -e:指定监控模式,包括文件内容被修改(modify)、文件被创建(create)、文件被删除(delete)、文件元数据被修改(attrib)
再执行它:
guojie@guojie:~$ sh rsync.sh & # 后台执行
测试OKK,正常。删除操作并不会同步,如果删除也要同步rsync命令就要添加--delete参数。