当前位置: 首页 > ops >正文

【MySQL】mysql/bin目录下程序介绍

    🔥个人主页: 中草药

🔥专栏:【MySQL】探秘:数据库世界的瑞士军刀


MySQL在安装完成后,通常会包含以下程序,以Ubuntu上的mysql为例,我们可以查看到

以下是常用的mysql程序

程序名作用
mysqldMySQL 的守护进程即 MySQL 服务器,要使用 MySQL 服务器 mysqld 必须正在运行状态
mysqlMySQL 客户端程序,用于交互式输入 SQL 语句或以批处理模式从文件执行 SQL 的命令行工具
mysqlcheck用于检查、修复、分析和优化表的表维护客户端
mysqldump将 MySQL 数据库转储到 SQL、文本或 XML 文件中的客户端
mysqlimport将文本文件导入到表的客户端工具
mysqladmin执行管理操作的客户端,例如创建或删除数据库、重新加载授权表、将表刷新到磁盘以及重新打开日志文件。Mysqladmin 还可以用于从服务器检索版本、进程和状态信息
mysqlshow显示数据库、表、列和索引信息的客户端
mysqldumpslow用于读取和汇总慢速查询日志内容的实用程序
mysqlbinlog从二进制日志中读取 SQL 语句的实用程序。mysqlbinlog 文件中包含的已执行 SQL 语句的日志,可用于从崩溃中恢复数据
mysqlslap客户端负载工具,模拟多个客户端同时访问 MySQL 服务器,并报告每个阶段的使用时间

一、MySQL命令行客户端

        MySQL是一个简单的 SQLshell,可以输入命令和执行SQL语句,当执行SQL语句时,查询结果以ASCII表格式显示

客户端常用命令

选项 - 长格式短格式说明
--host-h--host=host_name,-host_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
使用指定的选项文件。如果该文件不存在,则会发生错误
--default-character-set--default-character-set=charset_name
charset_name 将作为客户端和当前连接的默认字符集,例:utf8mb4
--database-D--database=db_name,-Ddb_name
要使用的数据库
--compress-C--compress,-C
如果可能,压缩客户端和服务器之间传输的所有信息
--reconnect--reconnect
如果客户端与服务器的连接丢失,自动尝试重新连接
--quick-q--quick,-q
不缓存查询结果,收到一行打印一行,如果输出被挂起,可能会降低服务器速度
--protocol--protocol={TCP | SOCKET | PIPE | MEMORY}
用于连接到服务器的传输协议,默认为 TCP
--delimiter--delimiter=str
设置 SQL 语句分隔符。默认值为分号 ( ; )
--execute-e--execute=statement,-estatement
执行指定的 SQL 语句并退出
--version-V--version,-V
显示版本信息并退出
--help-?--help,-?
显示帮助信息并退出

注意

1)选项名称区分大小写。-v 和-V 都是合法的,但含义不同,它们分别是 --verbose和--version 选项的相应缩写形式

#以下两个等价
mysqld --verbose --help
mysqld -v -?#以下两个等价
mysql --version
mysql -V

2)对于带值的长格式选项,通常用 = 符号分隔选项名称和值。对于带值的短选项,选项值可以紧跟在选项之后,也可以用空格隔开。

例如: --host=127.0.0.1 、 -h127.0.0.1 和 -h 127.0.0.1 是等价的。

但是对于密码选项的短格式,如果要指定密码,选项与值之间不能有空格,如下所示:

mysql -ptest # test 表示密码,但没有指定要访问的数据库
mysql -p test # test 表示指定了访问的数据库,但没有指定密码

3)在命令行之中,第一个不带破折号 — 的值被解析为要访问的数据库名,所以--database一般都进行省略

4)对于采用数值的选项,该值可以带有后缀 K,M 或 G 以指示乘数 1024、1024^2 或 1024^3,例如,以下命令告诉 mysqladmin 对服务器执行 1024 次 ping,每次 ping 之间休眠 3 秒

mysqladmin --count=1K --sleep=3 ping -uroot -p

5)如果选项的值包括空格,那么值需要包含在双引号之中

二、mysqlcheck-表维护程序

        mysqlcheck是 MySQL 自带的命令行工具,用于检查、修复、优化和分析数据库表。它是对 SQL 命令 CHECK TABLEREPAIR TABLEANALYZE TABLE, 和 OPTIMIZE TABLE 的封装,支持批量处理多个数据库或表。

