0


【MySQL 进阶】MySQL 程序 -- 详解

一、MySQL 程序简介

MySQL 安装完成通常会包含如下程序:


1、Linux 系统

程序⼀般在 /usr/bin 目录下,可以通过命令查看:


2、Windows系统

目录:你的安装路径\MySQL Server 8.0\bin,可以通过命令查看:

可以在官网查阅相关可执行程序的介绍:MySQL


每个 MySQL 程序都有许多不同的选项。大多数程序都提供一个 --help选项,可以使用该选项来获取程序不同选项的描述。例如: mysql --help,可以通过在命令行或配置文件中指定选项来覆盖 MySQL 程序的默认选项值。


3、常用的 MySQL 程序


二、mysqld - MySQL 服务器(介绍)

mysqld 也被称为 MySQL 服务器,是一个多线程程序,对数据目录(可以理解为 mysql 的主要工作目录)进行访问管理(包含数据库和表)。数据目录也是其他信息(如日志文件状态文件)的默认存储位置。

tips:mysqld 中的 d 表示 daemon 后台程序。

当 MySQL 服务器启动时,会侦听指定的端口、处理来自客户端程序的网络连接,并管理不同客户端对数据库的访问。

mysqld 程序有许多选项可以在启动时指定 。运行以下命令查看完整的选项列表:mysqld --verbose --help


三、mysql - MySQL 命令行客户端

1、mysql 客户端简介

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

mysql 的基本使用非常简单,回顾一下连接数据库的方式,打开终端并输入以下命令:

# 连接MySQL服务器,⻓选项格式
mysql --user=user_name --password [db_name]
# 短选项格式
mysql -uuser_name -p [db_name]
# 输⼊密码
Enter password: your_password


2、mysql 客户端选项

(1)指定选项的方式

  • 在 mysql 后面的命令行中列出选项。
  • 在 mysql 后面指定配置文件的路径,以便在程序启动时读取配置文件中的选项,并解析对应程序选项的值,应用在启动参数中。
  • 使用环境变量中的选项。

(2)mysql 客户端命令常用选项

注意:如果选项的值中包含空格,那么值需要包含在双引号中。


(3)在命令行中使用选项

A. 选项应在程序名之后给出

B. 选项以单破折号 "-" 或双破折号 "--" 号开头
  • 表示短格式, -- 表示长格式。

例如:-?和 --help 都表示 MySQL 程序显示它的帮助消息。

mysql -?
mysql --help

C. 选项名称区分大小写

-v 和 -V 都是合法的,但含义不同,它们分别是 --verbose 和 --version 选项的相应缩写形式,分别表示尽可能详细的显示结果和显示版本号。

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

# 以下两个等价
mysql --version 
mysql -V

D. 某些选项需要在后面指定⼀个值

例如,-h 127.0.0.1 或 --host=127.0.0.1 表示向客户端程序指定 MySQL 服务器主机。

mysql -h 127.0.0.1
msyql --host=127.0.0.1

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

例如:--host=127.0.0.1、-h 127.0.0.1 和 -h 127.0.0.1 是等价的。但是对于密码选项的短格式,如果要指定密码,选项与值之间不能有空格,如下所示:

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

注意:在命令行中,第⼀个不带破折号 - 的值被解析为要访问的数据库名,所以 --database 选项一般可以省略。


F. 在选项名称中,破折号 ( - ) 和下划线 ( _ ) 在大多数情况下可以互换使用,但前导破折号不能转为下划线

例如: --skip-grant-tables 和 --skip_grant_tables 是等价的。


G. 对于采用数值的选项,该值可以带有后缀 K , M 或 G 以指示乘数 1024、1024^2或 1024^3

例如,以下命令告诉 mysqladmin 对服务器执行 1024 次 ping,每次 ping 之间休眠 3 秒。

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

H. 在命令行中包含空格的选项值必须用引号引起来

