CentOS Java应用备份与恢复策略
一 备份范围与RPO RTO设定
二 备份策略与工具选型
三 示例脚本与任务编排
#!/usr/bin/env bash
set -Eeuo pipefail
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F)
mkdir -p "$BACKUP_DIR"
mysqldump -u"$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers --hex-blob \
--databases "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
gzip "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
# 保留最近30天
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete
0 2 * * * /usr/local/bin/backup_mysql.sh >> /var/log/backup_mysql.log 2>&1
/opt/app/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0644 app app
postrotate
systemctl reload app 2>/dev/null || true
endscript
}
logrotate -d /etc/logrotate.d/java # 语法/模拟
logrotate -f /etc/logrotate.d/java # 强制执行一次
#!/usr/bin/env bash
set -Eeuo pipefail
SRC="/opt/app"
DST="backup@backup.example.com:/data/backup/app"
LOG="/var/log/backup_rsync.log"
rsync -avz --delete --password-file=/etc/rsync.pass "$SRC/" "$DST/" >> "$LOG" 2>&1
定时任务(crontab):每日 03:000 3 * * * /usr/local/bin/backup_rsync.sh
四 恢复流程与演练
# 1) 全量
gunzip < /backup/mysql/app_2026-01-06.sql.gz | mysql -u"$DB_USER" -p"$DB_PASS"
# 2) 时间点(示例:至 2026-01-06 14:00:00)
mysqlbinlog --start-datetime="2026-01-06 00:00:00" \
--stop-datetime="2026-01-06 14:00:00" /var/lib/mysql/mysql-bin.00000[1-9]* \
| mysql -u"$DB_USER" -p"$DB_PASS"
systemctl stop app
tar -xzf /backup/app_2026-01-06.tar.gz -C /opt/app
systemctl start app
curl -f http://localhost/health || { systemctl status app; exit 1; }
五 高可用与灾难恢复建议