物理备份恢复快但依赖环境严格匹配,因其跳过sql解析直接加载二进制页;逻辑备份恢复慢但可调,本质是重放sql语句,需逐条解析、校验约束、更新索引。

因为物理备份跳过了 SQL 解析和执行层,直接还原二进制数据页。
物理备份恢复不走 SQL 执行流程
逻辑备份恢复本质是重放 CREATE TABLE 和 INSERT 语句:MySQL 要逐条解析语法、校验约束、触发索引更新、写 redo log、刷 buffer pool——全是 CPU 和内存密集型操作。物理备份则把 ibd、ibdata1、ib_logfile* 这些已格式化的页文件原样拷过去,启动时 InnoDB 直接 mmap 加载,连 SQL 引擎都不经过。
常见卡点包括:
- 单线程导入(
mysql客户端默认串行执行) - 唯一索引逐行校验(每条
INSERT都查 B+ 树) - 外键约束回溯检查(涉及关联表扫描)
- buffer pool 预热延迟(刚启动时大量磁盘随机读)
物理备份的“快”有严格前提
快的前提是环境完全匹配,否则连启动都失败。典型报错如 InnoDB: Operating system error number 2 或 Table 'mysql.user' doesn't exist,往往不是磁盘问题,而是以下任一条件不满足:
-
xtrabackup --prepare没执行——备份集处于“未合并日志”状态,ibdata1和 redo 不一致 - 目标机
innodb_log_file_size与源实例不等——--prepare阶段直接中断 - MySQL 版本跨小版本不兼容(如 8.0.33 备份无法在 8.0.23 上启动)
- OS 架构 mismatch(x86_64 备份拷到 aarch64 机器上,
mysqld启动即 segfault)
逻辑备份恢复慢,但慢得“可调”
逻辑恢复速度不是固定值,而是受参数和工具链影响:
- 用
mysqlpump --default-parallelism=4可并行导入,提速明显 - 加
--skip-triggers --skip-extended-insert减少解析开销 - 导入前关掉唯一检查:
SET unique_checks=0;,完后再开 - 但这些优化治标不治本:哪怕并行 8 线程,仍要过 SQL 层,而物理备份根本没这层
真正容易被忽略的是:物理备份的“快”只体现在 restore 阶段;它的 prepare 阶段可能比逻辑导入还耗时,尤其大库 redo 日志多的时候。别只盯着 mysqld 启动时间,xtrabackup --prepare 的耗时必须计入 RTO。











