数据备份系列:Rsync 备份实战记录(二)

news2024/11/27 18:29:42

一、Rsync + Cron 场景使用

        在对数据备份要求实时性不高的情况下,可优先考虑该场景,选择一个合适的时间,对数据进行定时远程增量同步。

        在《数据备份系列:Rsync 备份详解(一)》中我们已经对服务搭建以及远程传输有了了解,接下来就是结合之前的内容进行扩展。

1.1 服务端准备工作

#删除之前测试的数据,在服务端创建两个文件夹,用于接收 linux 和 windows 客户端同步过来的数据
[root@rsync162 backup]# mkdir from_linux_client
[root@rsync162 backup]# mkdir from_windows_client 
[root@rsync162 backup]# ll
总用量 0
drwxr-xr-x. 2 root root 6 4月  24 09:53 from_linux_client
drwxr-xr-x. 2 root root 6 4月  24 09:53 from_windows_client

1.2 windows 客户端配置

(1)在 windows 客户端目录下新建一个 logs 目录,用于传输测试

#进程传输测试
C:\Users\Administrator>C:\soft\cwRsync_5.4.1_x86_Free\rsync.exe -avzp --password-file=/cygdrive/c/soft/cwRsync_5.4.1_x86_Free/passwd.txt --port=9999 /cygdrive/c/soft/cwRsync_5.4.1_x86_Free/logs test@192.168.0.162::proname/from_windows_client

#或者输入
C:\Users\Administrator>C:\soft\cwRsync_5.4.1_x86_Free\rsync.exe -avzp --password-file=C:\soft\cwRsync_5.4.1_x86_Free\passwd.txt --port=9999 /cygdrive/c/soft/cwRsync_5.4.1_x86_Free/logs test@192.168.0.162::proname/from_windows_client

(2)创建执行脚本 

#新建一个文件,重名名为 rsync.bat 编辑内容并保存:
@echo off
C:\soft\cwRsync_5.4.1_x86_Free\rsync.exe -avzp --password-file=/cygdrive/c/soft/cwRsync_5.4.1_x86_Free/passwd.txt --port=9999 /cygdrive/c/soft/cwRsync_5.4.1_x86_Free/logs test@192.168.0.162::proname/from_windows_client

(3)双击测试脚本

#服务端查看接收到的数据
[root@rsync162 from_windows_client]# pwd
/backup/from_windows_client
[root@rsync162 from_windows_client]# ll
总用量 0
drwx------. 2 root 401 106 4月  23 16:06 logs
[root@rsync162 from_windows_client]# ll logs/
总用量 23684
-rwx------. 1 root 401      284 3月  20 17:29 cc.txt
-rwx------. 1 root 401  3328826 4月  13 17:09 cwRsync_5.4.1_XiaZaiBa.zip
-rwx------. 1 root 401 20913856 3月  20 15:52 windows.zip.gz
-rwx------. 1 root 401      286 4月   3 13:10 新建文本文档.txt

(4)创建定时任务

 

 

 1.2 Linux 客户端配置

(1)和 windows 一样新建一个 logs 目录,用于传输测试

#先进行手动测试(手动测试没有问题)
[root@rsync164 ~]# rsync -avz --port 9999 --password-file /etc/rsync.pass /root/logs  test@192.168.0.162::proname/from_linux_client
sending incremental file list
logs/
logs/csp/
logs/csp/command-center.log.2022-05-10.0
logs/csp/command-center.log.2022-05-10.0.1
logs/csp/command-center.log.2022-05-10.0.2
logs/csp/command-center.log.2022-05-11.0
logs/csp/command-center.log.2022-05-11.0.1
logs/csp/command-center.log.2022-05-11.0.1.lck
logs/csp/command-center.log.2022-05-11.0.2
logs/csp/command-center.log.2022-05-11.0.2.lck
logs/csp/command-center.log.2022-05-11.0.3
logs/csp/command-center.log.2022-05-11.0.3.lck
logs/csp/command-center.log.2022-05-11.0.4
logs/csp/command-center.log.2022-05-11.0.lck
logs/csp/command-center.log.2022-05-12.0
logs/csp/command-center.log.2022-05-12.0.lck
logs/csp/command-center.log.2022-05-13.0
logs/csp/command-center.log.2022-05-16.0
logs/csp/command-center.log.2022-05-16.0.lck
logs/csp/command-center.log.2022-05-17.0
logs/csp/command-center.log.2022-05-17.0.lck
logs/csp/command-center.log.2022-05-18.0
logs/csp/command-center.log.2022-05-18.0.lck
logs/csp/command-center.log.2022-05-20.0
logs/csp/command-center.log.2022-05-20.0.lck
logs/csp/command-center.log.2022-05-23.0
logs/csp/command-center.log.2022-05-23.0.lck
......

