MySQL表被标记为已崩溃,并且上次(自动?)修复失败


126

我正在修复此表,但是服务器突然挂起,返回所有表都可以,但是此表显示为“正在使用”,并且在尝试修复时此表无法进行。

错误144-表'./extas_d47727/xzclf_ads'被标记为已崩溃并且上次(自动?)修复失败

我该如何修理?


1
我已经看到,这种情况大多发生在底层文件系统没有可用的inode时。用df -hi检查。通常情况是,一些小文件会填充其中的内容,例如无法清除的php会话文件。
Zrin 2014年

Answers:


260

如果您的MySQL进程正在运行,请停止它。在Debian上:

sudo service mysql stop

转到您的数据文件夹。在Debian上:

cd /var/lib/mysql/$DATABASE_NAME

尝试运行:

myisamchk -r $TABLE_NAME

如果这不起作用,您可以尝试:

myisamchk -r -v -f $TABLE_NAME

您可以再次启动MySQL服务器。在Debian上:

sudo service mysql start

3
我想上面的命令我得到这个错误不能创建新的临时文件:“xzclf_ads.TMD”
CryptoMiningPoolSetupYiimp

2
好吧,磁盘真的满了吗?您可以尝试运行“ df -h”吗?很可能是这样,您应该释放一些空间...在表修复期间,它使用一些磁盘空间写入临时表。正如您从错误消息中看到的那样,它将写入您的/ tmp /文件夹
Aleksandar Vucetic,2012年

13
我不得不导航/var/lib/mysql/<database>并运行myisamchk -r -v -f ./<table name>
Linus Oleander

5
我遇到了一个myisam_sort_buffer_size is too small错误,因此该命令对我myisamchk -r -v --sort_buffer_size=2G <table_name>
有用

1
哇,我以为我的整个网站都很忙。这样简单的修复。你是我的英雄!
安东尼

105

尝试运行以下查询:

repair table <table_name>;

我遇到了同样的问题,它解决了我的问题。


这是一个快速修复!有一个“坏”的选项表。确保首先选择正确的数据库!
jyllstuart '19

12

如果在移动到/ var / lib / mysql时它授予您拒绝权限,请使用以下解决方案

$ cd /var/lib/
$ sudo -u mysql myisamchk -r -v -f mysql/<DB_NAME>/<TABLE_NAME>

4

我需要将USE_FRM添加到修复声明中才能使其正常工作。

REPAIR TABLE <table_name> USE_FRM;

3

我有 myisamchk: error: myisam_sort_buffer_size is too small错了。

解决方案

myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G

2

修复表后转到data_dir并删除Your_table.TMP文件<Your_table>


哪里data_dir
CMCDragonkai

1
使用此命令搜索它grep -r datadir /etc/mysql/。应该/var/lib/mysql在debian和ubuntu下。
ThorstenS

1

这是100%的解决方案。我自己尝试过。

myisamchk -r -v -f --sort_buffer_size = 128M --key_buffer_size = 128M / var / lib / mysql /数据库名称/ tabloname


0

我尝试了现有答案中的选项,主要是标记为正确的选项,在我的方案中不起作用。但是,所做的工作是使用phpMyAdmin。选择数据库,然后选择表,从底部的下拉菜单中选择“修复表”。

  • 服务器类型:MySQL
  • 服务器版本:5.7.23-MySQL社区服务器(GPL)
  • phpMyAdmin:版本信息:4.7.7
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.