当客户端连接或断开时,会记录常规查询日志。
记录内容
SQL 语句
- 常规查询日志记录了从客户端接收到的每个 SQL 语句。
- 常规查询日志中记录的语句可能仅是查询语句,而查询语句是不写入二进制日志的。
- 记录顺序
- mysqld 按照接收顺序记录语句,这可能与语句的执行顺序不同。
- 对于主从复制
- 主从复制结构中,从节点接收的语句将写入查询日志。
- 如果客户端使用 mysqlbinlog 读取事件并将其传递给服务器,则将语句写入主节点查询日志。
- 使用基于行的二进制日志记录时,更新将作为行更改而不是 SQL 语句发送,因此,当 binlog_format = ROW 时,这些语句永远不会写入查询日志 。
连接协议
- 常规查询日志中记录了客户端连接的协议类型,比如 TCP/IP、SSL/TLS、socket。
系统变量
全局变量
- general_log
- 控制常规查询日志的开启/禁用
- general_log_file
- 常规查询日志的文件名
- 默认为 host_name.log,在数据目录下
- log_raw
- 抑制密码重写
- 默认情况下,语句中的密码会被服务器重写 (无法被解析),避免以纯文本形式出现。
- 抑制密码重写
会话级变量
常规查询日志开启的情况下,还可以为会话启用或禁用常规查询日志。
- sql_log_off
- 控制会话级常规查询日志的禁用/开启
日志重命名 (轮换)
开启日志
SET GLOBAL general_log = 'ON';
重命名
移动/删除原有日志文件,然后刷新日志。
shell> mv host_name.log host_name-old.log
shell> mysqladmin flush-logs
shell> mv host_name-old.log backup-directory
禁用日志
SET GLOBAL general_log = 'OFF';
输出格式
[root@yingzai data]$ more yingzai.log
/opt/mysql/bin/mysqld, Version: 8.0.23 (MySQL Community Server - GPL). started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument
2021-03-16T19:34:52.553353+08:00 9 Connect root@localhost on using Socket
2021-03-16T19:34:52.554915+08:00 9 Query SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=1000,MAX_JOI
N_SIZE=1000000
2021-03-16T19:34:52.555137+08:00 9 Query select @@version_comment limit 1