19. Mysql 日志

在任何一种数据库中,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件。MySQL 也不例外,在 MySQL 中,有 4 种不同的日志,分别是错误日志、二进制日志(BINLOG 日志)、查询日志和慢查询日志,这些日志记录着数据库在不同方面的踪迹。

19.1 错误日志

错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。

该日志是默认开启的 , 默认存放目录为 mysql 的数据目录(var/lib/mysql), 默认的日志文件名为 hostname.err(hostname是主机名)。

查看日志位置指令 :

show variables like 'log_error%';

查看日志内容 :

tail -f /var/lib/mysql/xaxh-server.err

19.3 查询日志

查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的SQL语句。

永远不要在生产环境开启这个功能

默认情况下, 查询日志是未开启的。如果需要开启查询日志,可以设置以下配置 :

#该选项用来开启查询日志 , 可选值 : 0 或者 1 ; 0 代表关闭, 1 代表开启 
general_log=1

#设置日志的文件名 , 如果没有指定, 默认的文件名为 host_name.log 
general_log_file=file_name

在 mysql 的配置文件 /usr/my.cnf 中配置如下内容 :

编码启动方式:

set global general_log=1;
set global log_output='TABLE';

-- 此后编写的sql语句将会记录到mysql库里的general_log表,可以用下面命令查看:
select * from mysql.general_log;

配置完毕之后,在数据库执行以下操作 :

select * from tb_book;
select * from tb_book where id = 1;
update tb_book set name = 'lucene入门指南' where id = 5;
select * from tb_book where id < 8;

执行完毕之后, 再次来查询日志文件 :

19.4 慢查询日志

慢查询日志记录了所有执行时间超过参数 long_query_time 设置阈值并且扫描记录数不小于 min_examined_row_limit 的所有的SQL语句的日志。long_query_time 默认为 10 秒,最小为 0, 精度可以到微秒。

如果不是调优需要,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定性能影响。

19.4.1 文件位置和格式

慢查询日志默认是关闭的 。可以通过两个参数来控制慢查询日志:

my.cnf文件中添加修改(永久生效),修改后重启MySQL服务器。

# 该参数用来控制慢查询日志是否开启, 可取值: 1 和 0 , 1 代表开启, 0 代表关闭
slow_query_log=1 

# 该参数用来指定慢查询日志的路径和文件名(如果没有指定该参数,系统会默认给一个缺省的文件 host_name-slow.log)
slow_query_log_file=/var/lib/mysql/slow_query.log

# 该选项用来配置查询的时间阈值限制,默认为 10 秒,运行时间正好等于阈值,并不会被记录下来,超过这个时间将认为值慢查询,将需要进行日志记录,也就是说在mysql源码里是判断大于阈值,而非大于等于。
long_query_time=10

执行语句开启:

-- 查看开启状态和文件保存位置
show variables like '%slow_query_log%';

-- 开启慢查询日志,只对当前数据库生效;如果MySQL重启后则会失效;
set global slow_query_log=1;

-- 查看慢查询时间阈值
show variables like 'long_query_time%';

-- 设置慢查询时间阈值
set global long_query_time=3;

19.4.2 日志的读取

和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。

1) 查询long_query_time 的值。

2) 执行查询操作

select id, title,price,num ,status from tb_item where id = 1;

由于该语句执行时间很短,为0s , 所以不会记录在慢查询日志中。

select * from tb_item where title like '%阿尔卡特 (OT-927) 炭黑 联通3G手机 双卡双待165454%' ;

该SQL语句 , 执行时长为 26.77s ,超过10s , 所以会记录在慢查询日志文件中。

3) 查看慢查询日志文件

查询当前系统中有多少条慢查询记录:

show global status like '%slow_queries%';

直接通过cat 指令查询该日志文件 :

如果慢查询日志内容很多, 直接查看文件,比较麻烦, 这个时候可以借助于mysql自带的 mysqldumpslow 工具, 来对慢查询日志进行分类汇总。

日志分析工具mysqldumpslow:

posted @ 2022-03-27 17:20  Lz_蚂蚱  阅读(49)  评论(0)    收藏  举报