mysql_ibd
mysql_ibd copied to clipboard
执行load_data的时候出现CFG相关的错误
执行load_data 的时候出现下面的错误,请问要怎么解决? pymysql.err.OperationalError: (1808, 'Schema mismatch (CFG file is missing and source table is found to have row versions. CFG file is must to IMPORT tables with row versions.)')
load_data
实际是针对每个表执行下面两个命令:
alter table xxx discard tablespace;
复制ibd文件到数据库的数据目录,然后再执行下面sql
alter table xxx import tablespace;
一般而言用上面的步骤就可以了。不过按你的报错信息google了下,如果原始数据库的表在create之后,又经过alter新增或修改列,这时候mysql会给这个table记录Version信息。然后执行上面两个命令导入数据时,就不能只导入ibd文件,还必须同时导入记录Version信息的cfg文件。
解决这个问题有两种方案:
- 在原始数据库执行
FLUSH TABLES table_name FOR EXPORT; UNLOCK TABLES;
生成cfg文件,然后复制ibd时一起复制到新数据库的数据目录。参考 - 在原始数据库将表从带有Version的状态转为不带Version的常规表:
alter table table_name engine=innodb;
,然后再复制idb文件到新数据库的数据目录。参考
上面两个方案都要求原始数据库可用,如果原始数据库已经无法连接了,可能你只能想办法找到原始数据库的所有create和alter记录,重建一个,然后再尝试上面的方案。或者google看有没有其他方案。
如果还遇到一些问题,可以试试google搜索相关资料参考解决。