Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


6.5.1.3 mysql 客户端服务器端帮助

MySQL 命令行客户端可以为交互式执行的语句进行以下类型的日志记录:

  • 在 Unix 上,mysql 将语句写入历史文件。默认情况下,这个文件名为 `~/.mysql_history`。要指定不同的文件,可以设置环境变量 MYSQL_ HISTFILE 的值。

  • 在所有平台上,如果给出了 --syslog 选项,mysql 将语句写入系统日志记录设施。在 Unix 上,这是 syslog;在 Windows 上,它是 Windows 事件日志。记录的目的地取决于系统。在 Linux 上,记录通常出现在 `/var/log/messages` 文件中。

以下讨论描述了适用于所有日志类型的特性,并提供了每种日志类型的具体信息。

对于每个启用的日志目的地,语句的日志记录发生如下情况:

  • 只有当执行交互式时,语句才会被记录。非交互式的语句示例是从文件或管道中读取的。还可以通过使用--batch--execute选项来抑制语句记录。

  • 如果语句与忽略列表中的任何模式匹配,它们将被忽略并且不会被记录。这份列表后文中会有描述。

  • mysql 对于非忽略且非空的每一条语句都会单独记录。

  • 如果一个非被忽略的语句跨越多行(不包括终止符),mysql 将这些行连接起来形成完整的语句,将换行符映射为空格,并记录结果以及终止符。

因此,跨越多行的输入语句可能会被记录两次。考虑以下输入:

mysql> SELECT
    -> 'Today is'
    -> ,
    -> CURDATE()
    -> ;

在这种情况下,mysql“SELECT”“'Today is'”“,”“CURDATE()”“;”这几行作为它读取它们的日志记录。它还将完整的语句记录下来,通过将 SELECT\n'Today is'\n,\nCURDATE() 映射为 SELECT 'Today is', CURDATE(),并添加一个分隔符。因此,这些行在日志输出中会出现:

SELECT
'Today is'
,
CURDATE()
;
SELECT 'Today is' , CURDATE();

mysql 对于日志记录目的,将忽略任何在 “ignore” 列表中的模式匹配的语句。默认情况下,模式列表是 *:*PASSWORD*",用于忽略包含密码引用的语句。模式匹配是不区分大小写的。在模式中,有两个字符是特殊的:

  • ? 匹配任何单个字符。

  • * 匹配零个或多个字符的任意序列。

要指定额外的模式,可以使用 --histignore 选项或者设置 MYSQL_ HISTIGNORE 环境变量。 (如果同时指定,则选项值优先于环境变量值。) 值应该是由一个或多个以冒号分隔的模式组成的列表,这些模式将被添加到默认模式列表中。

在命令行中指定的模式可能需要用引号或转义字符来防止你的命令解释器将它们特殊对待。例如,要抑制日志记录对于包含密码引用的语句以及UPDATEDELETE语句,使用mysql命令如下:

mysql --histignore="*UPDATE*:*DELETE*"

文件.mysql_history应该以严格的访问权限保护,因为它可能会写入包含密码文本的敏感信息,例如包含密码的SQL语句。请参阅第8.1.2.1节,“用户密码安全指南”。文件中的语句可以通过在mysql客户端使用上箭头键回忆。请参阅禁用交互式历史

如果您不想维护一个历史文件,首先删除.mysql_history文件(如果存在)。然后使用以下任何一种技术来防止它再次被创建:

  • 将环境变量MYSQL_HISTFILE设置为/dev/null。为了让这个设置每次登录时都生效,请将其放入您的shell启动文件之一。

  • 创建一个名为.mysql_history的符号链接到/dev/null;只需执行一次即可:

    ln -s /dev/null $HOME/.mysql_history

如果给出了 --syslog 选项,mysql 将交互式语句写入系统日志记录设施。消息记录具有以下特点。

记录发生在 信息 级别上。这对应于 Unix/Linux 系统的 syslog 能力中的 LOG_INFO 优先级,以及 Windows 事件日志中的 EVENTLOG_ INFORMATION_TYPE。请参考您的系统文档,以了解如何配置您的记录能力。

消息大小限制为1024字节。

消息由标识符 MysqlClient 开头,后跟这些值:

  • SYSTEM_USER

    操作系统用户名称(登录名)或 -- 如果用户未知。

  • MYSQL_USER

    MySQL 用户名称(指定了 --user 选项)或 -- 如果用户未知。

  • CONNECTION_ID

    客户端连接标识符。这与会话内的 CONNECTION_ID() 函数值相同。

  • DB_SERVER

    服务器主机或 -- 如果主机未知。

  • DB

    默认数据库或 -- 如果尚未选择数据库。

  • 查询

    登录语句的文本。

以下是使用 --syslog 在 Linux 上生成的输出样本。这份输出为了可读性而格式化;每条日志消息实际上占用一整行。

Mar  7 12:39:25 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;'
Mar  7 12:39:28 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'