MySQL 常规查询日志
一、记录内容
1. SQL 语句
- 常规查询日志会记录从客户端接收到的每个 SQL 语句,其中可能仅包含查询语句(查询语句不写入二进制日志)。
- 记录顺序:mysqld 按接收顺序记录语句,此顺序可能与语句执行顺序不同。
- 主从复制相关:
- 主从复制结构中,从节点接收的语句会写入查询日志。
- 若客户端使用 mysqlbinlog 读取事件并传递给服务器,语句会写入主节点查询日志。
- 当使用基于行的二进制日志记录(binlog_format = ROW)时,更新以行更改形式发送,不会作为 SQL 语句写入查询日志。
2. 连接协议
常规查询日志会记录客户端连接的协议类型,如 TCP/IP、SSL/TLS、socket 等。
二、系统变量
1. 全局变量
- general_log:控制常规查询日志的开启或禁用。
- general_log_file:指定常规查询日志的文件名,默认值为 host_name.log,存储在数据目录下。
- log_raw:用于抑制密码重写。默认情况下,服务器会重写语句中的密码(使其无法被解析),避免密码以纯文本形式出现。
2. 会话级变量
在常规查询日志已开启的情况下,可通过会话级变量控制当前会话的日志记录状态:
- sql_log_off:控制会话级常规查询日志的禁用或开启。
三、日志重命名(轮换)
1. 开启日志
SET GLOBAL general_log = 'ON';
2. 重命名操作
步骤如下:
# 移动或删除原有日志文件
shell> mv host_name.log host_name-old.log
# 刷新日志
shell> mysqladmin flush-logs
# 将旧日志移动到备份目录
shell> mv host_name-old.log backup-directory
3. 禁用日志
SET GLOBAL general_log = 'OFF';
四、输出格式
示例如下:
$ 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_JOIN_SIZE=1000000
2021-03-16T19:34:52.555137+08:00 9 Query select @@version_comment limit 1