Linux rsync ssh方式数据备份

1.关于rsync

什么是rsync

Rsync 是一个开源的快速备份工具,是Linux和UNIX操作系统默认安装的组件之一,可在不同主机间镜像同步整个目录,并支持增量备份文件传输,保持链接和权限,采用优化的同步算法,传输前执行压缩,适用于异地备份,镜像服务器等应用

rsync命令及参数说明

命令

|------------------------------------------|-------------------------------------------------|
| rsync命令 | 说明 |
| rsync OPTION SRC DEST | 本地目录同步,不加'user@host' 默认指的是root |
| rsync OPTION SRC USER@HOST:DEST | 从本地目录同步数据到远程目录。(以ssh方式登录远程主机,可用密码也可用密钥) |
| rsync OPTION USER@HOST:SRC DEST | 从远程目录同步数据到本地目录。(以ssh方式登录远程主机,可用密码也可用密钥) |
| rsync OPTION USER@HOST::SRC DEST | 从远程目录同步数据到本地目录,'::'表示验证方式不同(通过rsync daemon方式登录) |
| rsync OPTION SRC USER@HOST::DEST | 从本地目录同步数据到远程目录,'::'表示验证方式不同(通过rsync daemon方式登录) |

OPTION表示参数选项;USER表示远程服务器的登录用户名;HOST表示远程服务器的IP或者域名;SRC表示需要同步的文件的源路径;DEST表示文件同步的目标路径

参数
参数选项 说明
-a 归档模式,保留文件的权限、属性等信息,组合选项等于-rlptgoD
-A 保留 ACL 属性信息
-r 递归模式,包含目录及子目录中的所有文件
-v 显示同步过程的详细信息
-l 保留软链结
-L 向对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DEST
-p 保留文件的权限标记
-o 保留文件的属主标记(仅超级用户使用)
-g 保留文件的属组标记(仅超级用户使用)
-D 保留设备文件及其他特殊文件
-t 保持文件时间信息
--delete 删除目标位置有而原始位置没有的文件
--exclude=PATTERN 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
--progress 同步的过程中显示同步过程的状态,如统计同步的文件数量、同步文件传输的速度。
-u 把DST中比SRC还新的文件排除掉,不会覆盖
-z 在传输文件时进行压缩
-H 保留硬连接文件
--checksum 根据校验和(而不是文件大小、修改时间)来决定是否跳过文件
命令示例
常用命令 说明
rsync -a test/ test_backup/ 将test目录内容复制到test_backup目录,目录名后面一定要加斜杠,'-a'选项等同于'-rlptgoD'
rsync -av --no-l test/ test_backup/ 将test目录内容复制到test_backup目录,不复制软连接文件,'-l'表示只复制软连接文件,但软连接文件指向的目标文件却不会复制
rsync -avL test/ test_backup/ 将test目录内容复制到test_backup目录,复制SRC中软连接文件所指向的目标文件到DEST目录
rsync -av --delete test/ test_backup/ 将test目录内容复制到test_backup目录,并将DEST中有而SRC中没有的文件删除
rsync -av --exclude="*.txt" test/ test_backup/ 将test目录内容(除了"*.txt"文件)复制到test_backup目录
rsync -avL test/ root@192.168.10.24:/test_backup/ 将test目录内容复制到以root账号登陆的192.168.10.24远程主机的/test_backup/目录
rsync -avL root@192.168.10.24:/test/text.txt /test_download/ 以root账号登陆的192.168.10.24远程主机并把/test/目录下的text.txt文件复制到本地test_download目录下

2.定时备份

rsync安装

在源服务器(需要备份日志的服务器)和目标服务器(存储备份日志的服务器)安装rsync

执行命令 rpm -qa | grep "rsync" 检查是否安装rsync

如果未安装,执行命令 yum install rsync

ssh免密登录配置

在源服务器(要备份日志的服务器),执行命令 ls -l ~/.ssh 检查是否已生成ssh密钥对

如果未生成,在源服务器上执行命令 ssh-keygen -t rsa 生成ssh密钥对

生成后,将公钥复制到目标服务器(存储备份日志的服务器)~/.ssh/authorized_keys的文件中,执行命令 ssh-copy-id 用户名@目标服务器IP或者域名 (注:替换用户名@目标服务器IP为实际的目标服务器的用户名和IP地址)

目标服务器 执行命令 cat ~/.ssh/authorized_keys 查看源服务器生成的ssh公钥内容

编写rsync sh脚本命令

在源服务器上,编写一个rsync命令来同步日志文件。例如,如果你想要同步/var/log/目录到目标服务器的/backup/logs/目录,可以使用以下命令:

rsync -avz --delete /var/log/ 用户名@目标服务器IP:/backup/logs/

backup_logs.sh脚本内容:

bash 复制代码
#!/bin/bash

# 要备份的日志目录(例如 /var/log)
LOG_DIR="/var/log"
# 要备份的服务器的IP或域名
HOST="192.168.10.19"
# 目标服务器的IP或域名
TARGET_HOST="192.168.10.24"
# 目标服务器的用户名
TRAGET_USER="root"
# 获取当前日期并格式化为YYYY-MM-DD格式
CURRENT_DATE=$(date +%Y-%m-%d)
# 目标服务器的日志备份文件目录
LOG_TARGET_DIR="/backup/logs/$HOST/$CURRENT_DATE"

