开启查看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在执行的时候出现卡顿。
评论(0)