这几天数据库频繁crash,查看日志发现类似如下的错误:
[ERROR] mysqld: Table './database/pre_forum_forumfield' is marked as crashed and should be repaired
。
于是乎自己查看了下,出问题的表还真不少,至少有二十几个,而且分散在不同数据库中。对于MyISAM存储引擎和ARCHIVE存储引擎来说,可以通过REPAIR TABLE来轻松的修复该表,如果觉得麻烦,phpmyadmin也提供了一键功能,选中指定的表选择repair即可。但我这有如此多的表就不能一次性全部解决吗?当然,办法是有的。
mysqlcheck -uroot -p --auto-repair -o database
其中u为用户名,p为密码,此处为空表示执行命令后输入,o指定数据库名称,这条命令可以一次性搞定database库下的所有需要repair的表。也就是说当你的MySQL修复指定数据库下的所有表时,可以用上面的方法
mysqlcheck -A -uroot -p --auto-repair
与上面的命令类似,唯一的区别是A,表示所有数据库中的所有的表,当你的MySQL需要修所有数据库下的表的时候,这个更方便。
mysqlcheck -uroot -p --repair -o databasemysqlcheck -A -uroot -p --repair
上面这两天记录经过本人测试月可以解决我的问题,唯一的区别在于–repair和–auto-repair的区别,查看了帮助之后并没发现什么本质上的区别本人也就没在深究,如果以后有明确发现在补充吧。
–auto-repair
如果某个被检查的表破坏了,自动修复它。检查完所有表后自动进行所有需要的修复
–repair,-r
执行可以修复大部分问题的修复,只是唯一值不唯一时不能修复。