Mysqlcheck - 表维护程序
mysqlcheck客户端执行表维护操作:检查、修复、优化或分析表。
每个表在处理过程中都会被锁定,因此对其他会话来说是不可用的,尽管对于检查操作,表只被锁定为读锁。表维护操作可能需要很长时间,特别是对于大型表。如果你使用–databases或–all-databases选项来处理一个或多个数据库中的所有表,mysqlcheck的调用可能会花费很长时间。(这也适用于MySQL升级过程,如果它确定需要进行表检查,因为它以相同的方式处理表。)
mysqlcheck必须在mysqld服务器运行时使用,这意味着你不需要停止服务器来执行表维护操作。
mysqlcheck以用户方便的方式使用了SQL语句CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE。它确定了要用于要执行的操作的语句,然后将语句发送到服务器以执行。 所有存储引擎不一定支持所有四种维护操作。在这种情况下,会显示错误消息。例如,如果test.t是一个MEMORY表,尝试对其进行检查会产生以下结果:
$> mysqlcheck test t test.t note : The storage engine for the table doesn't support check
对于InnoDB表,可以使用CHECK TABLE进行检查,但不能使用REPAIR TABLE进行修复。
警告
在进行表修复操作之前最好对表进行备份;在某些情况下,操作可能导致数据丢失。可能的原因包括但不限于文件系统错误。
有三种通用方法可以调用mysqlcheck:
mysqlcheck [options] db_name [tbl_name ...] mysqlcheck [options] --databases db_name ... mysqlcheck [options] --all-databases
如果您在db_name后面没有指定任何表名,或者您使用了–databases或–all-databases选项,则整个数据库将被检查。
mysqlcheck与其他客户端程序相比具有特殊功能。默认检查表的行为(–check)可以通过重命名二进制文件来更改。如果你想让工具默认修复表,你应该只是复制mysqlcheck命名为mysqlrepair,或者创建一个名为mysqlrepair的符号链接指向mysqlcheck。如果你调用mysqlrepair,它将修复表。
以下表格中显示的名称可用于更改mysqlcheck的默认行为。
Command | Meaning |
---|---|
mysqlrepair | The default option is –repair |
mysqlanalyze | The default option is –analyze |
mysqloptimize | The default option is –optimize |