mysql客户端可以为交互式执行 的语句执行这些类型的日志记录:
以下讨论描述了适用于所有日志记录类型的特征,并提供了特定于每种日志记录类型的信息。
日志记录是如何发生的
对于每个启用的日志记录目标,语句日志记录发生如下:
因此,跨越多行的输入语句可能会被记录两次。考虑这个输入:
mysql> SELECT
-> 'Today is'
-> ,
-> CURDATE()
-> ;
在这种情况下,mysql记录
“ SELECT ”、“ '今天是' ”、
“ , ”、“ CURDATE() ”和“ ; ”。”
行,因为它读取它们。它还会记录完整的语句,在映射SELECT\n'Today
is'\n,\nCURDATE()
到SELECT 'Today is' ,
CURDATE()
之后加上一个定界符。因此,这些行出现在记录的输出中:
SELECT
'Today is'
,
CURDATE()
;
SELECT 'Today is' , CURDATE();
mysql出于记录目的而忽略与“忽略”列表中的任何模式匹配的语句默认情况下,模式列表是
"*IDENTIFIED*:*PASSWORD*"
, 以忽略引用密码的语句。模式匹配不区分大小写。在模式中,有两个字符是特殊的:
?
匹配任何单个字符。*
匹配零个或多个字符的任何序列。
要指定其他模式,请使用该
--histignore
选项或设置
MYSQL_HISTIGNORE
环境变量。(如果两者都指定,则选项值优先。)该值应该是一个或多个冒号分隔模式的列表,这些模式附加到默认模式列表。
可能需要引用或转义命令行上指定的模式,以防止您的命令解释器对它们进行特殊处理。例如,
除了引用密码的语句之外,要抑制UPDATE
和语句的日志记录,请像这样调用mysql:
DELETE
mysql --histignore="*UPDATE*:*DELETE*"
控制历史文件
该.mysql_history
文件应使用限制性访问模式进行保护,因为可能会向其中写入敏感信息,例如包含密码的 SQL 语句文本。请参阅第 6.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
功能
的LOG_INFO
优先级
和Windows 事件日志的优先级。请查阅您的系统文档以配置您的日志记录功能。
syslog
syslog
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;'