如果在原始数据库怀疑损坏,您可以执行以下操作:
对于MyISAM表:
CHECK TABLE <table_name>;
REPAIR TABLE <table_name>;
InnoDB表:
http://www.mysqlperformanceblog.com/2008/07/04/recovering-innodb-table-corruption/
我在CHECK和REPAIR能够检测和纠正的几个罕见场合中,我个人发现了MyISAM表的腐败现象。我从来没有经历过InnoDB表的腐败,所以无法根据个人经验对链接中提供的信息进行说明。这就是说,如果我在你的鞋子里,我将开始仔细研究mysqldump产生的输出文件,看看我能否找出错误的根源。 mysqldump通常在每个表中输出一个INSERT语句,并将所有数据放在一行中,因此诊断错误有点棘手,因为错误消息中包含的行号并没有多大帮助。所以,我会做的是编辑mysqldump输出文件并在每行之间插入换行符。例如:
原文:
INSERT INTO table VALUES (a,b,c),(d,e,f),(g,h,i), ...
更改为:
INSERT INTO table VALUES (a,b,c),
(d,e,f),
(g,h,i),
...
既然你是舒适的命令行,你很可能与SED自动化此等
然后,尝试导入修改后的文件。你应该得到相同的错误,但是这次行号将有助于精确定位导致问题的确切行。此时,您应该能够诊断问题(或者在此发布mysqldump输出的有问题的部分,我们将尽力帮助)。
编辑:
就是你提到的错误消息发生时您进口数据库?或者数据库导入成功,但应用程序在访问数据库时会产生错误消息?我假设前者,但现在认为在重新阅读你的问题后可能是后者。
还有一个想法:你的数据库是否包含存储的特效?如果是这样,默认情况下,mysqldump不会包含这些内容。您需要使用--routines选项:
mysqldump --routines -u <user> -p<password> <database> > output
其不是表user_register,它试图插入的数据,似乎你做serialise,并尝试插入这个 – 2010-11-28 06:42:09
你如何生成备份?例如,你在使用mysqldump,MySQL Administrator等吗?尝试使用mysqldump,看看你是否得到相同的错误。 – cbranch 2010-11-28 06:44:15