例如, --execute(或 -e)选项与 mysql 一起使用时,表示将⼀个或多个 SQL 语句发送给服务器执行并显示结果。


3、选项(配置)文件

大多数 MySQL 程序都可以从选项文件(配置文件)中读取启动选项。可以在选项文件中指定常用选项,这样就不用在每次运行程序时都在命令行中输入它们。大部分选项文件都是纯文本格式,可以使用任何文本编辑器创建


(1)使用方法

选项 --defaults-file可以指定要使用的选项文件,客户端程序会读取并应用选项文件中的相关配置。

# Linux
mysql --defaults-file=/etc/mysql/my.cnf -uroot -p

# Windows
mysql "--defaults-file=C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" -uroot -p

虽然客户端与服务端的配置文件做了区分,但是我们一般不会分别在对应的配置文件中进行配置,而是把所有的配置都写在默认的配置文件中,便于维护和管理。

如果在使用 MySQL 程序时没有指定配置文件的路径,那么会自动读取默认路径下的配置文件。

注意:修改配置之前记得备份原有的配置文件,防止修改错误。


(2)选项文件位置及加载顺序

MySQL 按以下表格中的顺序查找并读取选项文件。如果文件不存在则需要手动创建。读取顺序从上到下后读取的文件中配置的选项优先级越高


A. 在 Windows 系统读取选项文件

对于两个配置文件中配置了相同的选项,那么优先级高的文件就覆盖掉优先级的文件中的选项。

  • %WINDIR% 表示 Windows 目录的位置,可以通过命令查看:

  • BASEDIR 表示 MySQL 的安装目录

  • %APPDATA% 表示应用程序数据的目录

  • DATADIR 代表 MySQL 数据目录

TIPS:使用 MySQL Installer 安装 MySQL 成功后, my.ini 默认在该目录下。


B. 在 Unix 和 Linux 系统上读取的选项文件

读取顺序和优先级和 Windows 一样。

在Windows 系统种配置文件的后缀名为 .ini 或 .cnf,在 Linux 系统中配置文件的后缀名为 .cnf。

  • ~ 表示当前用户的主目录
  • MYSQL_HOME 是设置的环境变量路径
  • DATADIR 代表 MySQL 数据目录

mysqld-auto.cnf 的优先级最高

For the server, one exception applies: The mysqld-auto.cnf option file in the data directory is processed last, so it takes precedence even over command-line options.


(3)选项文件语法

运行 MySQL 程序时在命令行上指定的任何长选项都可以在选项文件中指定,要获取选项列表可以使用如下命令:

# 客⼾端程序
[root@VM-8-5-centos ~]# mysql --help

# 服务端程序
[root@VM-8-5-centos ~]# mysqld --verbose --help
  • 选项文件中指定选项时,省略两个前导破折号,并且每一行表示一个选项。

例如:--quick 和 --host=127.0.0.1 在选项文件中应表示成 quick 和 host=127.0.0.1

  • 选项文件中的空行会被忽略。非空行可以采用以下任何形式:

**#*comment *, ;*comment ***

注释行以 # 或 ; 开,注释可以从一行的中间开始

**[ group ] **

设置选项的程序或组的名称,不区分大小写。如果选项组名称与程序名称相同,则组中的选项专门应用于该程序,例如,[mysqld] 和 [mysql] 组分别适用于 mysqld 服务端程序和 mysql 客户端程序。

**opt_name **

相当于命令行上的选项名。

**opt_name = value **

选项名对应的值,可以使用转义序列 \b , \t , \n , \r , \ 和 *\s来表示*退格符、制表符、换行符、回车符、反斜杠和空格字符

  1. 选项名称和值中的前导和尾随空格会自动删除。
  2. 在 Windows 系统中设置路径应该使用转义字符。
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0"

# 或

basedir="C:/Program Files/MySQL/MySQL Server 8.0"

[client]

