Rsync异地备份

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.el9

rsync-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.txt

sent 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>&1


guojie@guojie:~$ cat /var/log/rsync.log 
sending incremental file list
testA/
testA/1.txt
testA/2.txt
testA/3.txt
testA/4.txt

sent 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.txt

sent 280 bytes  received 58 bytes  676.00 bytes/sec
total size is 17  speedup is 0.05
sending incremental file list

sent 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

image-20250311162627354

下载并上传软件到被同步服务器:

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:

image-20250311165104026

使用方法,可以写个死循环脚本一直监听文件

guojie@guojie:~$ cat rsync.sh 
#!/bin/bash
while inotifywait -rq -e modify,create,delete,attrib /home/guojie/testA/
do
    rsync -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参数。

posted @ 2025-03-11 17:41  国杰响当当  阅读(59)  评论(0)    收藏  举报