开启查看Mysql数据库日志

很多时候网站打开速度变慢,为了定位是否为数据库导致的,我们需要知道在访问网站的同时,站点执行了哪些SQL,每条SQL耗时多长。

为此,查看数据库日志是最直接的。

一般情况下,数据库日志默认是关闭的,因此需要先激活日志功能:

1.

使用root用户登陆到数据库后,检查“数据库日志”是否开启

SHOW VARIABLES LIKE 'general%';

# 这份日志会保存到数据库的安装目录, Centos7默认的目录是 /var/lib/mysql/

+------+-----------+  
| Variable_name | Value |  
+------+-----------+  
| general_log | OFF |  
| general_log_file | VM_211_224_centos.log |  
+------+-----------+

若为OFF,则开启之(这个选项的作用是把所有SQL操作打印到日志):

SET GLOBAL general_log='ON';
# 当调试完毕后记得关闭之,否则太耗服务器资源了

2.

另外,还有一个相关的“慢查询日志”,检查是否开启:

SHOW VARIABLES LIKE '%slow_query_log%';

# 这份日志会保存到数据库的安装目录, Centos7默认的目录是 /var/lib/mysql/
+---------+----+  
| Variable_name | Value |  
+---------+----+  
| slow_query_log | OFF |  
| slow_query_log_file | VM_211_224_centos-slow.log |  
+---------+----+

若为OFF,则开启之(这个选项的作用是把执行时间超过一定数值的SQL打印到日志):

SET GLOBAL slow_query_log='ON';
# 当调试完毕后记得关闭之,否则太耗服务器资源了

3.

无需重启数据库,直接刷新站点,发现 VM_211_224_centos.log 日志有内容,VM_211_224_centos-slow.log日志无内容(当然这是针对我的情况而言,mysql/mariadb默认超过10秒的SQL才是慢查询,后者没日志很可能就是因为并不存在这类SQL)。

4.

虽然 VM_211_224_centos.log 日志有内容,但也仅仅是一股脑把所有SQL列印出来而已,并不能反映每条SQL的执行时长。

但是这里可以通过tail -f实时直播日志的打印,以判断执行哪些SQL时会有停顿:

tail -10f /var/lib/mysql/VM_211_224_centos.log

刷新网站后,就能通过日志发现 哪个SQL在执行的时候出现卡顿。

发表评论

邮箱地址不会被公开。 必填项已用*标注