mysqlcheck 客户端用于执行表维护,可以对表进行:分析、检查、修复或优化操作。

  • 分析表(Analyze):更新表的索引统计信息,优化查询计划。

  • 检查表完整性(Check):验证表结构和数据是否损坏。

  • 修复表(Repair):尝试修复损坏的表(主要针对 MyISAM 引擎)。

  • 优化表(Optimize):重新组织表的物理存储,减少碎片(对 InnoDB 也有效)。


注意事项

1)存储引擎限制

MyISAM:支持 REPAIRCHECKOPTIMIZE

InnoDB

通常不需要手动修复,支持自动崩溃恢复。

OPTIMIZE TABLE 会重建表并释放未使用空间(相当于 ALTER TABLE ... FORCE)。

若 InnoDB 表损坏,建议通过备份恢复或使用 mysqldump 导出后重新导入。

2)锁表问题

OPTIMIZE TABLE 和 REPAIR TABLE 可能锁表,影响线上服务,建议在低峰期操作。

3)备份优先

修复表前务必备份数据(如使用 mysqldump),避免操作失败导致数据丢失。

4)状态:

在使用mysqlcheck工具时,MySQL服务器必须在运行状态


常用选项

选项说明
--analyze, -a分析表
--auto-repair如果检查的表有损坏,则自动修复它。所有表都检查过之后才进行必要的修复
--check, -c检查表中的错误。mysqlcheck 的默认操作
--check-only-changed, -C仅检查自上次检查以来更改过的表
--databases, -B--databases db_name 多个数据库名用空格隔开
处理指定数据库中的所有表
--force, -f即使发生 SQL 错误也要继续
--optimize, -o优化表
--repair, -r执行可能进行的任务修复操作,除了唯一键
--skip-database--skip-database=db_name
不需要执行检查的数据库名 (区分大小写)
--tables--tables=table_name 多个表名用空格隔开
在选项之后的所有名称参数都被视为表名
--use-frm对于 MyISAM 表的修复操作

特殊使用

        mysqlcheck 程序的默认功能是对数据表进行 检查 操作 (相当于指定选项 --check),如果想要对表进行修复操作,可以通过复制原来的 mysqlcheck 程序,并重命名为 mysqlrepair,并运行 mysqlrepair 即可,还可以创建 mysqlcheck 的快捷方式,并把快捷方式命名为 mysqlrepair 然后直接运行,这时就执行的是修复操作,通过下表所示的命名方式可以改变 mysqlcheck 的默认行为:

程序名说明
mysqlrepair默认行为是修复,相当于选项 --repair
mysqlanalyze默认行为是修复,相当于分析 --analyze
mysqloptimize默认行为是修复,相当于优化 --optimize

三、mysqldump-数据库备份程序

        mysqldump是 MySQL 自带的命令行工具,用于生成数据库的逻辑备份文件(SQL 格式)。通过导出表结构和数据,用户可以在需要时恢复数据库到备份时的状态。

基本语法

mysqldump [选项] 数据库名 [表名] > 备份文件.sql

部分常用选项 

选项说明
--all-databases 或 -A备份所有数据库。
--databases 或 -B指定多个数据库(空格分隔)。
--single-transaction对 InnoDB 表启用事务快照,确保备份一致性(需配合 REPEATABLE READ 隔离级别)。
--lock-tables 或 -l对非 InnoDB 表(如 MyISAM)锁表备份(默认锁单库的所有表)。
--lock-all-tables 或 -x全局锁表备份所有数据库(仅限 MyISAM)。
--no-data 或 -d仅备份表结构,不备份数据。
--no-create-info 或 -t仅备份数据,不备份表结构。
--where="条件"按条件备份部分数据(需指定表名)。
--result-file=文件名指定备份文件的输出路径(替代 > 重定向)。
--compress启用压缩协议(减少网络传输量)。
--skip-comments忽略 SQL 注释。
--skip-add-drop-table不生成 DROP TABLE 语句(避免恢复时覆盖同名表)。
--ignore-table=数据库.表忽略指定表(可多次使用)。
--user=用户名 或 -u连接数据库的用户名。
--password=密码 或 -p数据库密码(或提示输入)。
--host=主机 或 -h数据库服务器地址。
--port=端口 或 -P数据库端口(默认 3306)。

