is marked as crashed and last (automatic?) repair failed

is marked as crashed and last (automatic?) repair failed 

修复mysql数据“is marked as crashed and last (automatic?) repair failed”的几种方法

如果您的服务器是独立主机强烈建议使用命令行方式进行修复:
修复前将mysql服务停止。
如果是Win主机,打开命令行方式,然后进入到mysql的/bin目录。
执行myisamchk -r d:mysqldatadiscuz*.MYI
其中d:mysqldatadiscuz换成您的数据库所在路径。
如果是类Unix主机,
[@bin]./myisamchk -r /www/数据库目录/table.MYI 即可。(ok)

 myisamchk支持下列选项:

  -a, --analyze

  分析键值的分布。这通过让联结优化器更好地选择表应该以什么次序联结和应该使用哪个键来改进联结性能。

  -#, --debug=debug_options

  输出调试记录文件。debug_options字符串经常是'd:t:o,filename'。

  -d, --description

  打印出关于表的一些信息。

  -e, --extend-check

  非常彻底地检查表。这仅在极端情况下是必要的。通常,myisamchk应该找出所有错误,即使没有改选项。

  -f, --force

  覆盖老的临时文件。如果你在检查表时使用-f (运行myisamchk没有-r),myisamchk在检查期间将自动为出现一个错误的表用-r重启。

  --help

  显示一条帮助消息并且退出。

  -i, --information

  打印有关被检查的表的信息统计。

  -k #, --keys-used=#

  与-r一起使用。告诉ISAM表处理器仅更新头#个索引。较高编号的索引被撤销。这能用来使插入变得更快!撤销的索引能通过使用myisamchk -r被重新激活。

  -l, --no-symlinks

  在修复时,不跟随符号连接。通常myisamchk修复一个符号连接所指的表。

  -q, --quick

  与-r一起使用使得一个修复更快。通常,原来的数据文件没被接触;你能指定第二个-q强制使用原来的数据文件

二种办法时,在phpmyadmin中显示此表正在使用中,phpmyadmin修复操作无法对此表进行修复操作。那就用第三种办法了,朋友服务器用的是win服务器主机,于是打开命令行,首先停止mysql服务:net stop mysql,然后进入到mysql的bin目录,输入:myisamchk -r d:mysqldatadiscuz*.MYI,如果是能确认是哪个表,也可以把前面的*号直接换为具体的表名称,一般全部修复没问题。回车确定后,修复进程就在不断的一个表一个表,一行一行的修复中了。
-----------------------------------------------------------------------------------------------------------------------------

Table ‘.mydb bl_test’ is marked as crashed and should be repaired

开始还是用phpmyadmin去修复,结果不管用!

然后使用mysql自带的myisamchk,操作如下:

找到出错表所在位置(linux下mysql数据通常保存在/var/lib/mysql/下)

shell>cd /var/lib/mysql/mydb;

shell>myisamchk -r q tbl_test; (快速修复模式,会自动检查索引表和数据表是否能够一致,如果一致,则可以修复)

如果上一步失败,执行下一步

shell>myisamchk -r tbl_test;(会删除不一致的数据和索引,并重新构建索引)

如果再失败,执行下一步

shell>myisamchk --safe-recover tbl_test;

注意:使用myisamchk前,要确保mysqld没有在访问要检查的表。最好停止mysqld。

原文地址:https://www.cnblogs.com/chenxingrui/p/3786159.html