# 创建目标日志备份目录(如果不存在)
ssh $TRAGET_USER@$TARGET_HOST "mkdir -p $LOG_TARGET_DIR"

# 备份当前服务器的日志文件到目标服务器
rsync -avz --delete $LOG_DIR $TRAGET_USER@$TARGET_HOST:$LOG_TARGET_DIR
 

corn实现定时备份

在源服务器上,使用crontab来设置定时任务

安装cronie

执行命令 rpm -qa | grep "cronie" 检查是否安装cronie

如果未安装,执行命令 yum install cronie 安装

执行命令 sudo systemctl start crond 启动crond

执行命令 sudo systemctl enable crond 开机自启
定时任务命令规则:

第一个星号(分钟):0-59之间的数字,代表分钟。

第二个星号(小时):0-23之间的数字,代表小时。

第三个星号(日):1-31之间的数字,代表一个月中的哪一天。

第四个星号(月):1-12之间的数字,代表月份。

第五个星号(星期几):0-7之间的数字,其中0和7都代表星期日,1代表星期一

定时备份实现

通过crontab文件执行sh脚本文件实现定时备份

执行命令 chmod +x /home/backuplog/backup_logs.sh 给备份日志的sh设置权限(注:脚本路径可自定义)

执行命令 crontab -e 打开当前用户的crontab文件

然后添加一行(每天下午4四点执行 backup_logs.sh):0 16 * * * /home/backuplog/backup_logs.sh

然后按Esc键,输入:wq 后 按Enter键 保存配置
通过crontab文件写入命令实现定时备份

执行命令 crontab -e 打开当前用户的crontab文件

添加一行来计划你的备份任务。例如,每天凌晨1点执行备份:

0 1 * * * /usr/bin/rsync -avz --delete /var/log/ 目标服务器用户名@目标服务器IP:/backup/logs/ >> /var/log/rsync_backup.log 2>&1

这行命令会在每天的1点执行备份,并将输出重定向到/var/log/rsync_backup.log文件中。你可以根据需要调整时间或命令。

3.实时备份

关于rsync和ssh的配置不做详述了,参见 "2.定时备份"

关于inotify-tools

inotify-tools 是一套用于Linux内核的inotify子系统的用户空间工具,它允许用户监视文件系统的变化,比如文件被创建、删除、修改等。这对于开发需要监控文件变化的应用程序非常有用,例如自动备份工具、同步工具等

inotify-tools命令

**基本用法:**inotifywait options <path>

选项说明:

-m 或 --monitor:持续监控。

-r 或 --recursive:递归监控目录。

-e 或 --event <event_list>:指定要监听的事件类型,如create, delete, modify等

示例:

监控当前目录及其子目录中的所有文件和目录的创建、删除和修改事件

inotifywait -m -r -e create -e delete -e modify .

inotify-tools安装

执行命令 rpm -qa | grep "inotify-tools" 检查是否安装inotify-tools

如果未安装,执行命令 yum install inotify-tools -y 安装inotify-tools

实时备份实现

数据实时备份sh脚本(这里以服务器配置数据为例)

bash 复制代码
#!/bin/bash

# 要实时备份的配置文件目录(例如 /etc)
CONFIG_DIR="/etc"
# 要备份的服务器的IP或域名
HOST="192.168.10.19"
# 目标服务器的IP或域名
TARGET_HOST="192.168.10.24"
# 目标服务器的用户名
TRAGET_USER="root"
# 获取当前日期并格式化为YYYYMMDDHHMMSS
CURRENT_DATE=$(date +"%Y%m%d%H%M%S")
# 目标服务器的配置实时备份文件目录
CONFIG_TARGET_DIR="/backup/realtime/configs/$HOST/$CURRENT_DATE"

# 创建目标配置备份目录(如果不存在)
ssh $TRAGET_USER@$TARGET_HOST "mkdir -p $CONFIG_TARGET_DIR"

# 监控指定目录下的所有子目录中的新增(create)、修改(modify)和删除(delete)事件。-m 表示持续监控,-r 表示递归监控所有子目录,-e表示监控的事件,--format '%w%f' 用于格式化输出为完整路径
inotifywait -m -r -e modify,create,delete --format '%w%f' $CONFIG_DIR | while read path action file; do
# 使用 rsync 将文件同步到目标目录。-a 表示归档模式,保留链接、权限、时间戳等,-v 表示详细模式,--delete 表示删除目标目录中源目录已删除的文件
rsync -avz --delete $CONFIG_DIR $TRAGET_USER@$TARGET_HOST:$CONFIG_TARGET_DIR;
#echo "path:$path"
done

执行命令 chmod +x /home/backuplog/backup_configs.sh 给配置实时备份的sh设置权限(注:脚本路径可自定义)

执行命令 sh /home/backuplog/backup_configs.sh 运行脚本

大家还可以通过corn或者service实现实时备份,感兴趣的小伙伴儿可以研究下

相关推荐
A小辣椒10 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒14 小时前
TShark:基础知识
linux
AlfredZhao16 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式