注意事项

  • 转储表时必须要有 SELECT 权限
  • 转储视图时必须要有 SHOW VIEW 权限
  • 转储触发器时必须要有 TRIGGER 权限
  • 如果没有使用 --single-transaction 选项时必须要有 LOCK TABLES 权限
  • 如果没有使用 --no-tablespaces 选项时必须要有 PROCESS 权限
  • 重新导入转储文件时,也需要有相应的权限
  • 由于 mysqldump 是逐行转储数据,所以不适用于大数据量的转储与导入

四、mysqladmin-服务器管理程序

        mysqladmin是 MySQL 自带的命令行工具,用于执行服务器管理操作,例如监控状态、关闭服务、创建数据库等。它是 DBA 和运维人员常用的工具之一,适合快速执行管理任务而无需进入 MySQL 客户端。使用mysqladmin必须是root权限。

mysqladmin [选项] 命令 [命令参数]

常用命令

命令说明
status显示服务器简要状态(如运行时间、查询数等)。
ping检查 MySQL 服务是否存活。
processlist显示当前活动的连接和查询(类似 SHOW PROCESSLIST)。
kill 连接ID终止指定连接(需结合 processlist 使用)。
shutdown关闭 MySQL 服务(需权限)。
create 数据库名创建新数据库。
drop 数据库名删除数据库。
refresh刷新日志和权限表(等效于 FLUSH PRIVILEGES + 日志轮转)。
variables查看服务器变量(类似 SHOW VARIABLES)。
password 新密码修改当前用户密码(已弃用,建议用 SET PASSWORD 或 ALTER USER)。

常用选项

选项说明
--user=用户名 或 -u指定连接用户名。
--password=密码 或 -p密码(或提示输入)。
--host=主机 或 -hMySQL 服务器地址。
--port=端口 或 -P指定端口(默认 3306)。
--sleep=秒数 或 -i循环执行命令(如监控状态)。
--count=次数 或 -c循环执行的总次数(需配合 --sleep)。
--vertical 或 -E以垂直格式输出结果(更易读)。
--silent 或 -s静默模式(仅输出错误信息)。

五、mysqlshow-显示数据库、表和列信息

        mysqlshow是 MySQL 自带的命令行工具,用于快速查看数据库、表、列的结构信息,类似于在 MySQL 客户端中执行 SHOW DATABASESSHOW TABLES 和 DESCRIBE table 等命令的快捷方式。它适合在命令行环境中快速获取数据库元数据,无需进入交互式 MySQL Shell。

mysqlshow [选项] [数据库名 [表名 [列名]]]

举例

显示所有数据库

mysqlshow -u root -p
+--------------------+
|     Databases      |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| test_db            |
+--------------------+

 显示指定数据库的所有表

mysqlshow -u root -p sakila​​​​​​​Database: sakila
+------------+
|   Tables   |
+------------+
| actor      |
| address    |
| category   |
| city       |
| country    |
| ...        |
+------------+

六、mysqldumpslow-总结慢查询日志文件

        mysqldumpslow 是 MySQL 自带的工具,用于分析慢查询日志文件,帮助开发者快速定位执行效率低下的 SQL 语句。

mysqldumpslow [选项] [日志文件路径]

常用选项

选项说明
-a不用 N 和 'S' 代替 numbers 和 String
-n N在名称中包含 N 个以上的数字用 N 代替
-g pattern仅考虑与指定模式匹配的慢查询
--help显示帮助信息并退出
-h host_name与 *-slow.log 文件名对应的 MySQL 服务器主机名。可以包含通配符。默认值是 *(匹配所有)
-i name服务器实例的名称
-l不要从总时间中减去锁占用的时间
-r倒序排列
-s sort_type如何对输出进行排序
-t N显示输出中的前 N 个查询
--verbose, -v打印有关程序功能的更多信息

-s sort_type sort_type 可选的值如下所示:

  • t,at: 按查询时间或平均查询时间排序,默认排序
  • l,al: 按锁占用时间或平均锁占用时间排序
  • r,ar: 按发送的行数或平均发送的行数排序
  • c: 按计数排序

show variables like '%query%'

这是一条 MySQL 语句,作用是查询名称中包含 “query” 的系统变量及其对应的值 。

