物理备份是直接复制MySQL数据文件,逻辑备份是导出SQL语句;前者快但不可读、难跨版本、无法单表恢复,后者慢但可读可编辑、支持单表还原。
物理备份就是“抄文件”,逻辑备份就是“导SQL”
物理备份本质是直接复制 MySQL 的数据文件(如
、
、
、
),连同控制文件、日志一并拷走;逻辑备份则是让 MySQL server 执行查询,把表结构和数据转成
和
语句,存成纯文本 SQL 文件。
这意味着:物理备份快但笨重,逻辑备份慢但灵活。比如你用
,得到的是人类可读、可编辑、可删行、可改库名的文本;而用
(冷备)或
(热备),拿到的就是一堆二进制文件,不能直接打开看内容,也不能跨 MySQL 大版本恢复。
恢复时能不能“只还原一张表”?逻辑可以,物理基本不行
这是最常被低估的实操差异。逻辑备份支持细粒度还原:
参数只 dump 某几张表;物理备份则天然绑定整个实例或至少整个数据库目录——哪怕你只想恢复
表,也得先恢复整库,再从里面导出那张表(还得确保引擎是 InnoDB + 独立表空间,否则连单独拷
都会报错
)。
逻辑备份适合开发环境迁移、线上误删单表抢救、跨版本升级前验证
物理备份适合 TB 级生产库的分钟级 RTO(恢复时间目标),但必须搭配
或
等工具,裸
只适用于 MyISAM 冷备或测试机
MyISAM 表物理备份看似简单,但若没加
就直接
,极易产生索引损坏,恢复后
报错
热备能否真正“不锁库”?物理方案有门道,逻辑方案靠隔离级别
所谓“热备”,不是指完全无感知,而是尽量减少业务影响。逻辑备份(
)默认执行
,对 MyISAM 是全局写锁,对 InnoDB 则靠
实现 MVCC 快照——但注意:如果备份过程中有长事务未提交,
会卡在等待锁释放,导致备份 hang 住,业务写入堆积。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
物理热备(如
)更进一步:它一边拷数据文件,一边持续监听并备份
,最后做一次短暂 FTWRL 获取 binlog 位点。所以它的“热”是真热——InnoDB 表全程可读可写,只有最后几秒锁表。但代价是:必须用
,不能自己写脚本
数据目录,否则必然不一致。
是 InnoDB 安全前提,但不适用于混合引擎库
要求 MySQL 开启
,否则无法单独处理某张表
备份期间若发生 crash,逻辑备份可能只完成一半(SQL 文件截断),而物理备份即使中断,只要没覆盖原目录,仍可尝试
恢复
跨平台和版本兼容性,别想当然
逻辑备份生成的
文件,只要语法没废弃(比如 MySQL 8.0 去掉
字段),就能在 MariaDB 或低版本 MySQL 上执行;物理备份则严格受限于 MySQL 版本、架构(x86 vs ARM)、甚至文件系统(XFS vs ext4 对
行为不同)。常见翻车场景:
用 MySQL 5.7 的
直接替换到 8.0 实例,启动失败报错
在 CentOS 上用
备份,拿到 Ubuntu 上用
恢复,提示
备份时用了
,但恢复机器没装
,
直接报 command not found
真正上线前,务必在同环境做一次完整 restore 验证——尤其是物理备份,恢复失败往往发生在最不该出问题的时候。
ibdfrmbinlogredologCREATE TABLEINSERTmysqldump -u root -p testdb > backup.sqlcp -r /var/lib/mysql/testdb /backup/xtrabackup --backup --target-dir=/backup/mysql -u root -p testdb 或用 --tablesordersorders.ibdTablespace is missing for table 'testdb/orders'xtrabackupmysqlbackupcpFLUSH TABLES WITH READ LOCKcpSELECTIncorrect key file for tablemysqldumpFLUSH TABLES WITH READ LOCKSTART TRANSACTION WITH CONSISTENT SNAPSHOTmysqldumpxtrabackupredo logxtrabackuprsyncmysqldump --single-transactionxtrabackupinnodb_file_per_table--prepare.sqlpassworddirect IOibdata1InnoDB: Unsupported redo log formatxtrabackup 2.4xtrabackup 8.0Unsupported version of backup--compressqpressxtrabackup --decompress