首先停止 mysql 运行
sudo service mysql stop
登录 mysql,查询表的时候,出现错误:
ERROR 144 - Table './extas_d47727/xzclf_ads' is marked as crashed and last (automatic?) repair failed
修复的方法:
首先停止 mysql 运行
sudo service mysql stop
然后定位到 mysql 数据库存放处
cd /var/lib/mysql/$DATABASE_NAME
有可能会显示无法权限进入,那样的话,就忽略上一步,直接用下面语句:
sudo myisamchk -r -v -f /var/lib/mysql/{your-database-name}/{your-table-name}
最好是每个表都执行一下,然后重启数据库:
sudo service mysql start
延伸:
myisamchk是MyISAM表维护的一个非常实用的工具。可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。 myisamchk 选项解释 –debug=debug_options, -# debug_options 输出调试记录文件。debug_options字符串经常是’d:t:o,filename’。 –silent,-s 沉默模式。仅当发生错误时写输出。 –wait, -w 如果表被锁定,不是提示错误终止,而是在继续前等待到表被解锁。 如果不使用–skip-external-locking,可以随时使用myisamchk来检查表。当检查表时,所有尝试更新表的客户端将等待,直到myisamchk准备好可以继续。 请注意如果用–skip-external-locking选项运行mysqld,只能用另一个myisamchk命令锁定表。 –var_name=value 可以通过–var_name=value选项设置下面的变量: –check, -c 检查表的错误。如果你不明确指定操作类型选项,这就是默认操作。 –check-only-changed, -C 只检查上次检查后有变更的表。 –extend-check, -e 非常仔细地检查表。如果表有许多索引将会相当慢。 –fast,-F 只检查没有正确关闭的表。 –force, -f 如果myisamchk发现表内有任何错误,则自动进行修复。 –information, -i 打印所检查表的统计信息。 –medium-check, -m 比–extend-check更快速地进行检查。只能发现99.99%的错误 –update-state, -U 将信息保存在.MYI文件中,来表示表检查的时间以及是否表崩溃了。该选项用来充分利用–check-only-changed选项, 但如果mysqld服务器正使用表并且正用–skip-external-locking选项运行时不应使用该选项。 –read-only, -T 不要将表标记为已经检查。如果你使用myisamchk来检查正被其它应用程序使用而没有锁定的表很有用 –backup, -B 将.MYD文件备份为file_name-time.BAK –character-sets-dir=path 字符集安装目录。 –correct-checksum 纠正表的校验和信息。 –data-file-length=len, -D len 数据文件的最大长度 –extend-check,-e 进行修复,试图从数据文件恢复每一行。一般情况会发现大量的垃圾行。不要使用该选项,除非你不顾后果。 –force, -f 覆盖旧的中间文件(文件名类似tbl_name.TMD),而不是中断 –keys-used=val, -k val 对于myisamchk,该选项值为位值,说明要更新的索引。选项值的每一个二进制位对应表的一个索引,其中第一个索引对应位0。 选项值0禁用对所有索引的更新,可以保证快速插入。通过myisamchk -r可以重新激活被禁用的索引。 –parallel-recover, -p 与-r和-n的用法相同,但使用不同的线程并行创建所有键。 –quick,-q 不修改数据文件,快速进行修复。 –recover, -r 可以修复几乎所有一切问题,除非唯一的键不唯一时(对于MyISAM表,这是非常不可能的情况)。如果你想要恢复表, 这是首先要尝试的选项。如果myisamchk报告表不能用-r恢复,则只能尝试-o。 在不太可能的情况下-r失败,数据文件保持完好)。 –safe-recover, -o 使用一个老的恢复方法读取,按顺序读取所有行,并根据找到的行更新所有索引树。这比-r慢些, 但是能处理-r不能处理的情况。该恢复方法使用的硬盘空间比-r少。一般情况,你应首先用-r维修,如果-r失败则用-o。 –sort-recover, -n 强制myisamchk通过排序来解析键值,即使临时文件将可能很大。 –analyze,-a 分析键值的分布。这通过让联结优化器更好地选择表应该以什么次序联结和应该使用哪个键来改进联结性能。 要想获取分布相关信息,使用myisamchk –description –verbose tbl_name命令或SHOW KEYS FROM tbl_name语句。 –sort-index, -S 以从高到低的顺序排序索引树块。这将优化搜寻并且将使按键值的表扫描更快。 –set-auto-increment[=value], -A[value] 强制从给定值开始的新记录使用AUTO_INCREMENT编号(或如果已经有AUTO_INCREMENT值大小的记录,应使用更高值)。 如果未指定value,新记录的AUTO_INCREMENT编号应使用当前表的最大值加上1。 –description, -d 打印出关于表的描述性信息。
[root@nagios test]# myisamchk -e wpusers.MYI #检查表 Checking MyISAM file: wpusers.MYI Data records: 1 Deleted blocks: 0 - check file-size - check record delete-chain - check key delete-chain - check index reference - check data record references index: 1 - check data record references index: 2 - check data record references index: 3 - check records and index references [root@localhost tg]# myisamchk -of ./dxad.MYI #修复第一步 - recovering (with keycache) MyISAM-table './dxad.MYI' Data records: 12597637 Found block that points outside data file at 1630252996 Data records: 12597456 [root@localhost tg]# myisamchk -r ./dxad.MYI #修复第二步 - recovering (with sort) MyISAM-table './dxad.MYI' Data records: 12597456 - Fixing index 1 [root@localhost tg]# myisamchk ./dxad.MYI #修复第三步 Checking MyISAM file: ./dxad.MYI Data records: 12597456 Deleted blocks: 0 - check file-size - check record delete-chain - check key delete-chain - check index reference - check data record references index: 1 - check record links
本文:MySQL: table is marked as crashed and last (automatic?) repair failed, WordPress 可以上传,媒体不显示图片