MySQL问题:“表的错误密钥文件…”

我正在尝试将MySQL服务器迁移到新硬件。 旧服务器在RHEL 4上运行mysql 4.1.12; 新的服务器是在Ubuntu 10.04上的MySQL 5.1.41。 我一直在尝试迁移其中一个数据库的一些奇怪的问题。 我尝试使用mysqldump,但该文件不会正确导入到新的服务器,因为它抱怨特定表上的重复键,即使我已经检查,我很确定实际上没有重复的键。

由于我花了好几天的时间与mysqldump方法打交道,却没有find解决scheme,于是我决定将整个/ var / lib / mysql目录从旧服务器复制到新服务器。 这似乎工作得很好,mysql启动时没有抱怨,所有的数据似乎都存在。 但是,使用其中一个数据库的Web应用程序无法正常工作,抱怨:“表'活动'的密钥文件不正确;尝试修复它,line194”(有趣的是,我遇到问题的表不是该mysqldump无法导入由于重复键错误,虽然他们都在同一个数据库)。

我已经在这个表上运行了REPAIR TABLE,但是却失败了,并显示“Corrupt”消息。

我还尝试了myisamchk,为此表使用–recover和–safe-recover标志。 在这两种情况下,它都表示它修复了错误,但是Web应用程序仍然抱怨错误的密钥文件。

最令我困惑的是(closuresmysqld时),我已经在MYI文件上为有问题的表运行了一个md5sum,在旧服务器和新服务器上都是一样的。 如果在两台机器上的表文件是相同的,我很困惑,为什么密钥文件不正确的一个,而不是另一个。 我几乎怀疑这是一个与MySQL的错误,但我不积极。

我会很感激任何帮助或build议,因为我没有想法如何解决这个问题。 我不是mysql的大师,所以也许我错过了一些明显的东西。

你不能在MySQL 4.1和5.1之间做一个直接的数据拷贝。 无论如何,在MySQL文档中都应遵循升级过程,这通常是一个糟糕的主意。

从升级文档 :

如果在不转储和重新加载表的情况下执行二进制(就地)升级,则不能直接从MySQL 4.1升级到5.1。 发生这种情况是由于MySQL 5.0中的MyISAM表格索引格式不兼容。

你最好坚持转储和恢复。 还原时,请确保您的数据库为空,并且如果转储已正确创build,则不应有任何ID冲突。