mysql如何进行表空间传输恢复_mysql transport tablespace实战
根本原因是.ibd文件与内存表定义不匹配需同时满足用FLUSH TABLES...FOR EXPORT导出含元数据校验且目标表结构完全一致包括ROW_FORMAT、字符集、列序等。为什么 ALTER TABLE ... IMPORT TABLESPACE 总报错 “Tablespace is missing for table”根本原因不是文件丢了而是 MySQL 没法把 .ibd 文件和内存中的表定义对上号。它需要两个前提同时满足.ibd 文件必须是用 FLUSH TABLES ... FOR EXPORT 生成的带元数据校验且目标表必须先用 CREATE TABLE 建好、结构完全一致包括 ROW_FORMAT、KEY_BLOCK_SIZE、字符集、列顺序、隐藏字段等。常见错误现象ERROR 1808 (HY000): Schema mismatch (Table has ROW_FORMATCOMPACT, but the tablespace file has ROW_FORMATDynamic)ERROR 1812 (HY000): Tablespace is missing for table db.t其实是表定义没加载成功不是文件路径问题导入后查不到数据或 SELECT 报 ERROR 2013 (HY000): Lost connection实操建议源库导出前务必执行 FLUSH TABLES t FOR EXPORT完成后立刻 COPY t.ibd 和 t.cfg不能只拷 .ibd目标库建表语句必须用 SHOW CREATE TABLE 从源库原样复制不能手工重写——尤其注意 ENGINEInnoDB 后面有没有 ROW_FORMAT、STATS_PERSISTENT 等隐式参数导入前删掉目标表的 .ibd但保留 .frmMySQL 5.7或数据字典记录MySQL 8.0再执行 ALTER TABLE t DISCARD TABLESPACEMySQL 8.0 下 IMPORT TABLESPACE 失败.cfg 文件还用不用8.0 之后 InnoDB 不再依赖 .cfg 文件做校验但你仍得提供它——否则会报 ERROR 1812: Tablespace file not found。这不是 bug是设计行为MySQL 8.0 仍会读取 .cfg 中的 space_id 和 page_no 校验信息只是不再用它恢复列定义。使用场景跨实例迁移单表比如从测试库导出导入到生产库隔离环境误删表后有冷备份的 .ibd .cfg且能重建同结构表实操建议即使用了 innodb_file_per_tableON也别直接 cp .ibd 过去就 import——少了 .cfg 或版本不匹配99% 失败MySQL 8.0.23 支持 DATA DIRECTORY 子句可指定 .ibd 物理位置但 .cfg 必须放在同一目录且文件名严格为 t.cfg如果只有 .ibd 没有 .cfg比如从崩溃实例抢救出来的文件只能用 innodb_force_recovery mysqldump 导出不能走 transporttransportable tablespace 能否跳过 DISCARD 直接替换 .ibd不能。MySQL 强制要求先 DISCARD TABLESPACE再 COPY 文件最后 IMPORT。这是为了确保内存中表对象和磁盘文件状态同步。跳过 DISCARD 直接覆盖 .ibd会导致 buffer pool 缓存和文件页不一致轻则查询返回脏数据重则 mysqld crash。 RedClaw 百度推出的手机端万能AI Agent助手