我已经将我的InnoDB mysql服务器的数据目录从linux机器迁移到了Windows机器上。 我启动服务器,select数据库,并试图查询一个表。 出现“表不存在”错误,但显示在“显示表”中 命令。
我检查了我的服务器错误日志,发现:
“[错误]无法find或打开InnoDB的内部数据字典中的表[dbname / tablename],尽pipe该表的.frm文件存在。InnoDB的数据字典存在,但该表存在.frm文件。重新创buildInnoDB数据文件,但忘记删除InnoDB表的相应.frm文件,或者将.frm文件移动到另一个数据库,或者表中包含此版本引擎不支持的索引,请参见http:/ / /dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html如何解决问题。“
我相信这可能与大小写有关系吗? 我已经尝试0,1和2 lower_case_table_names设置没有运气。
有人有主意吗? 多谢!
你需要做一切mysqldump!
关于错误信息,你有我称之为皮孔洞。 它本质上是一个表的元数据,在ibdata1中被破坏。 没有办法抹去它。 您不能删除元数据正在查找的表,因为ibdata1之外的相应数据无法通过其inode引用。 有时,即使mysqldump在通过.frm命中表项时也不起作用。
从另一个angular度来看,ibdata1中包含的元数据是以Lunix-ish和inode为中心的,这些是基于FAT的Windows所不具有的概念。 我不会相信这种方式构build的InnoDB元数据。 做一个mysqldump给你通过SQL的逻辑数据表示,既是操作系统又是硬件不可知的。
如果datadump太大,则需要对数据库或表执行并行转储,并将这些mysqldump加载到MySQL Windows中。
如果您不确定或担心编写脚本,请获取MAATKIT并使用mk-parallel-dump (不推荐使用的工具,但适用于adhoc转储)将数据以CSV文件的forms吐出。 然后,使用'mysqldump –no-data –routines –triggers'并生成表结构文件。 在MySQL Windows中运行表结构文件。 最后,使用LOAD DATA INFILE将CSV加载到MySQL Windows中。