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实现实时备份,感兴趣的小伙伴儿可以研究下

相关推荐
ss2732 小时前
Java线程池全解:工作原理、参数调优
java·linux·python
fengyehongWorld2 小时前
Linux sudo命令
linux·运维·服务器
JiMoKuangXiangQu2 小时前
Linux 内存管理:页表管理简析
linux·mmu·内存管理·页表管理
WG_172 小时前
Linux:缓冲区_glibc封装
linux·运维·服务器
番知了2 小时前
Ubuntu 22.04 常用命令清单
linux·运维·ubuntu
旺仔Sec2 小时前
2026年河北省职业院校技能大赛“网络系统管理”(高职组)网络构建样题
运维·服务器·网络
FF-Studio3 小时前
Ubuntu 24.04 磁盘爆满“灵异“事件:Btrfs, Snapper 与删不掉的空间
linux·运维·人工智能·ubuntu
爱尔兰极光3 小时前
计算机网络--网络层
运维·服务器·计算机网络
Neolnfra3 小时前
Xshell SSH 连接故障排查
运维·服务器·网络·ssh·xshell·运程连接