(2)创建执行脚本

[root@rsync164 ~]# vi rsync.sh
#!/bin/bash
/usr/bin/rsync -avz --port 9999 --password-file /etc/rsync.pass /root/logs  test@192.168.0.162::proname/from_linux_client

(3)授权并测试脚本

#删除服务端数据,授予脚本执行权限
[root@rsync164 ~]# chmod 755 rsync.sh 
#测试执行(过程没有问题)
[root@rsync164 ~]# ./rsync.sh 
sending incremental file list
logs/
logs/csp/
logs/csp/command-center.log.2022-05-10.0
logs/csp/command-center.log.2022-05-10.0.1
logs/csp/command-center.log.2022-05-10.0.2
logs/csp/command-center.log.2022-05-11.0
logs/csp/command-center.log.2022-05-11.0.1
logs/csp/command-center.log.2022-05-11.0.1.lck
logs/csp/command-center.log.2022-05-11.0.2
logs/csp/command-center.log.2022-05-11.0.2.lck
logs/csp/command-center.log.2022-05-11.0.3
logs/csp/command-center.log.2022-05-11.0.3.lck
logs/csp/command-center.log.2022-05-11.0.4
logs/csp/command-center.log.2022-05-11.0.lck
logs/csp/command-center.log.2022-05-12.0
logs/csp/command-center.log.2022-05-12.0.lck
logs/csp/command-center.log.2022-05-13.0
logs/csp/command-center.log.2022-05-16.0
logs/csp/command-center.log.2022-05-16.0.lck
logs/csp/command-center.log.2022-05-17.0
logs/csp/command-center.log.2022-05-17.0.lck
logs/csp/command-center.log.2022-05-18.0
logs/csp/command-center.log.2022-05-18.0.lck
logs/csp/command-center.log.2022-05-20.0
logs/csp/command-center.log.2022-05-20.0.lck
logs/csp/command-center.log.2022-05-23.0
logs/csp/command-center.log.2022-05-23.0.lck
logs/csp/command-center.log.2022-05-25.0
......

#在服务端查看已经传输的文件
[root@rsync162 from_linux_client]# ll
总用量 0
drwxr-xr-x. 5 root root 48 5月  11 2022 logs
[root@rsync162 from_linux_client]# pwd
/backup/from_linux_client
[root@rsync162 from_linux_client]# ll
总用量 0
drwxr-xr-x. 5 root root 48 5月  11 2022 logs
[root@rsync162 from_linux_client]# ll logs/
总用量 20
drwxr-xr-x. 2 root root 16384 1月  28 09:22 csp
drwxr-xr-x. 2 root root    42 5月  10 2022 nacos
drwxr-xr-x. 2 root root    94 5月  12 2022 tecsun-job

(4)创建定时任务

#每台凌晨1点进行数据同步
[root@rsync164 ~]# crontab -e
* 1 * * * /root/rsync.sh

        到此 Rsync + cron 实验完成,过程中会遇到定时任务执行没反应的问题,特别的 windows 下的定时任务,一个是要做好单独运行测试,一个是要点击定时任务运行测试,如果都没有问题就可以了

二、Rsync + Inotify 场景使用

2.1 关于 Inotify

2.1.1 什么是 Inotify

        Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。需要注意的是,使用 Inotify 的系统内核要不低于 2.6.13。

       特定需求下我们是需要对文件数据进行实时增量同步的,而实时同步的优点在于:一旦同步源出现变化,则立即进行同步,无变化则不执行。

        在 Rsync 中,数据同步要么客户端向服务端推送文件,要么客户端从服务端下载文件,这里通过 Inotify 实现远程实时同步,就是用第一种方式。

2.1.2 Inotify 的辅助工具

  • inotifywait: 用于持续监控,实时输出结果
  • innotifywatch: 用于短期监控,任务完成后再出结果

2.2 Windows 客户端 Rsync 结合 Inotify 进行实时增量同步

        前提:服务端搭建请参考《数据备份系列:Rsync 备份详解(一)》