Variable_name含义
binlog_rows_query_log_events控制是否在二进制日志中记录基于行模式下的查询事件,OFF代表不记录
ft_query_expansion_limit全文检索中查询扩展的限制数量
have_query_cache表示当前 MySQL 服务器未启用查询缓存功能
long_query_time慢查询的时间阈值(单位:秒),执行时间超过此值的查询会被记录到慢查询日志(若慢查询日志开启 )
query_alloc_block_size查询执行过程中分配内存块的大小
query_prealloc_size查询预分配内存的大小,用于优化查询执行时的内存申请效率
slow_query_log表示慢查询日志功能未开启
slow_query_log_file慢查询日志文件的存储路径(当慢查询日志功能开启时 )

输出示例

Count: 3  Time=10.00s (30s total)  Lock=0.00s (0s total)  Rows=100.0 (300), user@hostSELECT * FROM orders WHERE user_id = N AND status = 'S'
  • Count: 执行次数

  • Time: 单次平均时间(总时间)

  • Lock: 显示查询过程中锁占用的时间

  • Rows: 返回行数

  • SQL: 参数化后的查询(N为数字占位符,'S'为字符串占位符)

七、mysqlbinlog-处理二进制日志文件

        mysqlbiinlog是 MySQL 自带的工具,用于解析、查看和管理 MySQL 的二进制日志(Binary Log)文件。二进制日志记录了数据库的所有数据变更操作(如 INSERT、UPDATE、DELETE、DDL 等),是数据恢复、主从复制(Replication)和审计的重要依据。

基本语法

mysqlbinlog [options] log_file...

常用选项