MySQL 发行版中所有客户端程序都会读取并应用这个组下的选项(除了 mysqld),在这个组下可以指定适用于所有客户端程序的通用选项,例如配置用户名和密码(但要确保只有自己才可以访问这个文件以防止密码泄漏)。

# 在当前⽤⼾的home⽬录下创建.my.cnf,并在[client]写⼊公共配置
# 这⾥主要设置⽤了主机、端⼝、⽤⼾名、密码
root@guangchen-vm:~# vim .my.cnf
[client]
host=127.0.0.1
port=3306
user=root
password=123456

# 直接运⾏mysql,不⽤输⼊⽤⼾名密码可以直接成功登录
root@guangchen-vm:~# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.34 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input 
statement.

mysql>
  • 可以通过客户端程序名的形式为不同的客户端程序指定选项,例如 [mysql],当运行 mysql 程序时会读取并应用该组下的配置,如果选项名与 [client] 重复,[client] 中的选项将会被覆盖。
root@guangchen-vm:~# cat .my.cnf 
[client]
host=127.0.0.1
port=3306
user=root
password=123456

# 设置为必须输⼊密码
[mysql]
password

root@guangchen-vm:~# mysql
Enter password: # 强制要求登录时输⼊密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.34 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input 
statement.

mysql>

为特定 MySQL 版本设置选项可以使用 [mysqld-5.7] 、 [mysqld-8.0] 的组名。

  • 在选项文件中使用 !include 指令来包含其他选项文件(具体的配置文件路径),例如:!include/home/mydir/myopt.cnf
  • 在选项文件中使用 !includedir 指令来搜索指定目录中的其他选项文件(一个目录),例如:!include /home/mydir ,但不保证目录中选项文件的读取顺序。

TIPS:

  1. !includedir 在 Unix 和 Linux 操作系统中会搜索指定⽬录下任何以 .cnf 为后缀的文件。在 Windows 中,会搜索指定目录下任何以 .ini 或 .cnf 为后缀的⽂件
  2. 只会读取包含文件中当前客户端的组配置,例如当前运行的是 mysql 程序,那么只会读取 [mysql] 组中的选项配置。

注意:在 Windows中请确保在配置文件的最后一行加一个换行符,否则该行将被忽略。


(4)设置客户端全局编码格式

在 Linux下 编辑全局配置⽂件默认位置 /etc/mysql/my.cnf ,初始内容如下:

root@guangchen-vm:~# vim /etc/mysql/my.cnf

# Copyright (c) 2015, 2023, Oracle and/or its affiliates.
#
# ... 省略
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

# 以下区域可以根据需要进⾏配置

在已有内容下方输⼊相应的配置,我们要为客户端设置全局的编码格式为 utf8mb4,那么在 [client] 节点下指定相应的选项即可。

[client] # 所有客⼾端程序者会读取这个节点下的配置信息

default-character-set=utf8mb4 # 指定编码格式为utf8mb4

4、mysql 客户端命令

使用 mysql 客户端程序连接到数据库服务器之后,可以发送 SQL 语句到服务器执行,并以 ";"(分号)、\g 或 \G 结束。

  1. ; 与 \g 结束表示以表格****形式展示结果。
  2. \G 结束表示以行****形式展示结果(列名:具体的信息)。
  3. 如果当前已经输⼊了一部分 SQL 语句想重新输入可以输入 Ctrl+C 中断当前输入。

在当前模式下,mysql 还有⼀组自己的命令,可以输入 helpor \h 查看命令列表:

前面表示的是完整的指令,括号内表示的是短指令格式。

使用 help contents 命令可以查看关于 MySQL 数据库使⽤的具体帮助,包括用户管理、SQL 语法、数据类型、组件等相关内容列表。

通过 help contents 中的具体条目查看介绍,例如:help Data Types

这里说明要查看关于数据类型的帮助信息:

