MySQL其他程序
在命令行中使用MySQL发行版中的其他工具时,一些选项是公共的,比如用户名和密码,使用方法和mysql相同,在这里统一列出,后面我们在介绍不同的工具时,只讨论个性的选项及作用,公共选项
如下所示:
| 长选项 | 短格式 | 说明 |
|---|---|---|
| --host | -h | --host=host_name, -hhost_name 连接到指定主机上的MySQL服务 |
| --port | -P | --port=port_num, -Pport_num TCP/IP连接使用的端口号 |
| --user | -u | --user=user_name, -uuser_name 用于连接到MySQL服务器的用户名 |
| --password | -p | --password[=password], -p[password] 用于连接到MySQL服务器的密码, 可选,如果没有给出会提示用户输入 |
| --defaults-file | --defaults-file=file_name 使用指定的选项文件,如果该文件不存在, 则会发生错误 | |
| --compress | -C | --compress, -C 如果可能, 压缩客户端和服务器之间传输的所有信息 |
| --protocol | --protocol=(TCP | SOCKET | PIPE | MEMORY) 用于连接到服务器的传输协议,默认为TCP | |
| --version | -V | --version , -V 显示版本信息并退出 |
| --help | -? | --help , -? 显示帮助信息并退出 |
mysqlcheck - 表维护程序
作用
**mysqlcheck:**用于检查、修复、分析和优化表的表维护客户端
分析的作用是查看表的关键字分布,能够让 SQL 生成正确的执行计划(支持 InnoDB、MyISAM、NDB)。
检查的作用是检查表的完整性以及数据库表和索引是否损坏(支持 InnoDB、MyISAM、ARCHIVE、CSV)。
优化的作用是回收空间、减少碎片、提高 I/O 性能(支持 InnoDB、MyISAM、ARCHIVE)。
修复的作用是修复可能已经损坏的表(支持 MyISAM、ARCHIVE、CSV)。
注意事项
-
当使用 mysqlcheck 工具时,MySQL 服务器必须处于运行状态
-
执行过程中相应的表会被锁定 ,其他操作将会被挂起
-
并不是所有存储引擎都支持以上四种操作,如果遇到不支持的引擎会报出相应错误
-
执行表修复操作之前请先对表进行备份,在某些情况下修复操作可能会导致数据丢失
使用格式
mysqlcheck [options] db_name [table_name ...]
mysqlcheck [options] --databases db_name ...
mysqlcheck [options] --all-databases
Tips:如果db_name没有指出表名,或者使用--databases 或 --all-databases选项,那么整个数据库都会被检查。
常用选项
mysqlcheck有如下常用的选项,可以自己在命令行中指定,也可以通过前面文章讲的,通过[mysqlcheck] 或者 [client]去进行指定,通过配置文件的方式去指定
| 选项 | 说明 |
|---|---|
| --analyze, -a | 分析表 |
| --auto-repair | 如果检查的表有损坏,则自动修复它。 所有表都检查过之后才进行必要的修复 |
| --check, -c | 检查表中的错误。mysqlcheck的默认操作 |
| --check-only-changed, -C | 仅检查自上次检查以来更改过的表 |
| --databases, -B | --databases db_name 多个数据库名用空格隔开 处理指定数据库中的所有表 |
| --force, -f | 即使发生SQL错误也要继续 |
| --optimize, -i | 优化表 |
| --repair, -r | 执行可能进行的任务修复操作,除了唯一键 |
| --skip-database | --skip-database=db_name 不需要执行检查的数据库名(区分大小写) |
| --tables | --tables tabel_name 多个表名用空格隔开 和--databases同时使用可以覆盖数据库名 成为表名 |
| --use-frm | 对于MyISAM表的修复操作 |
对于上面选项更多信息可以去查看官方文档:
MySQL :: MySQL 8.4 Reference Manual :: 6.5.3 mysqlcheck --- A Table Maintenance Program
-a 分析数据库

--check 检查错误

-r 修复数据库

可以发现我们存储引擎是InnoDB时,修复操作并不支持
修复不支持时,如果要进行修复InnoDB存储引擎的数据,要把InnoDB存储引擎的表转换成其他存储引擎。
-o 优化数据库的表

发现也是不支持InnoDB存储引擎的,但是他执行了一个重建的操作
官网建议:不要经常执行优化操作
Tips:
mysqlcheck 程序的默认功能是对数据表进行检查操作 (相当于指定选项 --check )。如果想要对表进行修复操作,可以通过**复制原来的 mysqlcheck 程序,并重命名为 mysqlrepair 并运行 mysqlrepair 即可。**还可以创建 mysqlcheck 的快捷方式,并把快捷方式命名为 mysqlrepair 然后直接运行,这时就执行的是修复操作。通过下表所示的命名方式可以改变 mysqlcheck 的默认行为:
| 程序名 | 说明 |
|---|---|
| mysqlrepair | 相当于选项 --repair |
| mysqlanalyze | 相当于分析 --analyze |
| mysqloptimize | 相当于优化 --optimize |
cd /usr/bin
cp mysqlcheck mysqlrepair

Q:复制后不还是调用 mysqlcheck 吗?
A:对!完全正确!就是同一个程序!
它只是同一个二进制文件,换了个名字运行,行为就变了。
这是 MySQL 官方设计的内置机制!
