慢查询日志

慢查询日志用来记录响应时间超过阈值的SQL语句,所以我们可以设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询日志文件中。该阈值可以通过参数 long_query_time 来设置,默认为10秒。

我们可以通过show variables like ‘slow_query%’;来查询慢查询日志的开启状态和存放的位置

mysql 8 windows打开日志记录 mysql日志怎么开启_mysql

说明:

slow_query_log 慢查询日志的开启状态
slow_query_log_file 慢查询日志存放的位置

如果我们想知道当前慢查询日志的时间阈值,可以通过show variables like ‘long_query_time’;来进行查询(默认是10秒)

mysql 8 windows打开日志记录 mysql日志怎么开启_java_02


如果我们的慢查询日志没有开启或者我们想修改时间阈值的时候,我们可以通过以下语句进行设置

//开启慢查询日志
 set global slow_query_log=‘ON’;//设置慢查询日志的存放位置
 set global slow_query_log_file=’/xxx/xxx.log’;//设置时间阈值
 set global long_query_time=2;

不过这样设置,在数据库重启之后就会失效。如果我们想配置永久生效,那么我们就需要修改mysql的配置文件mysql.cnf

例:

slow_query_log = ON//或者1
 slow_query_log_file = /xxx/xxx.log
 long_query_time = 2



慢查询日志分析工具

pt-query-digest 工具

pt-query-digest 是分析MySQL查询日志最有力的工具,该工具功能强大,它可以分析binlog,Generallog,slowlog,也可以通过show processlist或者通过 tcpdump 抓取的MySQL协议数据来进行分析,比 mysqldumpslow 更具体,更完善。以下是使用pt-query-digest的示例:

//直接分析慢查询文件
 pt-query-digest slow.log > slow_report.log

该工具可以将查询的剖析报告打印出来,可以分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间,次数,占比等,可以借助分析结果找出问题进行优化。



慢查询日志的格式如下:

# Time: 2020-06-03T16:48:27.030315Z
# User@Host: root[root] @ localhost []  Id:     3
# Query_time: 1.896889  Lock_time: 0.000823 Rows_sent: 100000  Rows_examined: 100000
SET timestamp=1496472507;
select * from order limit 100000;

参数:

Time:SQL 的执行时间
User:SQL 的执行主机
第三行为SQL的执行信息
SET timestamp:查询所用的总时间
最后一行为SQL 的执行内容:select * from order limit 100000;



错误日志

Mysql的错误信息会放到这个日志里,当MySQL数据库出现异常或者不能启动时,我们可以查看这个日志进行排查

错误日志的位置,可以使用show variables like ‘log_error’;得到,value就是日志的存放位置

mysql 8 windows打开日志记录 mysql日志怎么开启_sql_03



二进制日志

MySQL的二进制日志(binary log)是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的MySQL语句。二进制日志(binary log)中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作数据等其它额外信息,但是它不记录SELECT、SHOW等那些不修改数据的SQL语句。二进制日志(binary log)主要用于数据库恢复和主从复制,以及审计(audit)操作。

恢复(recovery):某些数据的恢复需要二进制日志,如当一个数据库全备文件恢复后,我们可以通过二进制的日志进行 point-in-time的恢复

复制(replication) : 通过复制和执行二进制日志使得一台远程的 MySQL 数据库(一般是slave 或者 standby) 与一台MySQL数据库(一般为master或者primary) 进行实时同步

审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入攻击

可以使用show variables like ‘log_bin’;来查看二进制日志有没有开启。OFF表示关闭

mysql 8 windows打开日志记录 mysql日志怎么开启_java_04

如何开启二进制文件呢?

需要我们进入mysql的配置文件

例:

vi /etc/mysql/my.cnf

添加log-bin[=name] 即可,如果不指定name,则默认二进制日志文件名为主机名,后缀名为二进制日志的序列号


log_bin = mysql-bin

为了管理所有的binlog文件,MySQL额外创建了一个index文件,它按顺序记录了MySQL使用的所有binlog文件。如果你想自定义index文件的名称,可以设置 log_bin_index=file参数。

重启Mysql就生效了

查看当前服务器所有的二进制日志文件,使用以下指令

show master logs;

查看二进制日志文件,使用mysqlbinlog指令

例: mysqlbinlog mysql-bin.000001

注意:有时候可能 mysqlbinlog 无法识别 binlog 配置中的 default-character-set=utf8,那么就需要我们在命令中加上–no-defaults

刷新 binlog 日志

flush logs;