继续输入 help 具体的条目。查看关于此条目的详细说明,例如:help BIT

以下显示关于 BIT 数据类形的具体描述:


5、从 .sql 文件执行 SQL 语句

(1)使用 source 命令导入

使用常见:开发环境 --> 测试环境 --> 生产环境

有时候我们需要从 .sql 文件执行一些 SQL 语句,比如要把一个数据库从一台服务器 A 复制到另一台服务器 B 上,那么可以先从服务器 A 导出数据到 .sql 文件,然后在服务器 B 执行这个 .sql 文件。下面演示⼀下 source 命令的使用方法:

A. 准备要执行的 .sql 文件,名为 test_db.sql


B. 确定 .sql 文件的绝对路径:/root/test_db.sql


C. 连接数据库查看已有数据库


D. 使用 source 命令执行 .sql 文件的 SQL 语句


E. 查看数据库并查询数据,验证导入是否成功


(2)使用 mysql 客户端导入

直接使用 mysql 客户端程序导入 .sql 文件并执行相应的 SQL 语句,可以使用以下命令:

登录数据库并验证是否导入成功:可以根据实际需要选择导入 .sql 的方式。


四、工具包中的其他程序

在命令行中使用 MySQL 发行版中的其他工具时,一些选项是公共的,比如用户名和密码,使用方法和 mysql 相同,在这里统一列出,后面在介绍不同的工具时,只讨论个性的选项及作用,公共选项如下所示:


1、mysqlcheck - 表维护程序

(1)作用

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

  • 分析的作用是查看表的关键字分布,能够让 sql 生成正确的执行计划(支持 InnoDB,MyISAM,NDB)
  • 检查的作用是检查表的完整性以及数据库表和索引是否损坏(支持 InnoDB,MyISAM,ARCHIVE,CSV)
  • 优化的作用是回收空间、减少碎片、提高 I/O(支持 InnoDB,MyISAM,ARCHIVE)
  • 修复的作用是修复可能已经损坏的表(支持 MyISAM,ARCHIVE,CSV)

(2)注意事项

  1. 当使用 mysqlcheck 工具时,MySQL 服务器必须在运行状态
  2. 执行过程中相应的表将会被锁定,所以其他的操作将会被挂起。
  3. 不是所有的存储引擎都支持以上四种操作,如果遇到不支持的引擎会报出相应的错误。
  4. 执行表修复操作之前对表进行备份,在某些情况下可能会导致数据丢失。

(3)使用方法

  • 一般通过以下三种方法使用 mysqlcheck
mysqlcheck [options] db_name [tbl_name ...]
mysqlcheck [options] --databases db_name ...
mysqlcheck [options] --all-databases

如果在 db_name 后没有指定任何表名,或者使用 --databases 或 --all-databases 选项,那么整个数据库都会被检查。


(4)常用选项

mysqlcheck 有如下常用选项,可以在命令行中指定,也可以在选项文件中通过**[mysqlcheck] 和 [client]**组进行指定。

如果要修复 InnoDB 存储引擎的数据,要把 InnoDB 存储引擎的表转化成 MyIsam 存储引擎。


(5)mysqlcheck 的特殊使用

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


2、Mysqldump - 数据库备份程序

(1)作用

mysqldump 客户端程序可以执行逻辑备份并生成一组 SQL 语句,其中包含原始数据库和表的定义以及表中的数据,以便实现对数据库的简单备份或复制。mysqldump 命令可以生成 CSV、或 XML 格式的文件。


(2)注意事项

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

(3)使用方法

mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases

如果在 db_name 后没有指定任何表名,或者使用 --databases 或 --all-databases 选项,那么整个数据库都会被转储。

举例:


(4)常用选项

mysqldump 有如下常用选项,可以在命令行中指定,也可以在选项文件中通过**[mysqldump] 和 ****[client]** 组进行指定。


3、mysqladmin - MySQL 服务器管理程序

(1)作用

