MySQL在Ubuntu中的备份策略
一 策略总览与选型
二 常用备份策略与适用场景
| 策略 | 工具 | 备份类型 | 优点 | 局限 | 典型场景 |
|---|---|---|---|---|---|
| 逻辑全量 | mysqldump / mysqlpump | 全量 | 简单通用、跨平台/版本、可按库表恢复、易校验 | 体积大、导出/导入慢、锁定依赖配置 | 中小库、开发/测试、迁移 |
| 物理热备 | Percona XtraBackup | 全量/增量 | 热备不停机、增量快、恢复快、适合大库 | 仅限 InnoDB、需额外安装与学习成本 | 生产大库、严格 RPO/RTO |
| 二进制日志增量 | MySQL binlog | 增量 | 细粒度到时间点恢复、空间可控 | 需开启 binlog、恢复流程更复杂 | 精确回滚、审计与合规 |
| 文件系统快照 | LVM/ZFS | 全量(快照) | 几乎瞬时、对业务影响小 | 需同机房/同存储、需一致性处理 | 虚拟化/云盘场景的快速备份 |
| 远程/云存储 | rsync/scp + MinIO/S3 | 传输/归档 | 异地容灾、成本低、易集成 | 依赖网络与权限、非备份本体 | 备份落地与长期留存 |
三 推荐备份方案与频率
方案A 逻辑备份 + 日常增量(通用)
方案B 物理热备 + 增量(大库/严格RPO)
方案C 快照增强(配合A或B)
四 快速实施步骤示例
逻辑全量备份脚本(示例)
#!/usr/bin/env bash
BACKUP_DIR="/var/backups/mysql"
MYSQL_USER="backup"
MYSQL_PASS="YourStrongPass"
DATE=$(date +%F)
mkdir -p "$BACKUP_DIR"
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" --single-transaction --routines --triggers --default-character-set=utf8mb4 --all-databases \
| gzip > "$BACKUP_DIR/all_databases_$DATE.sql.gz"
# 可选:同步到远程
# rsync -avz "$BACKUP_DIR/" user@remote:/backup/mysql/
0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1
gunzip < /var/backups/mysql/all_databases_2025-11-14.sql.gz | mysql -u root -p
二进制日志增量备份(示例)
[mysqld]
log_bin=/var/log/mysql/mysql-bin
server_id=1
binlog_format=ROW
#!/usr/bin/env bash
BINLOG_DIR="/var/log/mysql"
BACKUP_DIR="/var/backups/mysql/binlog"
mkdir -p "$BACKUP_DIR"
mysqladmin --user=backup --password=YourStrongPass flush-logs
cp "$BINLOG_DIR"/mysql-bin.0* "$BACKUP_DIR/"
mysqlbinlog --start-datetime="2025-11-14 10:00:00" --stop-datetime="2025-11-14 10:30:00" \
/var/log/mysql/mysql-bin.00000X | mysql -u root -p
XtraBackup 物理增量(示例)
innobackupex --user=backup --password=YourStrongPass --no-timestamp /backup/mysql/full_20251114
innobackupex --user=backup --password=YourStrongPass --no-timestamp \
--incremental /backup/mysql/incr_20251115 \
--incremental-basedir=/backup/mysql/full_20251114
五 备份可靠性与运维要点