编程 rsync+inotify-tools liunx文件实时同步数据

2024-11-18 18:43:43 +0800 CST views 486

rsync+inotify-tools 实时同步数据

rsync 是 Linux 系统下的一个强大数据镜像备份工具,它可以在本地或远程系统之间同步文件和目录。该工具支持增量备份,速度快,占用资源少,操作简单,广泛应用于数据备份和同步场景中。

rsync 的特点

  • 速度快,占用资源少:支持增量同步,传输速度快。
  • 多种传输方式:可以通过 scpssh 等方式传输文件,也可以通过直接的 socket 连接。
  • 支持特殊文件类型:支持拷贝特殊文件,如链接、设备文件等。
  • 灵活的文件过滤:可以排除指定的文件或目录。
  • 保留文件属性:同步时可以保持原来文件或目录的属性(权限、时间、软硬链接等)。

安装 rsync

可以通过多种方式安装 rsync,如源码安装或使用包管理工具安装。本文选择使用 yum 安装:

dnf install rsync -y

rsync 常用命令

以下是一些常用的 rsync 命令示例:

rsync -avz 本地目录A 本地目录B    # 同步整个目录A到目录B
rsync -avz 本地目录/A/ 本地目录B   # 只同步目录A下的数据到目录B

常用选项说明

  • --delete:删除目标目录下多余的文件。
  • -v:显示详细的操作信息。
  • -z:传输过程中启用压缩。
  • -a:递归同步,保持文件属性。

本地文件同步示例

  1. 新建两个文件夹,在其中一个文件夹内复制多个文件后执行同步。

    mkdir /lr
    mkdir /lr2
    rsync -avz /lr/ /lr1    # 只同步 lr 文件夹内的文件到 lr1 文件夹内
    
  2. 修改 ping.yml 文件的内容,再次执行同步命令。

    rsync -avz /lr/ /lr1
    

    可以看到,只同步了有修改的文件。

远程文件同步

使用 rsync 命令可以轻松实现远程主机之间的文件同步:

rsync -avz /root/ root@192.168.10.210:/host1

由于配置了 SSH 免密认证,上述命令可以不需要输入密码。

实时数据同步

rsync 配合 inotify-tools 实现实时数据同步。inotify-tools 是由 Red Hat 开发的 Linux 文件系统监控工具,能够高效监控文件系统的变化。

配置同步主机之间的免密登录

首先,在主机之间配置 SSH 免密登录:

ssh-keygen
ssh-copy-id root@192.168.10.210

安装 inotify-tools

  1. 解压源码包:

    tar -zxvf inotify-tools-3.13.tar.gz
    
  2. 安装 GCC 依赖:

    dnf install gcc* -y
    
  3. 编译安装:

    ./configure --prefix=/usr/local/inotify && make && make install
    
  4. 创建软链接:

    ln -s /usr/local/inotify/bin/inotifywait /usr/sbin/
    ln -s /usr/local/inotify/bin/inotifywatch /usr/sbin/
    

inotify 常用选项

  • -m:持续监控。
  • -r:递归监控。
  • -q:减少屏幕输出信息。
  • -e:指定监控的事件类型(如 modifymovecreatedeleteattrib 等)。

编写实时监控脚本

编写以下脚本,实现实时同步监控:

#!/bin/bash
while true
do
    inotifywait -rq -e modify,create,delete /lr/
    rsync -avz --delete /lr/ root@192.168.10.210:/host1
done

当被监控的目录内新增、修改或删除文件时,该脚本将触发监控,并实时同步到远程主机目录。

测试同步

向被监控的文件夹内复制新文件,此时将触发监控,自动同步文件到远程主机目录。登录远程主机查看目录文件,验证同步结果。

以上是 rsync 结合 inotify-tools 实现实时同步数据的完整流程及示例脚本,希望对你有所帮助!

复制全文 生成海报 数据同步 备份工具 Linux系统

推荐文章

Elasticsearch 文档操作
2024-11-18 12:36:01 +0800 CST
mendeley2 一个Python管理文献的库
2024-11-19 02:56:20 +0800 CST
MySQL设置和开启慢查询
2024-11-19 03:09:43 +0800 CST
Vue中的表单处理有哪几种方式?
2024-11-18 01:32:42 +0800 CST
Vue3中如何进行错误处理?
2024-11-18 05:17:47 +0800 CST
CSS 实现金额数字滚动效果
2024-11-19 09:17:15 +0800 CST
linux设置开机自启动
2024-11-17 05:09:12 +0800 CST
markdown语法
2024-11-18 18:38:43 +0800 CST
MySQL 主从同步一致性详解
2024-11-19 02:49:19 +0800 CST
一些高质量的Mac软件资源网站
2024-11-19 08:16:01 +0800 CST
一个数字时钟的HTML
2024-11-19 07:46:53 +0800 CST
Nginx 反向代理 Redis 服务
2024-11-19 09:41:21 +0800 CST
2025,重新认识 HTML!
2025-02-07 14:40:00 +0800 CST
Golang 中你应该知道的 noCopy 策略
2024-11-19 05:40:53 +0800 CST
Elasticsearch 条件查询
2024-11-19 06:50:24 +0800 CST
php客服服务管理系统
2024-11-19 06:48:35 +0800 CST
Golang Sync.Once 使用与原理
2024-11-17 03:53:42 +0800 CST
Python Invoke:强大的自动化任务库
2024-11-18 14:05:40 +0800 CST
使用 Vue3 和 Axios 实现 CRUD 操作
2024-11-19 01:57:50 +0800 CST
程序员茄子在线接单