2.2.1 Windows 下 Inotify 的安装

        说明:windows下没有找到现成的 inotify 软件或程序可用,只能自己进行编译,然后结合前面的 cwrsync 进行使用,而要编译 inotify,需要先安装 Cygwin(作用是:Cygwin就是在Windows中增加了一个中间层——兼容POSIX的模拟层,并在此基础上构建了大量Linux-like的软件工具)

具体可参考知乎说明:Cygwin系列

(1)安装 Cygwin 过程

a.下载链接:官网下载

 b.双击安装

注意:Cygwin 对部分 windows 已经弃用,如经典的 Windows Server 2008,本次实验使用的是 windows 10 系统。

步骤:下一页》从互联网安装》选择安装根目录》选择软件包目录》使用系统代理设置》选择可用下载站点》选择安装软件包

 c.点开all》点开Devel》选择make版本》下一页执行安装》等待完成安装》完成安装》最后在系统的环境变量path中添加变量环境,默认安装的话是 C:\cygwin64\bin

(如果要安装其他的软件,重新运行安装软件进行选择即可)

 d.下载:inotify-win-master.zip 文件并解压(下载地址:GitHub下载)

e.进入解压目录进行编译(前提是系统要安装 .NET Framework 执行完会生成 inotifywait.exe 执行文件)

C:\soft\cwRsync_5.4.1_x86_Free\inotify-win-master>C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:inotifywait.exe src\*.cs

C:\soft\cwRsync_5.4.1_x86_Free\inotify-win-master>inotifywait.exe
Usage: inotifywait [options] path [...]

Options:
-r/--recursive:  Recursively watch all files and subdirectories inside path
-m/--monitor:    Keep running until killed (e.g. via Ctrl+C)
-q/--quiet:      Do not output information about actions
-e/--event list: Which events (create, modify, delete, move) to watch, comma-separated. Default: all
--format format: Format string for output.
--exclude:       Do not process any events whose filename matches the specified regex
--excludei:      Ditto, case-insensitive

Formats:
%e             : Event name
%f             : File name
%w             : Path name
%T             : Current date and time

 

2.3 Linux 客户端 Rsync 结合 Inotify 进行实时增量同步

2.3.1 Linux 下 Inotify 的安装

[root@rsync164 ~]# yum install -y inotify-tools

2.3.2 Linux 下 rsync+inotify 脚本操作

(1)inotify 将监控事件结果通过脚本来执行 while 循环内的 rsync 同步请求操作

[root@rsync164 ~]# vi rsync_inotify.sh 
#/bin/bash
#rsync服务器
server=192.168.0.162
#传输用户
user=test
#密码文件
passwd=/etc/rsync.pass
#同步源文件(监控文件)
src=/opt/logs
#同步目标目录
dst=from_linux_client
#进行数据同步(提醒:生产环境中 --delete 参数要慎用)
rsync -azrtopg --delete --port 9999 --password-file $passwd $src $user@$server::proname/$dst
#监测 create,move,delete,modify 事件
/usr/bin/inotifywait -mrq -e create,move,delete,modify  $src | while read files;do
   rsync -azrtopg --delete --port 9999 --password-file $passwd $src $user@$server::proname/$dst
done

(2)客户端执行脚本测试

[root@rsync164 ~]# ll /opt/logs/
total 12
-rw-r--r-- 1 root root 1231 May  8 17:57 1.log
-rw-r--r-- 1 root root   21 May  8 17:58 2.log
-rw-r--r-- 1 root root   46 May  8 18:02 3.log
[root@rsync164 ~]# ./rsync_inotify.sh
#出现如下信息,说明密码错了,注意自己使用的用户和密码
[root@rsync164 ~]# ./rsync_inotify.sh  
@ERROR: auth failed on module proname
rsync error: error starting client-server protocol (code 5) at main.c(1656) [sender=3.1.2]

(3)服务端查看接收文件信息

[root@rsync162 ~]# ll /backup/from_linux_client/
总用量 0
[root@rsync162 ~]# ll /backup/from_linux_client/
总用量 0
drwxr-xr-x. 2 root root 63 5月   8 2023 logs
[root@rsync162 ~]# ll /backup/from_linux_client/logs/
总用量 12
-rw-r--r--. 1 root root 1231 5月   8 2023 1.log
-rw-r--r--. 1 root root   21 5月   8 2023 2.log
-rw-r--r--. 1 root root   46 5月   8 2023 3.log

