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