选项说明
--start-datetime指定解析的起始时间(格式:YYYY-MM-DD HH:MM:SS
--stop-datetime指定解析的结束时间
--start-position指定解析的起始事件位置(Position)
--stop-position指定解析的结束事件位置
--database=DB_NAME仅显示指定数据库的日志(需配合 -v 使用)
-v 或 --verbose显示详细的 SQL 语句(默认仅显示 Base64 编码的 BINLOG)
--base64-output=decode-rows自动解码行事件(ROW 格式日志专用)
--result-file=FILE将解析结果输出到指定文件
--read-from-remote-server从远程 MySQL 服务器读取二进制日志(需指定 --host 和 --user
--skip-gtids忽略 GTID 信息(用于跨实例恢复)
--include-gtids=GTID_SET仅包含指定 GTID 的事件
--exclude-gtids=GTID_SET排除指定 GTID 的事件

--base64-output=value ,value 允许的值: (默认 AUTO)

  • AUTO ("automatic") 或 UNSPEC ("unspecified") 在必要时自动显示 BINLOG 语句。如果使用 mysqlbinlog 重新执行二进制日志文件内容,那么使用 AUTO 选项是唯一安全的行为,其他选项值仅用于调试或测试,如果 --base64-output 没有指定,那么默认值是 AUTO
  • NEVER 不显示 BINLOG 语句。
  • DECODE-ROWS 不显示加密内容,可以配合 mysqlbinlog 的 -verbose 选项以注释的形式只显示事件的 SQL 语句。

八、mysqlslap-负载仿真客户端

        mysqlslap工具是一个专为数据库性能测试设计的负载仿真客户端。它通过模拟多个并发客户端访问数据库,执行 SQL 查询或自定义测试用例,帮助开发者或 DBA 评估数据库在高负载下的性能表现(如吞吐量、响应时间等)

mysqlslap [optioins]

并发与迭代

参数说明示例
--concurrency并发客户端数(模拟用户数)--concurrency=50,100(测试不同并发量)
--iterations测试重复次数--iterations=10(重复执行 10 次取平均)
--number-of-queries每个客户端执行的查询总数--number-of-queries=1000

测试数据生成

选项说明
--auto-generate-sql, -a当命令选项或文件中没有提供 SQL 语句时,自动生成 SQL 语句
--auto-generate-sql-add-autoincrement在自动生成的表中添加 AUTO_INCREMENT 列
--auto-generate-sql-execute-number--auto-generate-sql-execute-number=N
指定要自动生成多少查询
--auto-generate-sql-guid-primary向自动生成的表添加基于 GUID 的主键
--auto-generate-sql-load-type--auto-generate-sql-load-type=type
指定测试负载类型。允许的值是 read(扫描表)、write(插入表)、key(读取主键)、update(更新主键)或 mixed(一半插入,一半扫描选择)。默认为 mixed 。
--auto-generate-sql-secondary-indexes--auto-generate-sql-secondary-indexes=N
指定要向自动生成的表添加多少索引。默认为 0。
--auto-generate-sql-unique-query-number--auto-generate-sql-unique-query-number=N
为自动测试生成多少个不同的查询 (where 条件不同)。默认值是 10。
--auto-generate-sql-write-number--auto-generate-sql-write-number=N
要执行多少行插入。默认值是 100。
--auto-generate-sql-unique-write-number--auto-generate-sql-unique-write-number=N
为 --auto-generate-sql-write-number 生成多少个不同的查询。默认值是 10
--commit--commit=N
在提交之前要执行多少语句。默认值是 0
--concurrency, -c--concurrency=N, -c N
要模拟并行客户端的数量
--create--create=value
用于创建表 SQL 语句或文件
--create-schema--create-schema=value
用于测试的库,测试完成后会自己动删除
--csv--csv[=file_name]
以逗号分隔的格式输出到指定的文件,如果没有给出文件,则输出到控制台
--delimiter, -F--delimiter=str, -F str
SQL 语句的分隔符
--engine, -e--engine=engine_name, -e engine_name
创建表的存储引擎
--iterations, -i--iterations=N, -i N
每个客户端运行测试的次数
--no-drop运行完测试后不删除创建的数据库
--number-char-cols, -x--number-char-cols=N, -x N
使用 --auto-generate-sql 选项时 VARCHAR 列的数量
--number-int-cols, -y--number-int-cols=N, -y N
使用 --auto-generate-sql 选项时 INT 列的数
--number-of-queries--number-of-queries=N
限制每个客户端最大的查询数
--pre-query--pre-query=value
测试开始前要执行 SQL 语句或 SQL 文件,不计入查询次数。
--pre-system--pre-system=str
测试开始前使用 system () 执行的命令。不计入查询次数。
--post-query--post-query=value
测试完成后要执行 SQL 语句或 SQL 文件,不计入查询次数。
--post-system--post-system=str
测试完成后使用 system () 执行的命令。不计入查询次数。
--query, -q--query=value, -q value
包含用于测试的 SELECT 语句的文件或 SQL 语句。

高级参数

参数说明示例
--engine指定存储引擎--engine=InnoDB
--debug-info输出调试信息(如内存、CPU 使用)--debug-info
--only-print仅打印测试步骤,不实际执行用于验证测试配置


只有流过血的手指,才能弹出世间的绝唱。 ——泰戈尔

🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀

以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐

  制作不易,希望能对各位提供微小的帮助,可否留下你免费的赞呢🌸 

http://www.xdnf.cn/news/6214.html

相关文章:

  • Python训练营打卡——DAY25(2025.5.14)
  • Python对于可变对象和不可变对象的理解(主要理解代码中的注释)
  • Unity 小提示与小技巧
  • 【GESP真题解析】第 4 集 GESP 一级 2023 年 3 月编程题 1:每月天数
  • 创建对象
  • [Vue3]语法变动
  • 3D Gaussian Splatting 查看工具 splatviz
  • 案例 ss
  • linux-信号保存和处理
  • linux-进程信号捕捉
  • 继续预训练 LLM ——数据筛选的思路
  • Linux重定向与缓冲区
  • AI时代的弯道超车之第七章:如何用AI赋能创业?
  • 缺乏自动化测试,如何提高测试效率
  • 酒店旅游类数据采集API接口之携程数据获取地方美食品列表 获取地方美餐馆列表 景点评论
  • CodeBuddy Craft,我的编程搭子
  • element基于表头返回 merge: true 配置列合并
  • Oracle版本、补丁及升级(12)——补丁及补丁集
  • REVERSE学习笔记(攻防世界xxxorrr)
  • 【Java学习笔记】==运算符
  • 解决常见数据库问题:保障数据安全与稳定的全方位指南
  • 模板源码建站、定制建站和SaaS 建站有什么区别?企业建站应该怎么选?
  • C++引用编程练习
  • XILINX-DDR4-自定义componet(x8)-之一
  • 六西格玛觉醒:一场数据思维的启蒙运动​
  • 【江苏省】《信息技术应用创新软件适配改造成本评估规范》(DB32/T 4935-2024)-标准解读系列
  • 【Linux Nano Vim快捷键大全】
  • 基于EFISH-SCB-RK3576/SAIL-RK3576的康复训练机器人技术方案‌
  • Linux下批量提取子文件夹文件到当前目录
  • libmemcached库api接口讲解二