【MySQL高阶】6.MySQL数据目录,日志

文章目录

  • [2. MySQL数据目录](#2. MySQL数据目录)
  • [3. 日志简介](#3. 日志简介)
    • [3.1 一般查询日志和慢查询日志的输出形式](#3.1 一般查询日志和慢查询日志的输出形式)
      • [3.1.1 启动时的日志控制](#3.1.1 启动时的日志控制)
      • [3.1.2 运行时的日志控制](#3.1.2 运行时的日志控制)
      • [3.1.3 使用日志表优点](#3.1.3 使用日志表优点)
    • [3.2 一般查询日志](#3.2 一般查询日志)
      • [3.2.1 一般查询日志示例](#3.2.1 一般查询日志示例)
    • [3.3 慢查询日志](#3.3 慢查询日志)
      • [3.3.1 慢查询日志参数](#3.3.1 慢查询日志参数)
      • [3.3.2 慢查询日志内容](#3.3.2 慢查询日志内容)
        • [3.3.2.1 FILE格式](#3.3.2.1 FILE格式)
        • [3.3.2.2 TABLE格式](#3.3.2.2 TABLE格式)
      • [3.3.3 慢查询日志示例](#3.3.3 慢查询日志示例)

2. MySQL数据目录

MySQL 服务器的管理信息、业务数据、日志文件、磁盘缓冲文件默认存储在数据目录下,数据目录一般包含以下内容:

shell 复制代码
root@yudukai:/var/lib/mysql# ll
total 93556
drwx------  9 mysql mysql     4096 May 11 14:09  ./
drwxr-xr-x 54 root  root      4096 Nov  3  2025  ../
-rw-r-----  1 mysql mysql       56 Oct 27  2025  auto.cnf
-rw-r-----  1 mysql mysql      157 May 10 11:43  binlog.000102
-rw-r-----  1 mysql mysql      180 May 10 11:43  binlog.000103
-rw-r-----  1 mysql mysql      180 May 10 11:53  binlog.000104
-rw-r-----  1 mysql mysql      637 May 10 11:58  binlog.000105
-rw-r-----  1 mysql mysql      602 May 10 12:04  binlog.000106
-rw-r-----  1 mysql mysql      180 May 10 12:48  binlog.000107
-rw-r-----  1 mysql mysql  1957657 May 11 00:00  binlog.000108
-rw-r-----  1 mysql mysql      157 May 11 00:00  binlog.000109
-rw-r-----  1 mysql mysql      128 May 11 00:00  binlog.index
-rw-------  1 mysql mysql     1705 Oct 27  2025  ca-key.pem
-rw-r--r--  1 mysql mysql     1112 Oct 27  2025  ca.pem
-rw-r--r--  1 mysql mysql     1112 Oct 27  2025  client-cert.pem
-rw-------  1 mysql mysql     1705 Oct 27  2025  client-key.pem
-rw-r--r--  1 root  root         0 Oct 27  2025  debian-5.7.flag
-rw-r-----  1 mysql mysql   196608 May 11 00:00 '#ib_16384_0.dblwr'
-rw-r-----  1 mysql mysql  8585216 Oct 27  2025 '#ib_16384_1.dblwr'
-rw-r-----  1 mysql mysql     3454 May 10 12:48  ib_buffer_pool
-rw-r-----  1 mysql mysql 12582912 May 11 00:00  ibdata1
-rw-r-----  1 mysql mysql 12582912 May 10 12:48  ibtmp1
drwxr-x---  2 mysql mysql     4096 May 10 13:53 '#innodb_redo'/
drwxr-x---  2 mysql mysql     4096 May 10 12:48 '#innodb_temp'/
drwxr-x---  2 mysql mysql     4096 Oct 27  2025  mysql/
-rw-r-----  1 mysql mysql       14 May 11 14:09  mysqld-auto.cnf
-rw-r-----  1 mysql mysql 26214400 May 10 13:54  mysql.ibd
drwxr-x---  2 mysql mysql     4096 May 10 13:54  mysqlslap/
drwxr-x---  2 mysql mysql     4096 Oct 27  2025  performance_schema/
-rw-------  1 mysql mysql     1705 Oct 27  2025  private_key.pem
-rw-r--r--  1 mysql mysql      452 Oct 27  2025  public_key.pem
-rw-r--r--  1 mysql mysql     1112 Oct 27  2025  server-cert.pem
-rw-------  1 mysql mysql     1705 Oct 27  2025  server-key.pem
drwxr-x---  2 mysql mysql     4096 Oct 27  2025  sys/
drwxr-x---  2 mysql mysql     4096 Oct 27  2025  TestDB/
-rw-r-----  1 mysql mysql 16777216 May 10 13:55  undo_001
-rw-r-----  1 mysql mysql 16777216 May 10 13:55  undo_002
-rw-r-----  1 mysql mysql        8 May 10 12:48  yudukai.pid
root@yudukai:/var/lib/mysql# 
  1. 数据目录下的每个子目录都是一个数据库目录,对应服务器管理的一个数据库,包括MySQL 安装成功后创建的标准数据库:
    1. mysql目录对应于mysql系统库,包含mysql服务器运行时所需的信息,该数据库包含数据字典表和系统表;
    2. performance_schema目录对应于Performance Schema,提供了在运行时用于检查服务器内部执行的信息;
    3. sys目录对应于sys系统库,提供一组对象来帮助解释性能模式相关信息;
    4. 其他子目录对应于用户或应用程序创建的数据库,也就是说我们每创建一个数据库,就会在数据目录生成一个同名的目录来保存对应的数据。
  2. 服务器写入的日志文件
  3. InnoDB 表空间和日志文件
  4. 默认或自动生成的 SSLRSA 证书和密钥文件
  5. 服务器进程 ID 文件(当服务器运行时)
  6. mysqld-auto.cnf 文件用来存储持久化全局系统变量设置
    通过选项重新配置服务器,可以将上述某些项目重新定位到指定目录。

使用 --datadir 选项允许更改数据目录本身的位置。


3. 日志简介

MySQL Server 有以下几种日志,可以记录服务器正在发生的活动。

日志类型 日志信息
错误日志 (Error log) mysqld在启动、运行或停止时遇到的问题 比如:启动失败,运行时崩溃
一般查询日志 (General query log) 已建立的客户端连接和从客户端接收到的语句 一般不开启
慢查询日志 (Slow query log) 执行时间超过 long_query_time 指定秒数的查询 优化的时候查询
二进制日志 (Binary log) 更改数据的语句(也用于主从复制)
中继日志 (Relay log) 从源服务器接收到的数据更改 来源于集群中的主服务器
DDL日志(metadata log DDL 语句执行的操作
回滚日志/撤销日志(undo log) 用于事务的回滚操作 回滚的时候会根据日志里记录的依次回滚
重做日志(redo log) 用于服务器崩溃恢复 服务器崩溃的时候,把日志中没执行的继续执行
  • 默认情况下,除 Windows 上的错误日志外,不启用任何日志,Linux下默认开启错误日志和二进制日志
  • 在服务器运行期间可以控制一般查询和慢查询日志的禁用与开启,也可以更改日志文件名
  • 一般查询日志和慢查询日志记录可以写入日志表、日志文件或两者同时写入
  • 默认情况下,所有启用的日志将写入数据目录,可以通过刷新日志强制服务器关闭并重新打开日志文件
  • 通过 FLUSH LOGS 语句刷新日志来强制服务器关闭并重新打开日志文件,也可以使用mysqladminflush-logsrefresh 参数,或mysqldump--flush-logs--master-data 选项
  • 中继日志仅用于主从复制过程中的从服务器。

3.1 一般查询日志和慢查询日志的输出形式

如果启用一般查询日志和慢查询日志,日志的输出方式可以指定为日志文件或 mysql 系统库中的 general_logslow_log 表,也可以两者同时指定。


3.1.1 启动时的日志控制

  • log_output 系统变量指定日志输出的形式,但并不会真正的启用日志。

    log_output 可以有三个值,分别是: TABLE (表)、 FILE (文件)、 NONE (不输出)

    可以同时指定多个值,并用逗号隔开,未指定值时默认是 FILE ,如果列表中存在 NONE 则其他的不生效,也就是说 NONE 的优先级最高。

  • 通过设置 general_log 系统变量的值来控制一般查询日志的 开启 1 与 禁用 0(用01来控制开启和禁用) ,如果要为日志指定自定义的路径或文件名可以使用 general_log_file 系统变量(绝对路径)

  • 通过设置 slow_query_log 系统变量的值来控制慢查询日志的 开启 1 与 禁用 0 ,如果要为日志指定自定义的路径或文件名可以使用slow_query_log_file 系统变量(绝对路径)

  • 一般查询日志记录了所有的查询语句,慢查询日志可以说是一般查询日志的子集

  • 示例,以选项文件中的配置为例:

没开启的话,一般查询日志默认在:

慢查询日志默认在:

将一般查询日志写入日志表和日志文件:

mysql 复制代码
[mysqld]
#日志写入表和文件
log_output=TABLE,FILE 
#开启一般查询日志
general_log=1

仅将一般查询日志和慢查询日志写入日志表:

mysql 复制代码
[mysqld]
log_output=TABLE #日志写入表
general_log=1 #开启一般查询日志
slow_query_log=1 #开启慢查询日志

仅将慢查询日志写入日志文件:

mysql 复制代码
[mysqld]
log_output=FILE #日志文件
slow_query_log=1 #开启慢查询日志
  • 将一般查询日志和慢查询日志写入日志文件,并指定自定义的日志路径(修改路径,可能涉及到权限问题,需要修改权限)
mysql 复制代码
[mysqld]
#日志文件
log_output=FILE 
#开启一般查询日志 
general_log=1 
#指定自定义的文件名 
general_log_file=/var/lib/mysql/general.log 
#开启慢查询日志
slow_query_log=1 
#指定自定义的文件名
slow_query_log_file=/var/lib/mysql/slow_query.log

也有专属的可以单独修改一般查询日志和慢查询日志的输出形式,可以覆盖log_output,达到两者选择不同日志输出形式的效果。

mysql 复制代码
[mysqld]
# 开启一般查询日志(记录所有到达MySQL服务器的SQL语句)
# 1 表示开启,0 表示关闭
general_log = 1

# 设置一般查询日志的输出目标仅为"文件"
# 这是一个"专属覆盖"变量,它会让一般查询日志忽略下面 log_output 的设置,只写文件
general_log_output = FILE

# 开启慢查询日志(记录执行时间超过指定阈值的SQL语句)
# 1 表示开启,0 表示关闭
slow_query_log = 1

# 设置慢查询的时间阈值(单位:秒)
# 执行时间超过 2 秒的查询将被记录到慢查询日志中
long_query_time = 2

# 全局日志输出目标控制
# 设置为 'FILE,TABLE' 表示日志同时输出到文件和表中
# 注意:因为上面 general_log_output 已经把一般查询日志"拦截"并强制只写 FILE,
# 所以这个 log_output = FILE,TABLE 实际上只对慢查询日志生效,
# 最终效果:慢查询日志会同时写入文件和 mysql.slow_log 表中。
log_output = FILE,TABLE

修改查询日志文件名:

一般查询日志文件路径,名:var/lib/mysql/general.log

慢查询日志文件路径,名:var/lib/mysql/slow_query.log

每次修改前,最好选项名都去官方文档查一下是否有,不然服务器可能起不来,哪怕麻烦也要去验证。

mysql 复制代码
# MySQL 服务节点
[mysqld]

# MySQL 服务启动后监听的端口号
port=3306

# 数据目录的路径,这里演示的是windows下的配置,注意分隔符用/,如果是\则需要转义为\\.
# 把原data目录整体复制到新路径
# datadir=写具体的实现目录

# MySQL 服务器的字符集与排序规则
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci 

# 新建表时使用的存储引擎,windows下已默认配置
default_storage_engine=INNODB

# 时区
default-time-zone='+8:00'

# ################# 日志相关 #################
#日志文件
log_output=FILE,TABLE
#开启一般查询日志   
general_log=1     
#指定自定义的文件名   
general_log_file=/var/lib/mysql/general.log 

#开启慢查询日志
slow_query_log=1     
#指定自定义的文件名
slow_query_log_file=/var/lib/mysql/slow_query.log 

#错误日志的路径
log-error=/var/log/mysql/error.log

修改后重启一下MySQL服务器,然后看一下状态:

看一下是否配置成功:


3.1.2 运行时的日志控制

  • 在运行时修改 log_output 的值,以更改日志的输出形式,通过语句控制
  • 语法:SET [GLOBAL|SESSION] variable_name=value
mysql 复制代码
SET GLOBAL log_output=[FILE, TABLE, NONE]

general_log[={0|1}]slow_query_log[={0|1}] 可以表示启用和禁用一般查询日志和慢查询日志

general_log_fileslow_query_log_file 表示通用查询日志和慢查询日志文件名称

只对当前会话禁用或启用一般查询日志记录,将 SESSION 作用域的 sql_log_off 变量设置为 ONOFF


3.1.3 使用日志表优点

  • 可以通过 SQL 语句的条件查询过滤日志内容,从而选择满足特定条件的日志记录。比如,某个客户端的日志;
  • 可以通过客户端程序连接到服务器并查询表中的日志信息,无需登录服务器主机访问文件系统。
  • 日志记录具有标准格式,可看日志表的结构,可以使用以下语句:
mysql 复制代码
SHOW CREATE TABLE mysql.general_log; # 一般查询日志
SHOW CREATE TABLE mysql.slow_log; # 慢查询日志

3.2 一般查询日志

  • General query log一般查询日志,记录客户端连接或断开连接的信息,也会记录从客户端接收的每个SQL语句。如果开启将会产生大量的内容,非常耗费服务器资源,所以默认为关闭(不开启),要启用一般查询日志可以使用:请使用 --general_log[={0|1}]
  • 默认日志文件名为 host_name.log ,可以使用 general_log_file=file_name 修改;
  • 记当客户端连接的日志行,使用 connection_type 来指示用于建立连接的协议。 TCP/IP 表示不使用SSL建立的TCP/IP连接、 SSL/TLS 表示使用SSL建立的TCP/IP连接、 Socket 表示Unix套接字文件连接、 Named Pipe 表示Windows命名管道连接、 Shared Memory 表示Windows共享内存连接。
  • Mysqld按照接收到SQL语句的顺序将语句写入查询日志,这个顺序可能与语句执行的顺序不同。
  • 表结构如下:
mysql 复制代码
mysql> SHOW CREATE TABLE mysql.general_log;
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table       | Create Table                                                                                                                                                                                                                                                                                                                                                                      |
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| general_log | CREATE TABLE `general_log` (
    # 发生时间
  `event_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
    # 用户主机
  `user_host` mediumtext NOT NULL,
    # 执行当前SQL语句的系统线程ID
  `thread_id` bigint unsigned NOT NULL,
    # 选项文件中配置的server_id
  `server_id` int unsigned NOT NULL,
    # 日志的类型
  `command_type` varchar(64) NOT NULL,
    # 具体的SQL语句
  `argument` mediumblob NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8mb3 COMMENT='General log' |
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

3.2.1 一般查询日志示例

  • 查询表中的日志内容

通过正常的SQL语句查询日志:

mysql 复制代码
 mysql> select * from mysql.general_log\G;

可以通过CAST()函数把编码后的内容转换为可读的字符类型,CAST(要转换的内容 AS 目标数据类型)

mysql 复制代码
# 查看日志 
SELECT DATE_FORMAT(event_time, '%Y-%m-%d %H:%i:%s') AS time, 
 user_host, 
 thread_id, 
 server_id, 
 command_type, 
 CAST(argument AS CHAR) AS query  # query是我们重命名的
FROM mysql.general_log;

查看:执行后,重命名的query字段内容就是我们看得懂的查询语句了


  • 查看文件中的日志内容
mysql 复制代码
root@yudukai:/var/lib/mysql# cat general.log 
/usr/sbin/mysqld, Version: 8.0.43-0ubuntu0.22.04.2 ((Ubuntu)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
2026-05-12T02:28:32.064395Z	    0 Execute	CREATE TABLE performance_schema.innodb_redo_log_files(
`FILE_ID` BIGINT NOT NULL COMMENT 'Id of the file.',
`FILE_NAME` VARCHAR(2000) NOT NULL COMMENT 'Path to the file.',
`START_LSN` BIGINT NOT NULL COMMENT 'LSN of the first block in the file.',
`END_LSN` BIGINT NOT NULL COMMENT 'LSN after the last block in the file.',
`SIZE_IN_BYTES` BIGINT NOT NULL COMMENT 'Size of the file (in bytes).',
`IS_FULL` TINYINT NOT NULL COMMENT '1 iff file has no free space inside.',
`CONSUMER_LEVEL` INT NOT NULL COMMENT 'All redo log consumers registered on smaller levels than this value, have already consumed this file.'
)engine = 'performance_schema'
2026-05-12T02:29:48.858863Z	    8 Connect	root@localhost on  using SSL/TLS
2026-05-12T02:29:48.859340Z	    8 Query	select @@version_comment limit 1
2026-05-12T02:43:25.965362Z	    8 Quit	
2026-05-12T06:20:40.287685Z	    9 Connect	root@localhost on  using SSL/TLS
2026-05-12T06:20:40.288169Z	    9 Query	select @@version_comment limit 1
2026-05-12T06:20:48.451424Z	    9 Query	show variables like 'log_output'
2026-05-12T06:21:27.575631Z	    9 Query	show variables like 'slow_query_log'
2026-05-12T06:22:39.095475Z	    9 Query	show variables like 'general_log'
2026-05-12T06:23:10.990197Z	    9 Query	show variables like 'general_log_file'
2026-05-12T06:23:26.932568Z	    9 Query	show variables like 'slow_log_file'
2026-05-12T06:23:37.434868Z	    9 Query	show variables like 'slow_queue_log_file'
2026-05-12T06:23:45.749492Z	    9 Query	show variables like 'slow_query_log_file'
2026-05-12T06:31:59.999605Z	    9 Query	SHOW CREATE TABLE mysql.general_log
2026-05-12T06:32:42.687679Z	    9 Query	SHOW CREATE TABLE mysql.slow_log
2026-05-12T06:45:19.107188Z	    9 Query	select * from mysql.general_log
2026-05-12T06:45:30.884729Z	    9 Query	select * from mysql.general_log
2026-05-12T06:52:08.881959Z	    9 Query	SELECT DATE_FORMAT(event_time, '%Y-%m-%d %H:%i:%s') AS time, 
 user_host, 
 thread_id, 
 server_id, 
 command_type, 
 CAST(argument AS CHAR) AS query 
FROM mysql.general_log
root@yudukai:/var/lib/mysql# 

3.3 慢查询日志

  • 慢查询日志由执行时间超过系统变量 long_query_time 指定的秒数的 SQL 语句组成(例如:10s),并且检查的行数大于系统变量 min_examined_row_limit 指定值(查询语句返回的结果集中所包含的行数,例如10行)。

    想要被慢查询记录需要同时满足超过10s10行。

    被记录的慢查询需要进行优化,可以使用 mysqldumpslow客户端程序对慢日志进行分析汇总。

  • 获取初始锁的时间不计入执行时间,mysqld在执行完SQL语句并释放所有锁后才将符合条件的语句写入慢速查询日志,因此日志顺序可能与执行顺序不同。

一个SQL语句的执行经历的阶段:

  1. 执行线程要获取锁
  2. 执行SQL语句并返回结果
  3. 释放锁

1步,如果现场没有获取到锁就阻塞等待。

2-3步,是慢查询记录真正的执行时间


3.3.1 慢查询日志参数

  • long_query_time 的默认值是10,最小值是0

  • 默认情况下,不记录管理语句(DDL语句),也不记录不使用索引的查询

  • 默认为关闭(不开启),要启用慢查询日志可以使用:请使用 --slow_query_log[={0|1}] .

  • 默认日志文件名为 host_name-slow.log ,可以使用slow_query_log_file=file_name 修改;

  • 使用 --log-short-format 选项,以简要格式记录慢查询日志

  • 要记录管理语句,启用 log_slow_admin_statements 系统变量。管理语句包括 ALTER TABLE 、 ANALYZE TABLE 、 CHECK TABLE 、 CREATE INDEX 、 DROP INDEX 、 OPTIMIZE TABLEREPAIR TABLE

  • 要记录不使用索引的查询,启用 log_queries_not_using_indexes 系统变量。当记录不使用索引的查询时,日志会快速增长,通过设置系统变量log_throttle_queries_not_using_indexes 限制每分钟写入慢查询日志同类查询的数量,默认值是0,表示无限制。

    一定要记住配置一下每分钟记录的日志数。


3.3.2 慢查询日志内容

3.3.2.1 FILE格式
  • 如果启用慢查询日志并将 FILE 作为输出目标,每条语句前面都用一行来表示日志的字段,该行以 # 字符开头并包含以下内容:
    • Query_timeSQL语句的执行时间,单位秒
    • Lock_time: 获取锁的时间,单位秒
    • Rows_sent: 发送到客户端的行数
    • Rows_examined: 服务器检查的行数
  • 启用--log-slow-extra[={OFF|ON}]系统变量会将以下额外字段写入到FILE中,TABLE形式不受影响
    • Thread_id: 线程标识符
    • Errno: 错误码,没有发生错误则为 0
    • Killed: 如果语句被终止,用错误码表示原因,如果语句正常终止则为 0
    • Bytes_received: 接收到SQL语句的Bytes值。
    • Bytes_sent: 返回给客户端的Byte值。
    • Read_first: 索引中第一个条目被读取的次数,如果这个值很高,表明服务器正在执行大量完整索引扫描
    • Read_last: 读取索引中最后一个键的请求数,使用 ORDER BY 时关注
    • Read_key: 基于索引读取一行数据的请求数。如果这个值很高,表明表为当前查询建立了正确的索引
    • Read_next: 按索引排序读取下一行的请求数,查询具有范围约束的索引列,或者进行索引扫描,此值将递增。
    • Read_prev: 按索引排序读取前一行的请求数。主要用于优化ORDER BY...DESC
    • Read_rnd: 基于固定位置读取一行的请求数。这个值很高表示,正在执行大量需要对结果进行排序的查询,可能有很多查询进行了全表扫描整,或者没有正确使用索引的连接。
    • Read_rnd_next: 读取数据文件中下一行的请求数。如果进行大量的表扫描,这个值会很高。通常,表示表没有建立正确地索引,或者查询没有利用索引。
    • Sort_merge_passes: 排序算法完成的归并次数,如果这个值很大,考虑增加sort_buffer_size 系统变量的值。
    • Sort_range_count: 使用范围进行排序的次数。
    • Sort_rows: 排序的行数。
    • Sort_scan_count: 通过扫描表完成的排序数。
    • Created_tmp_disk_tables: 服务器在执行语句时创建内部磁盘临时表的数量。
    • Created_tmp_tables: 服务器在执行语句时创建的内部临时表的数量。
    • Start: 执行SQL语句开始时间
    • End: 执行SQL语句结束时间

3.3.2.2 TABLE格式

慢查询日志表的表结构如下:

mysql 复制代码
mysql> SHOW CREATE TABLE mysql.slow_log;
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table             |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| slow_log | CREATE TABLE `slow_log` (
  `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),# 开始时间
  `user_host` mediumtext NOT NULL,# 用户和所在的主机
  `query_time` time(6) NOT NULL,# 查询总耗时
  `lock_time` time(6) NOT NULL,# 争抢MySQL级别的锁的时间
  `rows_sent` int NOT NULL,# 返回客户端结果集中数据行的数量
  `rows_examined` int NOT NULL,# 服务器扫描表中数据行的数量
  `db` varchar(512) NOT NULL,# 数据库名
  `last_insert_id` int NOT NULL,# 最后一次插入
  `insert_id` int NOT NULL,# 插入的记录id
  `server_id` int unsigned NOT NULL,# 选项文件中配置的server_id
  `sql_text` mediumblob NOT NULL,# 具体执行的SQL语句
  `thread_id` bigint unsigned NOT NULL# 执行线程的id 
) ENGINE=CSV DEFAULT CHARSET=utf8mb3 COMMENT='Slow log' |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

建议使用日志文件的方式记录慢查询日志。


3.3.3 慢查询日志示例

#开头的三行,表示日志的开始

mysql 复制代码
Time Id Command Argument
# Time: 2023-10-22T03:34:57.593209Z
# User@Host: root[root] @ localhost [::1] Id: 10
# Query_time: 24.224840 Lock_time: 24.201250 Rows_sent: 0 Rows_examined: 1
use test_db;
SET timestamp=1697945673;
UPDATE ACCOUNT SET NAME='张三' where id = 1;
# Time: 2023-10-22T03:35:31.918024Z
# User@Host: root[root] @ localhost [::1] Id: 9
# Query_time: 19.012846 Lock_time: 19.012325 Rows_sent: 1 Rows_examined: 1
SET timestamp=1697945712;
select * from account where id < 2 FOR SHARE;
# Time: 2023-10-22T04:20:40.347153Z
# User@Host: root[root] @ localhost [::1] Id: 10
# Query_time: 50.412714 Lock_time: 50.411844 Rows_sent: 0 Rows_examined: 0
SET timestamp=1697948389;
UPDATE ACCOUNT SET NAME='张三' where id = 1;
# Time: 2023-10-22T09:27:02.918811Z
# User@Host: root[root] @ localhost [::1] Id: 10
# Query_time: 50.482737 Lock_time: 50.480508 Rows_sent: 0 Rows_examined: 0
SET timestamp=1697966772;
INSERT INTO child (id) VALUES (101);
相关推荐
DIY源码阁1 小时前
JavaSwing学生选课系统 - MySQL版
java·数据库·mysql·eclipse
福大大架构师每日一题1 小时前
rust 1.96.0 更新:语言、编译器、Cargo、Rustdoc、兼容性全面升级,必看完整解读
android·开发语言·rust
流星白龙1 小时前
【MySQL高阶】1.MySQL命令行客户端(1)
mysql
城管不管1 小时前
Agent——001
android·java·数据库·llm·prompt
暴力求解2 小时前
MySQL操作库
数据库·mysql
刮风那天2 小时前
Android 理解onTransitionReady(一)
android
流星白龙2 小时前
【MySQL高阶】2.MySQL命令行客户端(2)
android·mysql·adb
努力努力再努力wz2 小时前
【Qt入门系列】:QLabel控件详解:从文本显示到图片展示,再到内容布局与伙伴机制
android·开发语言·数据结构·数据库·c++·qt·mysql
流星白龙2 小时前
【MySQL高阶】5.MySQL服务器简介
服务器·mysql·adb