general log 即 General Query Log, 记录了 MySQL 服务器的操作. 当客户端连接, 断开连接, 接收到客户端的 SQL 语句时, 会向 general log 中写入日志. 开启 general_log 会损失一定的性能, 但是在开发, 测试环境下开启日志, 可以帮忙我们加快排查出现的问题.
如何开启
开启开关
general_log 默认是没有启用的.
general-log-default.PNG
可以通过修改配置文件 my.cnf(Linux)/my.INI(Windows), 在 mysqld 下面增加或修改 (如已存在配置项)general_log 的值为 1, 修改后重启 MySQL 服务即可生效.
也可以通过在 MySQL 终端执行 set global general_log = ON 来开启 general log, 此方法可以不用重启 MySQL.
general_log 的值是全局生效的, 那么怎么仅关闭当前 Session 的日志记录呢, 答案就是在当前 session 中执行 set SQL_LOG_OFF=ON, 此值默认为 OFF, 即开启日志记录. 此操作本身会被记录到 general_log 文件中, 但当前 session 的后续操作就不会再被记录到日志文件中.
日志位置
可以通过参数 general_log_file 来设置日志的路径.
默认日志的目录是 MySQL 的 data 目录, 文件名默认为主机名. log.
如果 general_log_file 仅指定了文件名, 那么日志路径为 data 目录下该文件名指定的文件
如果 general_log_file 指定了完整的路径
如果路径目录存在, 则日志文件就是 general_log_file 指定路径的文件
如果路径目录不存在, 则 general_log 无法开启, 即使 general_log 参数的值配置为开也不行.
日志文件内容
如下图是日志文件的示例内容
general-query-log-sample.PNG
各列说明
Time 日志记录的时间
Id 进程 ID, 可以通过 show processlist 命令查看
Command 执行的命令
Argument 命令参数
关于 Command
Connect 就是客户端连接到服务端的记录, 参数里会记录用户以及连接的协议
Query 查询 / 更新 / 删除记录 / 删除表等
Init DB 使用命令 use 选择库时的记录
Quit 断开连接
当然还有很多其他的命令, 一般都是可以通过名字直接看出是什么操作的.
来源: https://www.qcloud.com/developer/article/1405092