本节讨论如何配置MySQL服务器以将诊断消息记录到错误日志中。有关选择错误消息字符集或语言的信息,请参见 第10.6节“错误消息字符集”或 第10.12节“设置错误消息语言”。
错误日志包含mysqld 启动和关闭时间的记录。它还包含诊断消息,例如错误,警告和注释,它们在服务器启动和关闭期间以及服务器运行期间发生。例如,如果mysqld注意到需要自动检查或修复表,它将向错误日志中写入一条消息。
在某些操作系统上,如果mysqld异常退出,则错误日志包含堆栈跟踪 。该跟踪可用于确定mysqld退出的位置。请参见 第28.5节“调试和移植MySQL”。
如果用于启动mysqld,则 mysqld_safe可能会将消息写入错误日志。例如,当mysqld_safe注意到异常的mysqld退出时,它将重新启动 mysqld并将mysqld restarted
消息写入错误日志。
以下各节讨论配置错误日志记录的各个方面。在讨论中,“ 控制台 ”是指 stderr
,标准错误输出。除非标准错误输出已重定向到其他目标,否则这是您的终端或控制台窗口。
服务器解释的选项决定Windows和Unix系统在何处写入错误消息。确保使用适合您平台的信息配置错误日志记录。
Windows上的错误记录
在Windows上,mysqld的使用 --log-error
, --pid-file
和 --console
选项,以确定是否mysqld的写入错误日志到控制台或文件,并且,如果到一个文件,文件名:
-
如果
--console
给出,则 mysqld将错误日志写入控制台。( 如果同时提供--console
了--log-error
两者,则优先于,并且以下各项--log-error
均不适用。在MySQL 5.7之前,这是相反的:--log-error
优先于--console
。) -
如果
--log-error
未给出,或者给出时未命名文件 ,则除非指定了该选项,否则mysqld 会将错误日志写入
数据目录中 命名的文件host_name
.err--pid-file
。在这种情况下,文件名是PID文件的基本名称,.err
在数据目录中带有后缀。 -
如果
--log-error
给定一个文件名,则mysqld会将错误日志写入.err
数据目录下的该文件(如果后缀名不带后缀,则添加后缀),除非给出绝对路径名以指定其他位置。
如果服务器将错误日志写入控制台,则会将 log_error
系统变量设置为 stderr
。否则,服务器将错误日志写入文件并设置 log_error
为文件名。
另外,服务器默认情况下会将事件和错误消息写入应用程序日志中的Windows事件日志:
-
标记为
Error
,Warning
和的条目Note
将写入事件日志,但不会写入消息(例如来自各个存储引擎的信息语句)。 -
事件日志条目的来源
MySQL
。 -
使用
log_syslog
系统变量控制写入事件日志的信息,该 系统变量在Windows上默认为启用。请参见 第5.4.2.3节“错误记录到系统日志”。
在Unix和类似Unix的系统上记录错误
在Unix和类似Unix的系统上,mysqld使用该--log-error
选项来确定mysqld是否将错误日志写入控制台或文件,如果写入文件,则写入文件名:
-
如果
--log-error
未给出,则 mysqld将错误日志写入控制台。 -
如果
--log-error
给出时未命名文件,则mysqld将错误日志写入
数据目录中命名的文件 。host_name
.err -
如果
--log-error
给定一个文件名,则mysqld会将错误日志写入.err
数据目录下的该文件(如果后缀名不带后缀,则添加后缀),除非给出绝对路径名以指定其他位置。 -
如果
--log-error
在选项文件中给出的[mysqld]
,[server]
或[mysqld_safe]
部分, mysqld_safe的查找并使用的选项,并将其传递到mysqld的。
在Yum或APT软件包安装中,通常/var/log
使用诸如log-error=/var/log/mysqld.log
服务器配置文件中的选项 来配置错误日志文件位置。从选项中删除文件名将导致
使用数据目录中的 文件。host_name
.err
如果服务器将错误日志写入控制台,则会将 log_error
系统变量设置为 stderr
。否则,服务器将错误日志写入文件并设置 log_error
为文件名。
错误记录到系统日志
可能mysqld将错误日志写入系统日志(Windows,syslog
Unix和类似Unix的系统上的事件日志 )。为此,请使用以下系统变量:
-
log_syslog
:启用此变量可将错误日志发送到系统日志。(在Windows上,log_syslog
默认情况下启用。)如果
log_syslog
启用,则以下系统变量也可以用于更好的控制。 -
log_syslog_facility
:syslog
消息的默认功能是daemon
。设置此变量以指定其他功能。 -
log_syslog_include_pid
:是否在每行syslog
输出中包括服务器进程ID 。 -
log_syslog_tag
:此变量定义了一个标签,该标签将添加到 消息中的服务器标识符(mysqld
)中syslog
。如果已定义,则标签将以前导连字号附加到标识符。
错误记录到系统日志中可能需要其他系统配置。请查阅所用平台的系统日志文档。
在Unix和类似Unix的系统上,syslog
也可以使用 mysqld_safe控制对to的输出 ,它可以捕获服务器错误输出并将其传递给syslog
。
不建议使用mysqld_safe进行 syslog
错误记录。您应该改用服务器系统变量。
mysqld_safe的有三个错误日志选项, --syslog
, --skip-syslog
,和--log-error
。没有日志选项或带有 --skip-syslog
日志的默认值是使用默认日志文件。要明确指定使用的错误日志文件中,指定 给 mysqld_safe的,然后进行整理 mysqld的消息写入日志文件。要使用,请指定 选项。对于 输出,可以使用;指定标签 。这会附加到服务器标识符前,并带有连字符。 --log-error=
file_name
syslog
--syslog
syslog
--syslog-tag=
tag_val
mysqld
错误日志过滤
log_error_verbosity系统变量控制服务器详细程度,以便将错误,警告和注释消息写入错误 log。允许的值为 1(仅错误),2(错误和警告),3(错误,警告和注释),默认值为 3.如果 value 大于 2,则服务器会记录中止的连接和拒绝尝试新链接的错误。
错误日志消息格式
错误日志消息中包含的ID是mysqld中负责编写消息的线程的ID 。这表明服务器的哪一部分产生了该消息,并且与常规查询日志和慢速查询日志消息(包括连接线程ID)一致。
该log_timestamps
系统变量控制在写入错误日志消息时间戳的时区(以及一般查询日志和慢查询日志文件)。允许的值为 UTC
(默认值)和 SYSTEM
(本地系统时区)。
错误日志文件刷新和重命名
如果使用FLUSH ERROR LOGS
,FLUSH LOGS
或 mysqladmin flush-logs刷新日志,则服务器将关闭并重新打开它正在写入的任何错误日志文件。要重命名错误日志文件,请在刷新前手动进行重命名。刷新日志,然后使用原始文件名打开一个新文件。例如,假设日志文件名为
,以重命名该文件并创建一个新文件,请使用以下命令: host_name
.err
mv host_name.err host_name.err-old
mysqladmin flush-logs
mv host_name.err-old backup-directory
在Windows上,请使用 rename而不是 mv。
如果错误文件的位置不可由服务器写入,则日志刷新操作将无法创建新的日志文件。例如,在Linux上,服务器可能将错误日志写入/var/log/mysqld.log
,其中/var/log
由root
拥有,写不进去 。有关处理这种情况的信息,请参见第5.4.7节“服务器日志维护”。
如果服务器未写入命名的错误日志文件,则刷新日志时不会发生错误日志文件重命名。