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


MySQL 8.4 Reference Manual  /  ...  /  The General Query Log

7.4.3 通用查询日志

通用查询日志是mysqld的通用记录。服务器在客户端连接或断开时写入该日志,并将每个来自客户端的SQL语句记录下来。通用查询日志可以在您怀疑客户端错误并想知道客户端发送了什么语句时非常有用。

每一行显示客户端连接时还包括使用 connection_type,以指示用于建立连接的协议。connection_type可以是TCP/IP(TCP/IP连接不使用SSL)、SSL/TLS(TCP/IP连接使用SSL)、Socket(Unix socket文件连接)、Named Pipe(Windows命名管道连接)或Shared Memory(Windows共享内存连接)。

mysqld将语句写入查询日志的顺序与接收语句的顺序可能不同,这可能与二进制日志的顺序不同,而二进制日志将语句写入后执行语句释放锁之前。另外,查询日志可能包含只选择数据的语句,而这些语句从不写入二进制日志。

在使用语句级别二进制日志的复制源服务器上,来自源服务器的语句将被写入每个副本的查询日志。语句将被写入源服务器的查询日志,如果客户端使用mysqlbinlog工具读取事件并将其传递给服务器。

然而,在使用行级别二进制日志时,更新将以行变化的形式发送,而不是SQL语句,因此这些语句从不写入查询日志当binlog_format设置为ROW时。给定的更新也可能不写入查询日志当这个变量设置为MIXED,取决于使用的语句。请参阅第19.2.1.1节,“语句级别和行级别复制的优缺”,了解更多信息。

默认情况下,通用查询日志处于禁用状态。要明确指定初始通用查询日志状态,请使用--general_log[={0|1}]。没有参数或参数为1时,--general_log启用日志。参数为0时,这个选项禁用日志。要指定日志文件名,请使用--general_log_file=file_name。要指定日志目标,请使用log_output系统变量(如第7.4.1节,“Selecting General Query Log and Slow Query Log Output Destinations”中所述)。

Note

如果您指定了TABLE日志目标,请查看Log Tables and “Too many open files Errors

如果您没有指定通用查询日志文件名,服务器将使用默认名称host_name.log。服务器将在数据目录中创建文件,除非您提供了绝对路径名以指定不同的目录。

要在运行时禁用或启用通用查询日志或更改日志文件名,请使用全局general_loggeneral_log_file系统变量。将general_log设置为0(或OFF)以禁用日志或设置为1(或ON)以启用它。将general_log_file设置为指定日志文件名。如果已经打开的日志文件,则关闭该文件并打开新的文件。

当通用查询日志启用时,服务器将将输出写入log_output系统变量指定的任何目标。如果启用日志,服务器将打开日志文件并将启动消息写入其中。然而,如果日志目标值不包含FILE,则不会对文件进行查询日志记录。将日志文件名设置无效,如果日志目标值不包含FILE

服务器重启和日志刷新不会生成新的通用查询日志文件(虽然刷新关闭并重新打开它)。要重命名文件并创建新的一个,请使用以下命令:

$> mv host_name.log host_name-old.log
$> mysqladmin flush-logs general
$> mv host_name-old.log backup-directory

在Windows上,请使用rename,而不是mv

您也可以在运行时重命名通用查询日志文件:

SET GLOBAL general_log = 'OFF';

禁用日志后,使用命令行外部重命名日志文件。然后,重新启用日志:

SET GLOBAL general_log = 'ON';

这个方法适用于任何平台,不需要服务器重启。

要为当前会话禁用或启用通用查询日志记录,设置会话变量sql_log_offONOFF。 (假设通用查询日志本身已经启用。)

通用查询日志中写入的密码将由服务器重写,以避免在明文中出现。可以通过在服务器启动时使用--log-raw选项来抑制通用查询日志的密码重写。这一选项可能对诊断有用,可以看到服务器接收到的语句的exact文本,但由于安全原因不建议在生产环境中使用。请参见第8.1.2.3节,“密码和日志记录”

密码重写的结果是,语句无法解析(例如,语法错误)将不会被写入通用查询日志,因为它们不能被确定为密码免费。需要记录所有语句,包括错误语句的用例,应该使用--log-raw选项,但需要注意这也会 bypass密码重写。

密码重写只在明文密码被期望时发生。对于语句,哪些语句期望密码哈希值,无需重写。如果错误地提供了明文密码,密码将被记录为给定的状态,而不进行重写。

系统变量log_timestamps控制通用查询日志文件和慢查询日志文件中的时间戳的时区。它不影响通用查询日志和慢查询日志表中的时间戳,但可以使用CONVERT_TZ()或设置会话变量time_zone将其转换到任何所需的时区。