MySQL进阶14 — 常用程序

概述

本章,您将学习到 MySQL 中的命令行程序,主要包括:

  • 服务器和服务器启动程序
  • 连接到 MySQL 服务器的客户端工具
  • 管理和实用程序
  • 程序开发工具(非开发人员,略过)
  • 杂项工具

要了解这些程序的更多信息,请参阅 官方网站的文档

服务器和服务器启动程序

mysqld_safe 命令

该命令是 UNIX 或 GNU/Linux 推荐启动 MySQL 实例的推荐方法。

作者采用的源代码编译安装,因此是这样启动的:

Shell > cat /etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
server-id = 1
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql8/
datadir = /usr/local/mysql8/data/
user = mysql
log-error = /usr/local/mysql8/data/mysqld_start.err
bind-address = *
default-storage-engine = INNODB
group-concat-max-len = 102400
skip-name-resolve
back-log = -1
max-connections = 700
wait-timeout = 90
max-allowed-packet = 64M
read-buffer-size = 128K
innodb-flush-log-at-trx-commit = 1
sync-binlog = 1
innodb-buffer-pool-size = 1G
innodb-io-capacity = 100

[mysqldump]
quick

Shell > /usr/local/mysql8/bin/mysqld_safe  --user=mysql &

相关说明:

  • mysqld_safe 启动实例时,会先读取配置文件(/etc/my.cnf)中的选项,再读取命令行中的选项,若配置文件与命令行存在相同的选项,则以最后读取到的选项或选项值为准。
  • 配置文件中,"[ ]" 表示要设置选项的程序或组的名称,除了接受 [mysqld] 外,也接受 [server][mysqld_safe][mysqld-8.4]
  • 命令行的选项需要添加 -- 前缀,但如果将选项写入到配置文件中,则不需要 -- 前缀
  • 除极个别的 mysqld_safe 特定选项外(即 mysqld_safe --help 输出中的选项),绝大部分的选项都会传递给 mysqld 程序

mysqld_safe 的常用选项在 前面的文章 中已经介绍了,这里就不再多余介绍了。

连接到 MySQL 服务器的客户端工具

mysql 命令

该命令用来连接到 MySQL 服务器,前面的文章 已经介绍,这里就不多加赘述。

mysqladmin 命令

执行管理操作的命令行客户端,例如创建或删除数据库、重新加载授权表、检查服务器的配置以及状态、停止服务器等,语法为:

mysqladmin [options] command [command-arg] [command [command-arg]] ...

常用选项如下:

  • -h HOST_NAME--host=HOST_NAME - 指定连接的主机名或 IP 地址
  • -u USER--user=USER- 指定连接的用户
  • -P PORT_NUM--port=PORT_NUM - 指定端口
  • --password[=password]-p[password] - 使用的密码,"[ ]"表示是可选的。若在命令行中指定密码,-p短选项的后面并没有空格。在命令行中直接使用密码并不安全

语法中的 command 可以是:

  • create DB_NAME - 创建指定的新库
  • debug - 将 debug 信息写入到错误日志中。需要注意的是,连接的用户必须具有 super 静态权限。
  • drop DB_NAME - 删除指定的库及其所有表
  • extended-status - 显示服务器状态变量以及对应值
  • flush-hosts - 清除主机缓存中的所有信息。需要注意的是,连接的用户必须具有 drop 或 reload 静态权限。
  • flush-privileges -重新加载授权表
  • reload - 重新加载授权表
  • flush-status - 清除状态变量
  • flush-tables - 刷新所有表的缓存
  • password PASSWORD - 设置新密码(可用双引号包含有特殊字符的密码),在 Windows 中,应使用单引号包含有特殊字符的密码
  • ping - 检查服务器是否可用
  • shutdown - 关闭服务器
  • start-replica - 在 replica server 上启动复制
  • status - 显示简短的服务器状态信息
  • stop-replica - 在 replica server 上停止复制

如您所见,有些 command 不需要添加参数,但有些 command 必须添加一个或多个参数。