mysqladmin 是⼀个执行管理操作的客户端(配合使用 mysqladmin 的用户必须具备管理员权限)。可以⽤来检查服务器的配置和当前状态,以及创建和删除数据库等。


(2)使用方法

mysqladmin 可以使用以下语法:

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

(3)支持的命令

语法中的 command 表示命令,有些命令后面需要跟上⼀个参数,如下列出了 mysqladmin 的常用命令:

A. version

显示来自服务器的版本信息。

  • 查看 MySQL 版本:

  • 查看服务器状态:

  • Uptime MySQL:服务器已运行的秒数。
  • Threads:活动线程(客户端)的数量。
  • Questions:自服务器启动以来客户端的问题(查询)数。
  • Slow queries:慢 SQL 的查询数。
  • Opens:服务器已打开的表数。
  • Flush tables:服务器已执行 flush-*、refresh 和 reload 命令的数量。
  • Open tables:当前打开的表数。

B. create db_name

创建⼀个数据库名为 db_name 。

创建数据库时使用的编码集是选项文件中配置的编码集,如果没有指定编码集,那么就使用当前 MySQL 版本默认的编码集。


C. drop db_name

删除名为 db_name 的数据库及其所有表。


D. extended-status

显示服务器状态变量的值。

E. flush-hosts

刷新主机缓存中的所有信息。


F. flush-logs [log_type ...]

刷新所有日志。 log_type 中可以提供以下⼀种或多种日志类型 binary,engine,error,general,relay,slow,多个类型之间用空格分隔。


G. flush-privileges

重新加载授权表。


H. flush-status

清除状态变量。


I. flush-tables

刷新所有表。


J. flush-threads

刷新线程缓存。


K. password new_password

设置新密码。

  • 如果密码中有空格必须用双引号把密码包裹起来。
  • password 后可以省略新密码,mysqladmin 会在之后提示输⼊新密码。
  • password 做为最后一个 command 时才可以省略密码值,否则下⼀个参数将作为密码被设置。

Warning 有可能存在安全问题

Setting a password using mysqladmin should be considered insecure. On some systems, your password becomes visible to system status programs such as ps that may be invoked by other users to display command lines. MySQL clients typically overwrite the command-line password argument with zeros during their initialization sequence. However, there is still a brief interval during which the value is visible. Also, on some systems this overwriting strategy is ineffective and the password remains visible to ps. (SystemV Unix systems and perhaps others are subject to this problem.)


L. ping

检查服务器是否可用。


M. processlist

显示活动服务器线程的列表。

默认 MySQL 服务器可以维护 150 个活动连接。如果连接被用完了,可以通过 kill 去手动指定结束休眠时间最长的那个线程。 

N. kill id , id ,...

终止服务器线程。如果给出了多个线程 ID 值,则列表中不能有空格。


O. reload

重新加载授权表。


P. refresh

刷新所有表。

Q. shutdown

停止服务器。


R. start-replica

在副本服务器上开始复制。MySQL 8.0.26 及以后的版本使用此命令。

S. start-slave

在副本服务器上开始复制。MySQL 8.0.26 之前使⽤此命令。

T. status

显示简短的服务器状态消息。


U. stop-replica

停止副本服务器上的复制。MySQL 8.0.26 及以后的版本使用此命令。


V. stop-slave

停止副本服务器上的复制。MySQL 8.0.26 之前使⽤此命令。


W. variables

显示服务器系统变量及其值。


(4)常用选项

mysqladmin 的常用选项参考公共选项部分,可以在命令行中指定,也可以在选项文件中通过 **[mysqladmin] 和 ****[client]**组进行指定。


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

(1)作用

**mysqlshow **客户端可用于快速查看存在哪些数据库、数据库中的表以及表中的列或索引。


(2)注意事项

mysqlshow 为⼀些 SHOW 语句提供了⼀个命令行接口。

