MySQL Shell 9.0  /  MySQL Shell 日志记录和调试  /  用户 SQL 语句的系统日志记录

12.3 用户 SQL 语句的系统日志记录

您在 MySQL Shell 的 SQL 模式下发出的 SQL 语句可以发送到操作系统的系统日志记录工具。在 Unix 上,这是 syslog;在 Windows 上,它是 Windows 事件日志。记录的消息显示在何处取决于系统。在 Linux 上,目标通常是 /var/log/messages 文件。

当您为 SQL 语句激活系统日志记录时,以下项目将写入系统日志记录工具

  • 您在 MySQL Shell 的 SQL 模式下交互式发出的 SQL 语句。

  • 您在 MySQL Shell 的 JavaScript 或 Python 模式下通过在 \sql 命令后立即输入它们来执行的单个 SQL 语句。

  • 您在 MySQL Shell 的 SQL 模式下交互式发出的 \source 命令的实例。

以下项目被排除在外,不会写入系统日志记录工具

  • 您使用 \source 命令执行的脚本文件的内容。只有 \source 命令本身才会写入系统日志记录工具。

  • MySQL Shell 在 AdminAPI 操作过程中自己执行的 SQL 语句。您可以将这些语句记录到 MySQL Shell 应用程序日志文件中,如第 12.4 节 “MySQL Shell SQL 日志记录”中所述。

  • 将从 MySQL Shell 代码历史记录中排除的 SQL 语句,如 MySQL Shell 配置选项 history.sql.ignorePattern--histignore 命令行选项(仅为当前会话设置 history.sql.ignorePattern 的值)所指定。

要将您在 MySQL Shell 的 SQL 模式下发出的 SQL 语句发送到操作系统的系统日志记录工具,请选择以下选项之一

仅当 MySQL Shell 在交互模式下启动时(即正常启动或使用 --interactive 选项启动),才会对 SQL 语句进行系统日志记录。如果在启动时使用 --execute--file 选项以批处理模式运行 mysqlsh 来处理命令或文件,则不会进行系统日志记录。

日志消息格式

SQL 语句的日志消息格式化为一系列由空格字符分隔的键值对。键值对如下所示

SYSTEM_USER =

操作系统用户的登录名,如果此用户名未知,则为 --

MYSQL_USER =

MySQL 用户的名称,如果此用户名未知,则为 --

CONNECTION_ID =

MySQL Shell 连接的标识符。

DB_SERVER =

服务器的主机名,如果主机名未知,则为 --

DB =

默认数据库,如果未选择数据库,则为 --

QUERY =

记录的 SQL 语句的文本。

如果日志消息超过 1024 字节,则将其截断为 1024 字节。

以下是在 Linux 上使用 --syslog 生成的输出示例。此输出的格式是为了便于阅读;每个记录的消息实际上都占一行。

Mar  1 17:35:33 myhost mysqlsh[33060]: 
SYSTEM_USER=hanna_j MYSQL_USER=hanna 
CONNECTION_ID=14 DB_SERVER=localhost DB='--' 
QUERY='create table test.test (c int, my_row_id BIGINT AUTO_INCREMENT INVISIBLE PRIMARY KEY);'