网上大部分都是将日志输出到文件,而输出到general_log表和slow_log表的太难找,记录一下。
虽然日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,不建议生产环境下使用,但是多人开发调试时还是很实用的。
以下在MySQL8中调试通过,不兼容MySQL5.7。
1、日志输出方式
执行SQL语句
-- 日志输出方式,生产环境建议FILE,开发环境可以TABLE
set global log_output='table';
或者,修改或增加My.ini配置文件内容
; 日志输出方式,生产环境建议使用FILE,开发环境可以使用TABLE
; log_output = 'FILE,TABLE'
log_output = 'TABLE'
2、打开全局SQL日志开关
执行SQL语句,MySQL服务重启前一直有效,重启后将会重新加载配置文件中参数
-- 是否打开全局SQL日志
set global general_log=on;
或者,修改或增加My.ini配置文件内容,MySQL服务重启后有效
; 是否打开全局SQL日志
general_log=ON
; 日志跟踪输出文件
general_log_file = "D:\db_sever\mysql\8027\data\mysql_8027_sql.log"
3、打开慢查询跟踪开关
执行SQL语句
-- 是否跟踪慢查询
set global slow_query_log=ON;
或者,修改My.ini配置文件
; 是否跟踪慢查询
slow_query_log=ON
慢查询跟踪其他配置
;慢查询阈值,单位微秒,当查询时间多于设定的阈值时,记录日志
long_query_time = 1000
; 未使用索引的查询也被记录到慢查询日志中(包括使用full index scan的SQL)
log_queries_not_using_indexes = ON
; 如果你想查询有多少条慢查询记录,可以使用Slow_queries系统变量
; Slow_queries=100 不在这里修改,暂未找到修改哪里
; 慢查询输出文件
slow_query_log_file="D:/db_sever/mysql/8027/data/mysql_8027_slow.log"
4、其他
两个日志表(general_log表和slow_log表),只能Truncate,不允许Delete,会报错。