关于SHOW的使用参见官方文件 “SHOW语句”:

MySQL :: MySQL 8.0 Reference Manual :: 6.5.7 mysqlshow — Display Database, Table, and Column Information


(3)使用方法

mysqlshow 可以使用以下语法:

mysqlshow [options] [db_name [tbl_name [col_name]]]
  • db_name tbl_name col_name 可以使用通配符 * 、 ? 、 % 或 _。
  • 如果没有指定数据库,则显示所有数据库名称列表。
  • 如果没有指定表,则显示数据库中所有匹配的表。
  • 如果没有指定列,则显示表中所有匹配的列和列类型。
  • 输出仅显示当前权限可以访问的数据库、表或列的名称。

显示 test_db 数据库中的所有表:

显示 student 表中的所有字段:

显示 student 表中 id 字段的信息:


(4)常用选项

mysqlshow 的常用选项参考公共选项部分,可以在命令行中指定,也可以在选项文件中通过 **[mysqlshow] 和 ****[client] **组进行指定,具体选项参考公共选项列表。


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

(1)作用

在平时使用 MySQL 数据库时,经常进行查询操作,有些查询语句执行的时间非常长,当执行时间超过设定的阈值时,我们称这个查询为慢查询,慢查询的相关信息通常需要用日志记录下来称为慢查询日志,mysqldumpslow 可以解析慢查询日志文件并汇总其内容(进行慢查询对应的 SQL 优化的依据)。


(2)注意事项

通常情况下,**mysqldumpslow **会将相似的查询分组并显示摘要输出,一般会把数字和字符串用 N 和 "S" 代替,要想显示真实的值可以使用 -a 和 -n 选项。


(3)使用方法

mysqldumpslow 可以使用以下语法:

mysqldumpslow [options] [log_file ...]

在没有给出任何选项的输出如下:

