MySql 各日志配置方法:错误日志、慢查询日志、执行日志

MySQL 错误日志

编辑mysql配置文件/etc/my.cnf,添加如下配置:

[mysqld]

log-error=/alidata/log/mysql/mysql_error.log

注意对于错误日志文件 /alidata/log/mysql/mysql_error.log 要提前创建好,设置为mysql用户,要mysql用户可读写

MySQL 慢查询日志

慢查询日志配置

修改my.cnf

在配置文件my.cnf(一般为/etc/my.cnf)中的 [mysqld] 增加如下参数。

[mysqld]

# 表示是否开启慢查询日志,1开0关
slow_query_log = 1

# 指定慢查询日志路径,需要MySQL对该路径有写权限若没有指定,默认名字为hostname_slow.log
slow_query_log_file = /alidata/log/mysql/mysql_slow_query.log

# 表示查询时间>=1秒才记录日志,默认10s
long_query_time = 1

# 表明记录没有使用索引的 SQL 语句(不建议用)
log_queries_not_using_indexes = 1

重启MySQL服务,即可纪录慢查询日志。

配置参数检查

通过如下命令可以检查上述参数配置生效情况。

mysql> show variables like 'slow_query%';
+---------------------+-------------------------------+
| Variable_name       | Value                         |
+---------------------+-------------------------------+
| slow_query_log      | ON                            |
| slow_query_log_file | /var/lib/mysql/slow-query.log |
+---------------------+-------------------------------+
2 rows in set (0.00 sec)

mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

慢查询分析工具

mysqldumpslow

mysqldumpslow是MySQL自带的分析慢查询的工具。该工具是Perl脚本。

常用参数如下。

-s:排序方式,值如下
    c:查询次数
    t:查询时间
    l:锁定时间
    r:返回记录
    ac:平均查询次数
    al:平均锁定时间
    ar:平均返回记录书
    at:平均查询时间
-t:top N查询
-g:正则表达式

例子

我们执行了多次类似如下的查询。

select * from db_user where name like 'zb%';
select * from db_user where name like 'aaa%';
select * from db_user where name like 'bc%';
...

获取访问次数最多的5个SQL语句

$ mysqldumpslow -s c -t 5 /var/lib/mysql/slow-query.log

按照查询时间排序的top 5的SQL语句

$ mysqldumpslow -s t -t 5 /var/lib/mysql/slow-query.log

按照时间排序且含有'like'的top 5个SQL语句

$ mysqldumpslow -s t -t 3 -g "like" /var/lib/mysql/slow-query.log

注意

默认情况下,MySQL不启动慢查询日志。若要检查慢查询,需要我们手动设置这个参数。一般情况下,若非调优需要,不建议启动该参数,因为开启慢查询日志或多或少会带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

MySQL 执行日志

一般查询日志又称通用查询日志,是 MySQL 中记录最详细的日志,该日志会记录 mysqld 所有相关操作,当 clients 连接或断开连接时,服务器将信息写入此日志,并记录从 clients 收到的每个 SQL 语句。当你怀疑 client 中的错误并想要确切知道 client 发送给mysqld的内容时,通用查询日志非常有用。

默认情况下,general log 是关闭的,开启通用查询日志会增加很多磁盘 I/O, 所以如非出于调试排错目的,不建议开启通用查询日志。相关参数配置介绍如下:

vim /etc/my.cnf

[mysqld]

#默认值是0,即不开启,可设置为1
general_log = 0 

# 指定日志位置及名称
general_log_file = /alidata/log/mysql/mysql_general.log