本文以生产可用为目标,对 Percona XtraBackup(物理备份)与 `mysqlpump`(逻辑备份)进行全面对比,给出可直接执行的备份与恢复命令,并明确版本兼容与一致性校验。
## 适用版本与兼容性
- MySQL 8.0;XtraBackup 8.0 仅支持 InnoDB(不支持 MyISAM)。
- XtraBackup 版本需与服务器主版本匹配(8.0.x 系列)。
## 物理备份:Percona XtraBackup(全量与增量)
1. 全量备份:
xtrabackup \
--backup \
--target-dir=/data/backup/base \
--user=backup --password='S@fePass!' \
--parallel=4 --compress
2. 增量备份(基于全量):
xtrabackup \
--backup \
--target-dir=/data/backup/inc1 \
--incremental-basedir=/data/backup/base \
--user=backup --password='S@fePass!' \
--parallel=4 --compress
3. 准备(应用日志):
xtrabackup --prepare --target-dir=/data/backup/base
4. 恢复(停止 MySQL 后):
systemctl stop mysqld
xtrabackup --copy-back --target-dir=/data/backup/base
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld
5. 校验:
-- 在恢复后比对关键表的行数或校验和:
SELECT COUNT(*) FROM important_table;
## 逻辑备份:mysqlpump(并行与筛选)
1. 并行全库导出:
mysqlpump \
--user=backup --password='S@fePass!' \
--exclude-databases=sys,performance_schema,information_schema \
--default-parallelism=8 \
--result-file=/data/backup/pump.sql
2. 恢复:
mysql --user=root --password='S@fePass!' < /data/backup/pump.sql
3. GTID 与复制一致性(逻辑备份用于迁移/复制):
mysqlpump --set-gtid-purged=ON ...
## 按时间点恢复(PITR):结合 binlog
1. 备份后保留二进制日志:
SHOW BINARY LOGS;
2. 重放指定时间段:
mysqlbinlog --start-datetime='2024-01-01 09:00:00' \
--stop-datetime='2024-01-01 10:00:00' \
/var/lib/mysql/binlog.000123 | \
mysql -u root -p
## 对比与选型建议
- XtraBackup:速度快、一致性强、适合大库与物理迁移;需要停机恢复或使用独立实例回滚。
- mysqlpump:可读性好、跨版本更灵活;适合结构迁移与特定库/表的筛选备份。
- 生产建议:定期全量 + 每日增量(XtraBackup),辅以 binlog 做 PITR;结构变更与小库迁移场景使用 `mysqlpump`。
## 验证清单(可执行)
- 备份完成后使用 `--prepare` 并校验关键表的行数;
- 对比 `SHOW CREATE TABLE` 与约束;
- 使用 `CHECK TABLE` 或应用级校验(如哈希对比);
- 进行一次演练恢复并记录耗时与步骤脚本。
## 注意事项
- XtraBackup 需要具备 `RELOAD`、`BACKUP_ADMIN` 等权限;生产中请使用受限账户与加密存储。
- 恢复前务必停止 MySQL 并确保数据目录为空,避免覆盖冲突。
- 对 GTID/复制场景,确保 `enforce_gtid_consistency=ON` 并在逻辑备份时使用 `--set-gtid-purged`。
## 相关阅读(热门)
- 《MySQL 索引设计与覆盖索引的可验证实践指南》
- 《MySQL 慢查询诊断与 EXPLAIN ANALYZE 实战指南》
- 《MySQL InnoDB 事务与锁的深度解析与最佳实践》
## 结语
备份恢复的关键在于“可重复演练”。选择与场景匹配的方案,建立脚本化的备份/恢复与校验清单,并与 binlog 结合做 PITR,才能在故障时把损失降到最低且过程可控。

发表评论 取消回复