Reading mysql slow query log from /usr/local/mysql/data/mysqld80-slow.log
Count: 1 Time=4.32s (4s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
 insert into t2 select * from t1 # 执⾏的SQL

Count: 3 Time=2.53s (7s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
 insert into t2 select * from t1 limit N # 执⾏的SQL

Count: 3 Time=2.13s (6s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
 insert into t1 select * from t1 # 执⾏的SQL

# Count:执行的次数    Time:单次的耗时    Lock:申请与释放锁所用时间    Rows:获取数据所用时间

(4)常用选项

mysqldumpslow 的常用选项:

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

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

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

二进制日志文件:我们平时对数据库的修改,包括对数据的增删改,都会被描述成⼀个 “事件”,每个 “事件” 都会以二进制的形式记录在一个文件里,这个文件就是服务器的二进制日志文件,称为 Binary Log 或 binlog。


(1)作用

mysqlbinlog 能够以文本格式显示二进制日志文件中的内容。


(2)注意事项

binlog 的默认保存路径是数据目录:

  • Linux下默认目录:**/var/lib/mysql **
  • Windows下默认目录:C:\ProgramData\MySQL\MySQL Server 8.0\Data

binlog 是以 .00000n 结尾命名的⽂件,n 不断递增。

# binlog的名字可以在选项⽂件⾥配置,我这⾥默认的是binlog开头
root@guangchen-vm:/var/lib/mysql# ll binlog*
-rw-r----- 1 mysql mysql 505 8⽉ 29 18:46 binlog.000001
-rw-r----- 1 mysql mysql 180 8⽉ 29 19:14 binlog.000002
-rw-r----- 1 mysql mysql 157 9⽉ 1 11:55 binlog.000003
-rw-r----- 1 mysql mysql 180 9⽉ 1 14:20 binlog.000004
-rw-r----- 1 mysql mysql 180 9⽉ 1 14:24 binlog.000005
-rw-r----- 1 mysql mysql 544 9⽉ 1 19:17 binlog.000006
-rw-r----- 1 mysql mysql 180 9⽉ 4 12:06 binlog.000007
-rw-r----- 1 mysql mysql 180 9⽉ 4 18:57 binlog.000008
-rw-r----- 1 mysql mysql 180 9⽉ 5 19:12 binlog.000009
-rw-r----- 1 mysql mysql 37496 9⽉ 6 19:25 binlog.000010
-rw-r----- 1 mysql mysql 157 9⽉ 7 12:18 binlog.000011
-rw-r----- 1 mysql mysql 157 9⽉ 7 12:18 binlog.000012
-rw-r----- 1 mysql mysql 192 9⽉ 7 12:18 binlog.index


(3)使用方法

mysqlbinlog 可以使用以下语法:

mysqlbinlog [options] log_file ...

例如要显示名为 binlog.000010 二进制日志⽂件的内容,可以使用以下命令:

root@guangchen-vm:/var/lib/mysql# mysqlbinlog binlog.000010

# ... 略
# at 37380
#230906 15:30:33 server id 1 end_log_pos 37442 CRC32 0x6d3de7e6 
Write_rows: table id 119 flags: STMT_END_F

BINLOG '
mSr4ZBMBAAAAQgAAAASSAAAAAHcAAAAAAAEAB3Rlc3RfZGIAB3N0dWRlbnQABAMDDw8EUABQAA8B
AQACAS1oGW+U
mSr4ZB4BAAAAPgAAAEKSAAAAAHcAAAAAAAMAAgAE/wAFAAAAVcMAAAbpkrHkuIMKcXFAYml0LmNv
bebnPW0=
'/*!*/;
# ... 略

ib_logfile1 的输出内容中包含各种事件,事件信息包括 SQL 语句、执行语句的服务器 ID、语句执行时的时间戳、花费的时间等等。


(4)常用选项

mysqlbinlog 有如下常用选项,可以在命令行中指定,也可以在选项文件中通过 [mysqlbinlog] 和 [client] 组进行指定。

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

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

7、mysqlslap - 负载仿真客户端

(1)作用

mysqlslap 是⼀个诊断程序,⽤于模拟 MySQL 服务器的客户端负载,并报告每个阶段的时间,就好比多个客户端正在访问服务器⼀样。


(2)使用方法

mysqlslap 可以使用以下语法:

mysqlslap [options]

(3)注意事项

  1. 可以通过 --create或**--query选项,指定包含 SQL 语句的字符串包含 SQL 语句的文件**。
  2. 如果指定一个包含 SQL 语句的⽂件,默认情况下每行必须包含一条语句(也就是说,隐式语句分隔符是换行符)
  3. 如果要把一条语句分为多行书写,可以使用 --delimiter 选项指定不同的分隔符。
  4. 不能在文件中包含注释,因为 mysqlslap 不能解析注释。
  5. mysqlslap 运行分为三个阶段:
  • 创建测试数据阶段:创建用于测试的库、表或数据,这个阶段使用单个客户端连接。
  • 运行负载测试阶段,这个阶段可以使用许多客户端连接。
  • 清理阶段:执行删除表,断开连接等操作,这个阶段使用单个客户端连接。

(4)示例

A. 提供自定义的创建和查询语句,创建 50 个客户端连接,每个客户端进行 200 次 select 查询(在一行内输入命令)


B. 让 mysqlslap 用包含两个 INT 列和三个 VARCHAR 列的表自动构建查询的 SQL 语句。使用 5 个客户端,每个客户端查询 20 次。


(5)常用选项

mysqlslap 有如下常用选项,可以在命令行中指定,也可以在选项⽂件中通过 [mysqlslap] 和 [client] 组进行指定。


本文转载自: https://blog.csdn.net/weixin_74531333/article/details/139389080
版权归原作者 炫酷的伊莉娜 所有, 如有侵权,请联系我们删除。

“【MySQL 进阶】MySQL 程序 -- 详解”的评论:

还没有评论