你必须要懂的MySQL错误日志,解决bug的一把手!

前言

在我们使用MySQL的时候,往往会碰到各种错误。而MySQL错误日志可以帮我们记录这些错误,看错误日对我们解决问题是非常重要的。下面我们就来看一下如何开启和使用错误日志。

错误日志(Error Log)

MySQL的错误日志包含mysqld启动和关闭时间的记录。它还包含诊断消息,如错误、警告和注意事项,这些消息发生在服务器启动和关闭期间以及服务器运行期间。例如,如果mysqld注意到一个表需要被自动检查或修复,它就会向错误日志中写入一条消息。

在某些操作系统上,如果mysqld异常退出,错误日志会包含堆栈跟踪。跟踪可以用来确定mysqld退出的位置。

如果用mysqld, mysqld_safe来启动,也会把一些异常消息写到错误日志中。例如,当mysqld_safe注意到异常的mysqld退出时,它会重新启动mysqld,并将一个mysqld重启消息写入错误日志。

对于Windows和Unix系统,服务器对决定在何处写入错误消息的选项的解释略有不同。所以下面按这两种系统来介绍。


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_safe部分的该选项,并将其传递到mysqld。

注意:

Yum或APT包安装通常在/var/log下配置错误日志文件位置,在服务器配置文件中使用类似log-error=/var/log/mysqld.log的选项。从选项中删除路径名将导致使用数据目录中的err 文件。

如果服务器将错误日志写入控制台,它会将log_error系统变量设置为stderr。

扫描二维码关注公众号,回复: 12372816 查看本文章

开启实例:
在配置文件配置

#编辑Mysql的配置文件
vi /etc/my.cnf

#在mysqld部分添加log-error变量,你可以指定绝对路径,也可以不指定,不指定就默认在mysql的数据目录下
[mysqld]
log-error=/usr/err.log

查看错误日志是否开启,使用以下命令:

#如果开启了,会显示错误日志所在的位置
mysql> show variables like '%log_error%';

Windows上记录错误日志

在Windows上,mysqld使用–log-error,–pid-file和–console选项来确定mysqld是将错误日志写入控制台还是文件,如果写入文件,则写入文件名:

如果指定了–console, mysqld会将错误日志写入控制台。(如果同时给出–console和–log-error,那么–console优先于–log-error,下面关于–log-error的项不适用。在MySQL 5.7之前,这是相反的:–log-error优先于–console。

如果没有给出——log-error,或者给出的时候没有给文件命名,mysqld会把错误日志写到数据目录中一个名为host_name.err的文件夹,除非指定了——pid-file选项。在这种情况下,文件名是数据目录中带有.err后缀的PID文件基名。

如果指定–log-error并给定一个文件名,mysqld会将错误日志写入该文件(如果该文件没有后缀,则添加.err后缀)。除非指定了绝对路径名以指定不同的位置,否则文件位置位于数据目录下。

如果服务器将错误日志写入控制台,它会将log_error系统变量设置为stderr。否则,服务器将错误日志写入文件,并将log_error设置为文件名。

错误日志过滤

log_error_verbosity系统变量可以控制服务器对错误日志写入的详细程度。允许的值有1(只允许错误)、2(错误和警告)、3(错误、警告和注释),默认值为3。如果该值大于2,服务器将记录中止的连接和拒绝访问的连接尝试错误。

错误日志输出格式

错误日志消息中包含的ID是mysqld中负责写消息的线程的ID。这表明时服务器的哪个部分产生了消息,并且与常规查询日志和慢速查询日志消息(包括连接线程ID)一致。

log_timestamps系统变量控制写入错误日志(以及一般查询日志和慢速查询日志文件)的消息中的时间戳的时区。

log_timestamps允许的值为UTC(默认值)和 SYSTEM(本地系统时区)。时间戳使用ISO 8601 / RFC 3339格式编写: 加上表示Zulu时间(UTC)的尾值Z或表示相对于UTC的本地系统时区调整的偏移量。例如: YYYY-MM-DDThh:mm:ss.uuuuuuZ±hh:mm

例:

2020-08-07T15:02:00.832521Z            (UTC)
2020-08-07T10:02:00.832521-05:00       (SYSTEM)

一条标准的错误日志如下:

2020-12-22T09:56:57.551273Z 30 [Note] Access denied for user 'root'@'localhost' (using password: YES)

参数说明:

2020-12-22T09:56:57.551273Z :时间

30 :线程ID

[Note]:日志类型,note为记录,warning 为警告,error为错误

Access denied for user 'root'@'localhost' (using password: YES):错误信息

猜你喜欢

转载自blog.csdn.net/qq_36551991/article/details/111599046
今日推荐