常规查询日志

常规查询日志

当客户端连接或断开时,会记录常规查询日志。

记录内容

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注