冷备份必须停库,热备份全程在线;冷备份是文件系统级拷贝,需完全停止mysqld进程,停库为强制前提,不可遗漏任何文件如ib_logfile0或mysql.sock。

冷备份必须停库,热备份全程在线
冷备份本质是文件系统级拷贝,mysqld 进程必须完全停止;热备份则要求数据库持续提供服务,依赖 innodb 的事务日志(redo log)和工具如 Percona XtraBackup 实现一致性。停库不是“建议”,而是强制前提——哪怕只漏掉一个 ib_logfile0 或 mysql.sock所在目录未同步,恢复时大概率报错 Tablespace is missing for table 'xxx' 或直接启动失败。
- 冷备操作链:
systemctl stop mysqld→cp -a /var/lib/mysql /backup/mysql_$(date +%F)→chown -R mysql:mysql /backup/mysql_* - 热备典型命令:
xtrabackup --backup --target-dir=/backup/xtrabackup_$(date +%F) --user=root --password=xxx - 误判风险:用
mysqldump备份时加了--single-transaction,常被误认为“热备”,但它只是逻辑备份+快照读,对大表仍会锁元数据(FLUSH TABLES WITH READ LOCK),属于“温备”,不是真正热备
冷备快但只能整库还原,热备慢却支持时间点恢复
冷备恢复就是替换文件+改属主,5 分钟内可完成;热备恢复需两步:先 xtrabackup --prepare 合并日志,再 cp 回数据目录,耗时取决于备份大小和 I/O 性能。但热备真正的价值在于能结合 binlog 做时间点恢复(PITR)——比如删库后,用热备基线 + mysqlbinlog --start-datetime="2026-01-05 14:22:00" ... | mysql 精确回退到误操作前一秒。
- 冷备无法恢复单表:你不能只把
db1/t1.ibd拷回去就生效,InnoDB 表空间 ID 不匹配会直接拒绝加载 - 热备支持部分恢复:XtraBackup 可用
--export导出单表表空间,再用ALTER TABLE ... DISCARD/IMPORT TABLESPACE导入 - 陷阱:热备期间若
binlog被自动清理(expire_logs_days=7),PITR 就断档——必须确保备份周期 ≤ binlog 保留天数
冷备不依赖引擎,热备强依赖 InnoDB
MyISAM 表在冷备下直接拷 .MYD/.MYI 文件即可;但热备时,XtraBackup 对 MyISAM 仍需全局读锁(等同于温备),而 mysqldump 则根本无法保证一致性——因为 MyISAM 没有事务日志。所以如果你的库混用了 MyISAM(比如老 CMS 的 wp_options 表),热备方案必须额外处理或统一迁移到 innodb。
- 验证方法:
SELECT table_schema,table_name,engine FROM information_schema.tables WHERE table_schema NOT IN ('mysql','information_schema','performance_schema'); - 冷备兼容性优势:哪怕你用的是 YashanDB、TiDB 兼容层,只要物理文件结构一致,冷备文件也能直接 cp 过去(当然得适配权限和路径)
- 热备隐性成本:XtraBackup 备份时会显著增加磁盘 I/O 和 CPU,线上高峰期执行可能拖慢查询——建议配合
--throttle=100限速
生产环境别只选一种,冷热组合才是常态
纯冷备扛不住 7×24 业务,纯热备又怕工具链出问题(比如 XtraBackup 版本与 MySQL 不兼容导致 prepare 失败)。真实运维中常见组合是:每周一次冷备(从从库拉取,主库无感知)+ 每日热备(主库执行)+ 持续归档 binlog。这样既满足 RTO(冷备最快恢复)、又保障 RPO(热备+binlog 可控到秒级丢失)。
- 冷备兜底场景:热备失败后,立刻切从库为新主,再对其执行冷备——这是最稳的 fallback
- 必须做的动作:每次备份后,用
xtrabackup --check-privileges校验权限,再跑一次innobackupex --apply-log测试 prepare 是否成功(不实际恢复,只验证日志合并) - 最容易被跳过的坑:冷备恢复后忘记重置
auto.cnf中的server-uuid,会导致主从复制中断;热备恢复后没清空mysql-bin.index,可能导致 binlog 路径错乱


