(4)客户端对监控的目录做变化,对比服务端接收情况

#a.客户端新增4.log文件
[root@rsync164 logs]# ll
total 16
-rw-r--r-- 1 root root 1231 May  8 17:57 1.log
-rw-r--r-- 1 root root   21 May  8 17:58 2.log
-rw-r--r-- 1 root root   46 May  8 18:02 3.log
-rw-r--r-- 1 root root   10 May  8 18:14 4.log
#服务端文件变化,可以看到服务端也新增了4.log文件
[root@rsync162 ~]# ll /backup/from_linux_client/logs/
总用量 16
-rw-r--r--. 1 root root 1231 5月   8 2023 1.log
-rw-r--r--. 1 root root   21 5月   8 2023 2.log
-rw-r--r--. 1 root root   46 5月   8 2023 3.log
-rw-r--r--. 1 root root   10 5月   8 2023 4.log

#b.客户端修改3.log内容(如新增)
[root@rsync164 logs]# ll
total 16
-rw-r--r-- 1 root root 1231 May  8 17:57 1.log
-rw-r--r-- 1 root root   21 May  8 17:58 2.log
-rw-r--r-- 1 root root  129 May  8 18:29 3.log
-rw-r--r-- 1 root root   10 May  8 18:14 4.log
#服务端文件变化,可以看到3.log文件大小也变了
[root@rsync162 ~]# ll /backup/from_linux_client/logs/
总用量 16
-rw-r--r--. 1 root root 1231 5月   8 2023 1.log
-rw-r--r--. 1 root root   21 5月   8 2023 2.log
-rw-r--r--. 1 root root  129 5月   8 2023 3.log
-rw-r--r--. 1 root root   10 5月   8 2023 4.log

#c.客户端删除2.log文件
[root@rsync164 logs]# rm 2.log 
rm: remove regular file ‘2.log’? y
#服务端查看文件变化,可以看到2.log也没了(--delete参数起的作用)
[root@rsync162 ~]# ll /backup/from_linux_client/logs/
总用量 12
-rw-r--r--. 1 root root 1231 5月   8 2023 1.log
-rw-r--r--. 1 root root  129 5月   8 2023 3.log
-rw-r--r--. 1 root root   10 5月   8 2023 4.log

(5)后台运行持续监控脚本

[root@rsync164 ~]# ./rsync_inotify.sh &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAD-DAS模型

DAD-DAS模型 文章目录 DAD-DAS模型[toc]1 产品服务:需求方程2 实际利率:费雪方程3 通货膨胀:菲利普斯方程4 预期通货膨胀:适应性预期5 货币政策规则:泰勒方程6 动态总供给-总需求方程(DAS-DAD)7 总供给冲击模拟 1 产品服务:需求方…

【JavaEE初阶】文件操作——IO

摄影分享~ 文章目录 文件文件路径(Path) 文件的类型Java中操作文件File概述 文件内容的读写——数据流字节流InputStream概述OutputStream 概述字符流FileInputStream 概述利用 Scanner 进行字符读取 实例练习 文件 文件:File这个概念&…

PostSQL内存管理之内存上下文

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:14 文档用途 了解pg内存分配 详细信息 1.MemoryContex机制 内存上下文是pg相关的内存控制结构,树形结构组织下的内存上下文能在频繁的…

SNMPc软件的下载和安装教程,计算机网络管理,网络工程师

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &am…

vue 改变数据后,数据变化页面不刷新

文章目录 导文文章重点方法一:使用this.$forceUpdate()强制刷新方法二:Vue.set(object, key, value)方法三:this.$nextTick方法四:$set方法 导文 在vue项目中,会遇到修改完数据,但是视图却没有更新的情况 v…

让开发者成为创新主体 | 阿里云云原生4月动态

作者:云原生内容小组 云原生月度动态 ✦ 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 本栏目每月更新。 01 趋势热点 &…

vue - 实现登录后用户无操作后自动退出登录功能,当用户鼠标不动、键盘不动、无窗口滚动时自动清除登录状态(可自定义删减条件,详细示例源码一键复制开箱即用)