mysqlcheck 命令

该客户端命令用来执行对表的维护(检查、修复、优化或分析),并调用 CHECK TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE 这四个 SQL 语句来完成特定操作,需要注意的是,并不是所有存储引擎都支持这四种操作,比如对于 Innodb 存储引擎,可以使用 CHECK TABLE 进行检查,但不能使用 REPAIR TABLE 进行修复。

三种通用语法如下:

# 若在数据库名称后不指定任何表,则表示检查当前库的所有表
mysqlcheck [options] db_name [tbl_name ...]

# "--databases" 后指定一个或多个数据库名称,多个数据库名称用空格隔开
mysqlcheck [options] --databases db_name1 db_name2 ...

# "--all-databases" 表示检查所有库
mysqlcheck [options] --all-databases

例如,您需要检查 world 库下的 city 表:

mysqlcheck world city

使用建议
当使用 mysqlcheck 命令之前,最好对操作的库或表进行备份,这是因为执行 mysqlcheck 命令有可能会导致数据丢失。

除了在命令行中使用选项外,您也可以在配置文件(/etc/my.cnf) 的 "[mysqlcheck]" 或 "[client]" 组下面使用选项。

常用选项如下:

  • -h HOST_NAME--host=HOST_NAME - 指定连接的主机名或 IP 地址
  • -u USER--user=USER- 指定连接的用户
  • -P PORT_NUM--port=PORT_NUM - 指定端口
  • --password[=password]-p[password] - 使用的密码,"[ ]"表示是可选的。若在命令行中指定密码,-p短选项的后面并没有空格。在命令行中直接使用密码并不安全
  • --all-databases - 检查所有库下的所有表
  • --analyze - 分析表
  • --auto-repair - 如果检查的表已经损坏,自动修复它
  • --check - 命令的默认选项(即 mysqlcheck 等于 mysqlcheck --check),用来检查表是否有错误
  • --databases - 将该选项后的参数全部解释为数据库名称
  • --extended - 检查并修复表,该过程需要很长时间并产生大量的垃圾行
  • --medium-check - 执行比 --extended 操作更快的检查(在大多数场景下足够使用)
  • --optimize - 优化表
  • --repair - 执行一个可以修复几乎所有问题的修复(除了不唯一的唯一键)

示例如下:

# 检查 world 库下的 city 表
Shell > /usr/local/mysql8/bin/mysqlcheck -h localhost -u root -p world city

# 检查表的同时也修复损坏的表
Shell > /usr/local/mysql8/bin/mysqlcheck -h localhost -u root -p --auto-repair world city

# 检查所有数据库下的所有表,并修复它们
Shell > /usr/local/mysql8/bin/mysqlcheck -h localhost -u root -p --auto-repair --all-databases

# 优化特定的表来提升性能
Shell > /usr/local/mysql8/bin/mysqlcheck -h localhost -u root -p --optimize world city

mysqldump 命令

前面的文章 已经说明。

mysqlslap 命令

前面的文章 已经说明。

mysqlshow 命令

该命令用来显示数据库、表、列以及索引信息,语法为:

# 若未指定数据库,则显示数据库名称列表;若未指定表,则显示数据库中所有匹配的表;若未指定列,则显示表中所有匹配的列以及列的类型。
mysqlshow [options] [db_name [tbl_name [col_name]]]

常用选项如下:

  • -h HOST_NAME--host=HOST_NAME - 指定连接的主机名或 IP 地址
  • -u USER--user=USER- 指定连接的用户
  • -P PORT_NUM--port=PORT_NUM - 指定端口
  • --password[=password]-p[password] - 使用的密码,"[ ]"表示是可选的。若在命令行中指定密码,-p短选项的后面并没有空格。在命令行中直接使用密码并不安全

示例如下:

Shell > /usr/local/mysql8/bin/mysqlshow -h localhost -u root -p world
Enter password:
Database: world
+-----------------+
|     Tables      |
+-----------------+
| city            |
| country         |
| countrylanguage |
+-----------------+

