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”列表中的任何模式匹配的语句。默认情况下,模式列表为 "*IDENTIFIED*:*PASSWORD*"
,用于忽略引用密码的语句。模式匹配不区分大小写。在模式中,有两个字符是特殊的
?
匹配任何单个字符。*
匹配零个或多个字符的任何序列。
要指定其他模式,请使用 --histignore
选项或设置 MYSQL_HISTIGNORE
环境变量。(如果同时指定了两者,则选项值优先。)该值应该是一个或多个以冒号分隔的模式的列表,这些模式将附加到默认模式列表中。
在命令行上指定的模式可能需要用引号引起来或转义,以防止命令解释器对其进行特殊处理。例如,要抑制 UPDATE
和 DELETE
语句以及引用密码的语句的日志记录,请像这样调用 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 日志记录特征
如果给定了 --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
默认数据库或
--
(如果未选择数据库)。QUERY
记录的语句的文本。
以下是在 Linux 上使用 --syslog
生成的输出示例。为了便于阅读,此输出已格式化;每条记录的消息实际上都占一行。
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;'