Centos7 rsync远程(定时+实时)同步备份(手动安装)

  本教程详细介绍了如何在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. 同步测试

客户端创建目录及文件夹、删除文件
已经被同步到服务端