本教程详细介绍了如何在CentOS 7环境下配置Rsync服务,实现从MySQL服务器 到备份服务器的可靠数据同步。方案包含:
- 基础手动同步配置
- 定时自动备份方案
- 实时文件同步方案(使用inotify+rsync)
- 详细的权限配置和安全设置
Rsync-Server (192.168.25.202)
MySQL-DB (192.168.25.208)
一、服务端配置 (192.168.25.202)
1. 安装rsync
yum -y install rsync
2. 配置文件 /etc/rsyncd.conf
cat > /etc/rsyncd.conf <<'EOF'
motd file = /etc/rsyncd.motd
transfer logging = yes
log file = /var/log/rsyncd.log
port = 873
uid = rsync
gid = rsync
use chroot = no
read only = no
max connections = 20
timeout = 300
fake super = yes
[www_backup]
comment = MySQL DB www backup
path = /opt/data_bak
ignore errors = yes
auth users = rsync
secrets file = /etc/rsyncd.secrets
hosts allow = 192.168.25.208
hosts deny = *
list = false
EOF
3. 创建用户及目录
useradd rsync -s /sbin/nologin -M
mkdir -p /opt/data_bak
chown rsync.rsync /opt/data_bak -R
chmod 750 /opt/data_bak
4. 创建提示信息文件
echo "Rsync Backup Server - 2023" > /etc/rsyncd.motd
5. 创建密码文件
echo "rsync:Backup@2023" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
6. 启动服务并设置开机自启
systemctl start rsyncd
systemctl enable rsyncd
7. 验证服务
netstat -tulnp | grep 873

二、客户端配置 (192.168.25.208)
1. 安装rsync
yum -y install rsync
2. 创建密码文件
echo "Backup@2023" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
三、同步方法
1. 手动同步命令
mkdir /var/www/
rsync -avz --delete --no-perms --no-group /var/www/ rsync@192.168.25.202::www_backup --password-file=/etc/rsyncd.secrets
2. 定时同步方案
创建同步脚本 /opt/rsync_backup.sh
cat > /opt/rsync_backup.sh <<'EOF'
#!/bin/bash
# 记录日志
LOG_FILE=/var/log/rsync_backup.log
echo "======= Backup started at $(date) =======" >> $LOG_FILE
# 执行同步
rsync -avz --delete /var/www/ rsync@192.168.25.202::www_backup --password-file=/etc/rsyncd.secrets >> $LOG_FILE 2>&1
# 记录结束时间
echo "======= Backup completed at $(date) =======" >> $LOG_FILE
EOF
给脚本执行权限:
chmod +x /opt/rsync_backup.sh
设置cron定时任务(每天凌晨2点执行):
(crontab -l 2>/dev/null; echo "0 2 * * * /opt/rsync_backup.sh") | crontab -
—————————————————————————
实时备份比较复杂,如果定时备份方案能满足,可以忽略实时同步方案!
————————————————————-
3. 实时同步方案(使用inotify+rsync)
客户端安装inotify-tools:
yum -y install inotify-tools
创建实时同步脚本
/opt/inotify_rsync.sh
cat > /opt/inotify_rsync.sh <<'EOF'
#!/bin/bash
# 监控目录
SRC_DIR="/var/www"
# 目标地址
DEST="rsync@192.168.25.202::www_backup"
# 密码文件
PASS_FILE="/etc/rsyncd.secrets"
# 日志文件
LOG_FILE="/var/log/inotify_rsync.log"
# 检查必要组件是否存在
if ! command -v inotifywait &> /dev/null; then
echo "ERROR: inotifywait not found. Please install inotify-tools." | tee -a ${LOG_FILE}
exit 1
fi
if ! command -v rsync &> /dev/null; then
echo "ERROR: rsync not found. Please install rsync." | tee -a ${LOG_FILE}
exit 1
fi
# 检查目录是否存在
if [ ! -d "${SRC_DIR}" ]; then
echo "ERROR: Source directory ${SRC_DIR} does not exist." | tee -a ${LOG_FILE}
exit 1
fi
# 启动inotify监控
/usr/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w%f %e' \
-e modify,delete,create,attrib,move ${SRC_DIR} | while read file
do
# 记录变更
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ${file} changed, start syncing..." >> ${LOG_FILE}
# 执行同步并添加错误处理
if ! rsync -avz --delete ${SRC_DIR}/ ${DEST} --password-file=${PASS_FILE} >> ${LOG_FILE} 2>&1; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: Sync failed for ${file}" >> ${LOG_FILE}
# 可以添加重试逻辑(可选)
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Retrying sync..." >> ${LOG_FILE}
sleep 5
if ! rsync -avz --delete ${SRC_DIR}/ ${DEST} --password-file=${PASS_FILE} >> ${LOG_FILE} 2>&1; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: Sync failed after retry" >> ${LOG_FILE}
fi
else
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Sync completed successfully" >> ${LOG_FILE}
fi
done
# 如果inotifywait意外退出
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: inotifywait process exited unexpectedly" >> ${LOG_FILE}
exit 1
EOF
给脚本执行权限:
chmod +x /opt/inotify_rsync.sh
4. 开机自启systemd服务
cat > /etc/systemd/system/inotify_rsync.service <<'EOF'
[Unit]
Description=Inotify Rsync Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/inotify_rsync.sh
Restart=always
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target
EOF
然后执行
systemctl daemon-reload
systemctl enable --now inotify_rsync.service
5. 同步测试
客户端创建目录及文件夹、删除文件

已经被同步到服务端