需求 很多教程都是无效而且有bug。。很难用索性自己搞了最健壮的解决方案。 在vue项目中,实现自动检测用户没有【移动鼠标】【操作键盘】【窗口滚动】时,自动清除登录信息强制退出登录下线,支持自定义触发时间(比如无操作10分钟就执行),自定义条件(比如只监听用户鼠标是…

匿名对象以及临时空间

目录 大纲 1.何为匿名对象 2.产生匿名对象的四种情况: 1)给初始化对象时 2)以值的方式给函数传参; 3)类型转换; 4)函数返回时; 3.编译器优化 I.在同一行代码的优化 II.在函…

电脑关机很慢怎么办?这5个方法很有用!

案例:电脑关机很慢怎么办? 【我的电脑才买来不久,现在每次关机都很慢,有时甚至一直在转圈圈无法关机,怎么处理这种情况呢?】 如果使用电脑时间长了,我们可能会发现电脑的各项性能都会有所下降…

Vue3(5)插槽Slots

目录 一、插槽内容与出口 二、渲染作用域 三、默认内容 四、具名插槽 五、作用域插槽 六、具名作用域插槽 一、插槽内容与出口 在之前的博文中,我们已经了解到组件能够接收任意类型的JS值作为props,但组件要如何接收模板内容呢?在某些…

图片堆叠、多重聚焦的几种办法

当拍摄的物品较小,景深较深时,相机的焦点只能放在较近或者较远的一处,图片的整个画面就不能保证完全清晰,多重聚焦的原理其实就是拼合,在画幅的不同处拍摄聚焦图片,将各个聚焦的内容拼合在一起,…

杂记 2023.5.11

目录 come across(as).. 与异性对话经验和理论、策略 单词记忆 机器学习 come across(as).. 这个用法在口语里超级高频,表示「给人.印象,让人觉得..」,s后面可跟名词、形容词、 being形容词。 我们再来看几个例子: ◆He comes ac…

【Leetcode -455.分发饼干 -459.重复的字符串】

Leetcode Leetcode -455.分发饼干Leetcode - 459.重复的字符串 Leetcode -455.分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩…

多语言的APP外包开发流程

很多创业的人希望把APP做成多国家使用的模式,尤其是一些小游戏开发,很多小游戏玩法全世界都是一样的,这样开发一次就可以在全球推广。在开发这种类型软件的过程中需要注意哪些呢,今天和大家分享这方面的知识。北京木奇移动技术有限…

C语言入门篇——字符串,内存函数

目录 1、字符串函数 1.1求字符串长度 1.1.1strlen函数 1.2长度不受限制的字符串函数 1.2.1strcpy函数 1.2.2strcat函数 1.2.3strcmp函数 1.3长度受限制的字符串函数介绍 1.3.1strncpy函数 1.3.2strncat函数 1.3.3strncmp函数 1.4字符串查找 1.4.1strstr函数 1.4.…

JavaScript实现输入年龄来判断年龄阶段是青年/中年/老年人的代码

以下为实现输入年龄来判断年龄阶段是青年/中年/老年人的程序代码和运行截图 目录 前言 一、实现输入年龄来判断年龄阶段是青年/中年/老年人 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找…

open3d 裁剪点云

目录 1. crop_point_cloud 2. crop 3. crop_mesh 1. crop_point_cloud 关键函数 chair vol.crop_point_cloud(pcd) # vol: SelectionPolygonVolume import open3d as o3dif __name__ "__main__":# 1. read pcdprint("Load a ply point cloud, crop it…

哪些蓝牙耳机戴久不疼?长时间佩戴不疼的蓝牙耳机推荐

现在的真无线耳机已经成为了人们的标配之一了,各个厂家也紧随其后,生产出了多种无线耳机,不少人的选购蓝牙耳机一般都是对音质、佩戴和连接,但通常人们佩戴蓝牙耳机都是在半天左右,小编专门整理了一期舒适度高的耳机&a…

从 0~1 创建 Vue2 项目

前言 从0开始搭建Vue2项目;介绍项目目录结构;为了项目方便需要添加的配置。创建 Vue2 项目共有两种方式: 手动选择;选择默认模式。 给孩子点点关注吧!😭 一、环境准备 1.1 安装包管理工具 1.1.1 安装 …

使用CV-CUDA提高基于计算机视觉的任务吞吐量

使用CV-CUDA提高基于计算机视觉的任务吞吐量 涉及基于 AI 的计算机视觉的实时云规模应用程序正在迅速增长。 用例包括图像理解、内容创建、内容审核、映射、推荐系统和视频会议。 然而,由于对处理复杂性的需求增加,这些工作负载的计算成本也在增长。 从…