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