从 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.ignorePattern
MySQL Shell 配置选项或--histignore
命令行选项(history.sql.ignorePattern
仅为当前会话设置值)所指定。
要将您在 MySQL Shell 的 SQL 模式下发出的 SQL 语句发送到操作系统的系统日志记录工具,请选择以下选项之一:
启动 MySQL Shell 时使用
--syslog
命令行选项。使用 MySQL Shell
\option
命令设置history.sql.syslog
MySQL Shell 配置选项。有关使用此命令的说明,请参阅第 13.4 节,“配置 MySQL Shell 选项”。使用该
shell.options
对象设置history.sql.syslog
MySQL Shell 配置选项。有关使用此配置界面的说明,请参阅第 13.4 节,“配置 MySQL Shell 选项”。
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);'