MySQL 外壳 8.0  / 第 12 章 MySQL Shell 日志记录和调试  /  12.3 用户 SQL 语句的系统日志记录

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

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

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

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

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

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

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

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

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

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

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

SQL 语句的系统日志记录仅在 MySQL Shell 以交互模式启动时发生,因此可以正常启动或使用 --interactive选项启动。--execute如果在启动时使用或 --file选项以mysqlsh批处理模式运行以处理命令或文件 ,则不会发生。

日志消息格式

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

系统用户 =

操作系统用户的登录名,或者 --如果此用户名未知。

MYSQL_USER =

MySQL 用户的名称,或者--如果此用户名未知。

CONNECTION_ID =

MySQL Shell 连接的标识符。

数据库服务器 =

服务器的主机名,或者--如果主机名未知。

数据库 =

默认数据库,或者--如果没有选择数据库。

查询 =

记录的 SQL 语句的文本。

如果超过该长度,日志消息将被截断为 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);'