MySQL - 3 - mysqlcheck程序

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)。

注意事项

  1. 当使用 mysqlcheck 工具时,MySQL 服务器必须处于运行状态

  2. 执行过程中相应的表会被锁定 ,其他操作将会被挂起

  3. 并不是所有存储引擎都支持以上四种操作,如果遇到不支持的引擎会报出相应错误

  4. 执行表修复操作之前请先对表进行备份,在某些情况下修复操作可能会导致数据丢失

使用格式

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 官方设计的内置机制!

相关推荐
Navicat中国2 小时前
用 Navicat 来可视化 PostgreSQL GIS 数据,是否支持?
数据库·postgresql·gis·数据可视化·navicat
captain3762 小时前
视图(view)
数据库
疯狂打码的少年2 小时前
说透 SQL 连接:一文讲清 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN
数据库·sql
杨云龙UP2 小时前
Oracle / ODA环境TRACE、alert日志定位与ADRCI清理 SOP_20260423
linux·运维·服务器·数据库·oracle
fengxin_rou2 小时前
黑马点评实战篇|第七篇:Redis消息队列
数据库·redis·缓存
科技小花2 小时前
测评|2026五大数据治理平台横向对比:谁在定义数据中台的“智能引擎”?
大数据·数据库·人工智能·数据治理·数据中台
千月落2 小时前
Redis Cluster 集群部署
数据库·redis·缓存
撩得Android一次心动2 小时前
Android Room 数据库详解【使用篇】
android·数据库·room·jetpack
yaoxin5211232 小时前
388. Java IO API - 处理事件
java·服务器·数据库