Shell > /usr/local/mysql8/bin/mysqlshow -h localhost -u root -p world city
Enter password:
Database: world  Table: city
+-------------+----------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field       | Type     | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------------+----------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| ID          | int      |                    | NO   | PRI |         | auto_increment | select,insert,update,references |         |
| Name        | char(35) | utf8mb4_0900_ai_ci | NO   |     |         |                | select,insert,update,references |         |
| CountryCode | char(3)  | utf8mb4_0900_ai_ci | NO   | MUL |         |                | select,insert,update,references |         |
| District    | char(20) | utf8mb4_0900_ai_ci | NO   |     |         |                | select,insert,update,references |         |
| Population  | int      |                    | NO   |     | 0       |                | select,insert,update,references |         |
+-------------+----------+--------------------+------+-----+---------+----------------+---------------------------------+---------+

管理和实用程序

主要介绍这三个:

  • innochecksum - 对于 InnoDB 存储引擎,用来打印 InnoDB 文件的校验和(需 MySQL 实例未运行)。
  • mysqlbinlog - 用来读取二进制日志文件中的内容
  • mysqldumpslow - 用来读取慢查询日志文件的内容

innochecksum 命令

语法为:

innochecksum [options] file_name

常用选项:

  • --help - 帮助信息
  • --count - 打印文件中的页数
  • --start-page=NUM - 从指定页开始
  • --end-page=NUM - 从指定页结束
  • --page=NUM - 检查指定的页
  • --strict-check - 执行严格的校验和算法

示例如下:

# 检查所有表空间文件
## 通配符(*) 不适用于 Windows 操作系统
Shell > /usr/local/mysql8/bin/innochecksum /usr/local/mysql8/data/*/*.ibd

mysqlbinlog 命令

语法为:

mysqlbinlog [options] log_file ...
# 旧版本的 "show master status;" 已被弃用并不再支持
## 在复制技术中,若要查看副本的状态,请使用 "show replica status;"
show binary log status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000080 |      158 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

从输出内容可知,当前 MySQL 实例所使用的是 binlog.000080 这个文件。

Shell > /usr/local/mysql8/bin/mysqlbinlog /usr/local/mysql8/data/binlog.000080
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#260110 12:00:48 server id 1  end_log_pos 127 CRC32 0xb8e15345  Start: binlog v 4, server v 8.4.6 created 260110 12:00:48 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
8M5haQ8BAAAAewAAAH8AAAABAAQAOC40LjYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADwzmFpEwANAAgAAAAABAAEAAAAYwAEGggAAAAAAAACAAAACgoKKioAEjQA
CigAAAFFU+G4
'/*!*/;
# at 127
#260110 12:00:49 server id 1  end_log_pos 158 CRC32 0x00172e3d  Previous-GTIDs
# [empty]
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

mysqlbinlog 还可以用来读取远程机器的二进制日志信息:

Shell > /usr/local/mysql8/bin/mysqlbinlog -h 192.168.100.20 -u jack -p /data/binlog.binlog.000001

mysqldumpslow 命令

语法为:

mysqldumpslow [options] [log_file ...]

慢查询日志:该日志的主要作用用来分析当前 MySQL 实例的性能瓶颈问题(当超过了 long_query_time=10 时就会被记录),默认未开启(slow_query_log=0)。

杂项工具

pererr 命令

该命令用来显示错误代码的详细信息,语法为:

perror [options] errorcode ...

例如:

Shell > /usr/local/mysql8/bin/perror 1  13 1064
OS error code   1:  Operation not permitted
MySQL error code MY-000001: Can't create/write to file '%s' (OS errno %d - %s)
OS error code  13:  Permission denied
MySQL error code MY-000013: Can't get stat of '%s' (OS errno %d - %s)
MySQL error code MY-001064 (ER_PARSE_ERROR): %s near '%-.80s' at line %d

需要注意的是,同一个错误代码在不同操作系统中有不同的含义。

Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