好,所以这一天开始。 我试图在一张大桌子(700万行)上创build一个索引,然后挂起来。 那么它进入“修复的keycache” …我发现并不是那么好。
那么这个过程被打断了。 ALTER失败,没有索引。 在进一步的尝试中发生了一些事情(我不知道是什么或如何造成的),但整个表变得损坏,进入“不正确的表文件”
于是我开始修理(没有任何工作) – 花费了数小时, 所以我试着从备份恢复…这不太好。
所以我尝试从另一台服务器的.MYI和.MYD文件恢复。 这也没有工作。
所以我放弃了表格,并将其重新创build为空(数据不是问题)。 所有的系统都运行,一切运行平稳。 但每次我尝试在重新创build的表上执行插入MySQL崩溃。 然后下一个查询(通常我试图用SHOW PROCESSLIST\G;来查看在shell中发生了什么SHOW PROCESSLIST\G; )从服务器启动每个连接,并且得到类似这样的错误:
*************************** 1. row *************************** Id: 11 User: debian-sys-maint Host: localhost db: NULL Command: Query Time: 1 State: Repair by sorting Info: products *************************** 3. row *************************** Id: 71 User: debian-sys-maint Host: localhost db: NULL Command: Query Time: 0 State: System lock Info: select count(*) into @discard from `creloaded`.`products_options_values_to_products_options` ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) ERROR: Can't connect to the server
所以整个服务器变得不可用…直到我停止服务器并删除产品表文件。
所以我试图重新创build包含这个违规表的整个模式。 给它一个不同的名字。 表名仍然是相同的: products
只要我尝试向其中插入任何数据,就和上面的问题一样。 所以我在猜测一些更激烈的事情发生,或者有更深入的参考这个表和/或索引的地方,MySQL感到迫切需要修复!
任何人都可以摆脱这一点,也许一些援助?
我运行的是具有2GB RAM的32位机器上运行的Ubuntu Server 10.04和MySQL 5.1.41
我设法纠正了这个问题……虽然我不知道是什么原因,所以当然可能会再次发生。
所以基本上我停止了MySQL,并通过以下方式在产品表(在新模式中)上执行myisamchk :
sudo su -ing cd /var/lib/mysql/{scema_name}/ myisamchk -o -f products 以前我曾经尝试过,但是整整一个星期要花上几天的时间。 但是因为表中现在没有logging,所以在几秒钟内完成,这似乎清除了MySQL为崩溃表设置的标志。
因此,现在每次服务器启动时都不再试图修复它,而且我已经成功地将近500万行写回到了表格中。
课程?
备份你的表格数据,清空表格,在空表格上做一个myisamchk -o ,然后重新插入你的数据
有趣的是我试图做一个myisamchk -r但我一直在收到一个Segmentation Fault 。