我该如何恢复我的 MySQL 以便它再次工作?

我该如何恢复我的 MySQL 以便它再次工作?

好的,这要从前几天开始说起。我尝试在一个大表(700 万行)上创建索引,但它挂了。好吧,它进入了“通过密钥缓存修复”...我发现这并不是那么好。

好吧,这个过程被打断了。ALTER 失败,没有创建索引。在进一步尝试执行此操作时发生了一些事情(我不知道是什么原因或如何导致的),但整个表都损坏了,并进入“表的密钥文件不正确”

于是我开始修复(但毫无效果)——花了好几个小时,最后只能放弃。所以我尝试从备份中恢复……结果不太好。

所以我尝试从另一台服务器的 .MYI 和 .MYD 文件恢复。这也没用。

所以我放弃了这个表,重新创建了空表(数据不是问题)。所有系统都运行正常,一切都运行顺利。但每次我尝试在重新创建的表上执行插入操作时,MySQL 都会崩溃。然后下一个查询(通常是我尝试使用 来查看 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

因此整个服务器变得无法使用......直到我停止服务器并删除产品表文件。

因此,我尝试重新创建包含此有问题的表的整个架构。给它起了个不同的名字。但表名仍然相同:products

当我尝试向其中插入任何数据时,都会出现与上述相同的问题。因此,我猜想发生了一些更激烈的事情,或者存在对此表和/或其索引的更深层次的引用,MySQL 认为迫切需要修复!

有人可以对此作出解释并提供一些帮助吗?

我在一台 32 位机器上运行 Ubuntu Server 10.04 和 MySQL 5.1.41,内存为 2GB

答案1

我设法纠正了这个问题......虽然我真的不知道它的原因是什么,所以它当然可能会再次发生。

因此基本上我停止了 MySQL 并对myisamchk产品表(在新模式中)进行了以下操作:

  1. sudo su-ing
  2. cd /var/lib/mysql/{scema_name}/
  3. myisamchk -o -f products

我以前试过这个,但如果表已满,则需要几天时间。但由于表中现在没有记录,所以几秒钟就完成了,而且这似乎清除了 MySQL 为崩溃表设置的任何标志。

因此,现在每次服务器启动时它都不再尝试修复它,并且我已经成功地将近 500 万行写回到表中,没有任何问题。

课程?

备份表数据,清空表,myisamchk -o在空表上执行,然后重新插入数据

有趣的是,我尝试做一个myisamchk -r但却一直得到一个Segmentation Fault

相关内容