MYSQL日志查询
MYSQL日志概述
MYSQL日志分类
- 错误日志
- 二进制日志
- 查询日志
- 慢查询日志
Mysql错误日志log-error
log_error
的默认保存位置为 /var/lib/mysql/主机名.err
-- 查看错误日志保存位置
show variables like 'log_error%';
在计算机中,stderr
是指标准错误输出流(Standard Error)
。它是一个文件描述符(file descriptor)
,用于将程序运行时所产生的错误信息输出到屏幕
或重定向到其它文件。
在 MySQL8
中,log_error
参数设置为 stderr
表示将错误日志输出到标准错误输出流
中。这意味着 MySQL 会将错误日志信息直接打印到终端
上,而不会将错误日志写入到文件
中。log_error_verbosity
参数用于控制 MySQL8
错误日志的详细程度。它的三个取值分别表示:
1
:仅记录错误和严重警告信息(默认设置)。2
:记录错误、警告和普通警告信息。–建议值3
:记录所有错误和警告信息,包括调试信息。
-- 查看错误日志的位置和日志级别
show variables like '%log_error%';
配置错误日志
MySql8
的log_error
的默认保存位置为 /var/lib/mysql/主机名.err
log-error
变量是只读变量
,不能通过set
修改。
要配置错误日志的保存目录
,需要修改my.cnf
配置文件。vim /etc/my.cnf
[mysqld]
# 指定错误日志路径
log_error=/var/log/mysqld.log
# 指定日志级别
log_error_verbosity=2
配置完成后要重启mysqld服务
才能生效。
二进制日志binlog
二进制日志(BINLOG)记录了除了查询之外
的所有语句,也就是所有的增删改
语句。DDL语句和DML语句,但是不包括数据查询
语句。此日志对于灾难时的数据恢复起着极其重要
的作用,MySql的主从复制
,就是通过该BINLOG实现的。
MYSQL8的BINLOG
是默认开启
的。
-- 查看binlog是否开启
show variables like '%log_bin%';
binlog格式
MySQL8
的binlog
日志记录格式
默认是ROW
。
MySQL8
的binlog
格式有三
种:ROW
、STATEMENT
和MIXED
。
ROW
格式以每个修改行为单位记录更改事件,并将每个修改的行的前后值都记录在二进制日志中。可以确保从服务器上的数据与主服务器一致,但需要更多磁盘空间和网络带宽。STATEMENT
格式以SQL语句为单位记录更改事件,并将每个执行的SQL语句记录到二进制日志中。容易理解和分析,但可能会出现复制不一致问题。MIXED
格式是ROW
和STATEMENT
格式的混合体
,根据实际情况选择最合适的方式来记录更改事件。既能减少日志开销,又能保证数据一致性。
MySQL 8的binlog格式
建议选择Row
格式或Mixed
格式:
- 如果
数据一致性
非常重要,则选择ROW
格式; - 如果需要
平衡
日志开销和数据一致性,则选择MIXED
格式; - 如果应用程序只执行
简单的查询
,则可以考虑使用STATEMENT
格式。
-- 查看binlog的格式
show variables like 'binlog_format';
持久化配置binlog
[mysqld]
# 配置binlog文件前缀mysqlbin
## 生成的文件名:mysqlbin.00001,mysqlbin.00002
log_bin=mysqlbin
# 配置binlog的格式
binlog_format=MIXED
查看binlog事件
-- 查看所有binlog事件(日志)
show binlog events;
-- 查看当前正在使用的binlog文件的状态
-- 查看最新的binlog日志
show master status;
-- 查看指定binlog事件
show binlog events in 'binlog.000002';
可以使用mysqlbinlog
命令查看二进制日志
,也可以使用mysqldumpslow
命令对普通查询日志
进行分析
和统计
。
清空binlog
-- 清空所有的binlog日志文件
reset master;
-- binlog文件名又从00001开始
Mysql查询日志
MySql8的查询日志默认是未开启的。
注意:启用查询日志可能会对MySQL服务器性能产生一定的影响,因此在实际生产环境中建议谨慎使用,并根据实际需求进行相应的配置。
同时,启用查询日志后应定期清理日志文件和日志表以避免占用过多磁盘空间。
查询日志
记录用户执行的所有SQL语句
及其执行时间
等信息,但不包括增删改
操作。
配置日志查询
-- 查看查看日志是否开启
show variables like '%general_log%';
-- 查询日志的默认文件
/var/lib/mysql/主机名.log
-- 临时开启查询日志
set global general_log=1;
开启查询日志
,将记录所有的SELECT
、INSERT
、UPDATE
、DELETE
等语句,但不
记录DDL
(数据定义语言)语句,例如CREATE
、ALTER
和DROP
等语句。
[mysqld]
# 将查询日志输出到文件中
log_output=FILE
# 将查询日志输出到表,而不是文件
# log_output=TABLE
# 将查询日志输出到表和文件中
# log_output=FILE_AND_TABLE
# 启用查询日志
general_log=1
# 指定查询日志输出文件路径
general_log_file=/var/lib/mysql/general.log
配置完成后要重启mysqld服务
才能生效。
慢SQL查询日志
sql慢查询。
如果你想记录DDL
语句,可以使用MySQL 8的增强模式
的查询日志
,该模式可以记录所有的SQL语句
,包括SELECT
、INSERT
、UPDATE
、DELETE
、CREATE
、ALTER
、DROP
等语句。
-- 查看慢sql查询是否开启
show variables like '%slow_query_log%';
-- 查看慢sql的判定时间
show variables like 'long_query_time';
临时开启慢SQL查询
-- 临时开启慢查询日志
set global show_query_log=1;
配置慢SQL查询日志
[mysqld]
# 将查询日志输出到文件中
log_output=FILE
# 启用查询日志
general_log=1
# 指定查询日志输出文件路径
general_log_file=/var/lib/mysql/general.log
# 使用系统时间戳记录日志
log_timestamps=SYSTEM
# 记录查询响应时间统计信息
query_response_time_stats=ON
# 记录所有管理员执行的语句到慢查询日志中
log_slow_admin_statements=ON
# 将查询执行时间设置为0,会记录所有查询语句
# long_query_time=0
# 慢sql的判定时间
long_query_time=10
# 启用慢查询日志功能
slow_query_log=ON
# 指定慢查询日志输出文件路径
slow_query_log_file=/var/lib/mysql/slow-queries.log
# 设置最小扫描行数限制,只有扫描行数超过此限制的查询才会被记录到慢查询日志中
min_examined_row_limit=1000
配置完成后要重启mysqld服务
才能生效。
mysqldumpslow查看慢速查询日志中的查询
mysqldumpslow
是一个用于分析
MySQL慢查询日志
并提高数据库性能
的命令行工具。它可以用于识别导致MySQL数据库性能问题
的慢SQL查询。
该工具会解析慢查询日志并将相似的查询分组,以便您识别模式并相应地优化数据库。它还可以帮助您跟踪导致性能问题的特定查询。
mysqldumpslow
的一些关键特性包括:
- 可以按各种标准对查询进行排序,例如执行时间或执行次数。
- 可以根据各种参数(如特定数据库或用户)过滤查询。
- 可以以各种格式输出结果,包括制表符分隔值和 HTML。
# 按平均查询执行时间从高到低查看慢速查询日志中的查询
# -s 参数指定将日志文件中的查询按哪种方式进行排序
# c 表示按照查询执行平均时间排序
# -t 参数表示返回排名前 10 的查询
mysqldumpslow -t 10 -s c /var/log/mysql/mysql-slow.log
以下是mysqldumpslow
的一些使用示例
:
-s
:指定排序方式,默认按照查询时间倒序排列。可选值包括:t(按时间)、a(按查询次数)、l(按锁定时间)、r(按返回记录数)等。
-t
:指定输出前几个查询,默认为10。
-g
:指定匹配模式。例如,-g “left join” 只匹配包含“left join”的查询语句。
-a
:同时显示每条查询的完整语句以及相关信息。
-r
:反向排序。
-l
:限制分析的日志行数。
- 显示慢查询日志中前 10 条最耗时的查询
# -s 参数指定将日志文件中的查询按哪种方式进行排序
## -s t 表示将慢查询日志按照执行时间排序
# -t 参数表示返回排名前 10 的查询
mysqldumpslow -s t -t 10 /path/to/slow-query.log
- 显示慢查询日志中执行时间大于等于 5 秒的查询,并按照执行时间排序
# -s 参数指定将日志文件中的查询按哪种方式进行排序
## -s t 表示将慢查询日志按照执行时间排序
# -t 参数表示返回排名前 10 的查询
mysqldumpslow -t 5 -s t /path/to/slow-query.log
- 显示慢查询日志中出现次数最多的 5 个查询,并按照出现次数排序
# -s 参数指定将日志文件中的查询按哪种方式进行排序
# c 表示按照查询执行平均时间排序
# -t 参数表示返回排名前 10 的查询
mysqldumpslow -t 5 -s c /path/to/slow-query.log
- 显示慢查询日志中特定数据库中的查询,并按照执行时间排序
# -s 参数指定将日志文件中的查询按哪种方式进行排序
## -s t 表示将慢查询日志按照执行时间排序
# -d 指定要分析的数据库
mysqldumpslow -s t -d mydatabase /path/to/slow-query.log
- 将查询结果输出为 HTML 格式
# -s 参数指定将日志文件中的查询按哪种方式进行排序
## -s t 表示将慢查询日志按照执行时间排序
# -t 参数表示返回排名前 10 的查询
mysqldumpslow -s t -t 10 --html /path/to/slow-query.log > output.html
慢sql分析优化
explain分析执行计划的指标字段
https://blog.youkuaiyun.com/omaidb/article/details/120040657
mysql优化
https://blog.youkuaiyun.com/omaidb/article/details/130289660
查看MySQL警告信息
-- 查看MySQL警告
show warnings;