1. 什么是错误日志
错误日志Error Log
是Mysql中最常用的一种日志,主要记录Mysql服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况等。
2. 错误日志内容
错误日志包含 mysqld
启动和关闭的时间信息,还包含诊断消息,如服务器启动和关闭期间以及服务器运行时出现的错误、警告和其他需要注意的信息。
例如:如果 mysqld
检测到某个表需要检查或修复,会写入错误日志。
根据错误日志配置,错误消息还可能填充 performance_schema.error_log
表,以便为日志提供 SQL 接口,使错误日志能够查询。
如果用 mysqld_safe
启动 mysqld
,mysqld_safe
会将消息写入错误日志。
例如,当 mysqld_safe
注意到 mysqld
异常退出时,它会重新启动 mysqld
,并将 mysqld
重新启动的消息写入错误日志。
3. 启动错误日志
在MySQL数据库中,错误日志功能是默认开启的。而且,错误日志无法被禁止。
默认情况下,错误日志存储在MySQL数据库的数据文件夹下,名称默认为mysqld.log
(Linux系统)或hostname.err
(mac系统)。如果需要制定文件名,则需要在my.cnf
或者my.ini
中做如下配置
1 | [mysqld] |
修改配置项后,需要重启Mysql服务器。
4. 查看日志
MySQL错误日志是以文本文件形式存储的,可以使用文本编辑器直接查看。
查询错误日志的存储路径:
1 | mysql> show variables like 'log_err%'; |
log_error
:定义为错误日志文件路径log_error
: 控制哪个日志组件启用错误日志,该变量可以包含具有0、1或多组件列表;在后一种情况下,组件可以用分号或(从MySQL 8.0.12开始)逗号分隔,另外服务器按照列出的顺序执行组件。 默认情况下,有以下值:1
2
3
4
5
6
7mysql> SELECT @@GLOBAL.log_error_services;
+----------------------------------------+
| @@GLOBAL.log_error_services |
+----------------------------------------+
| log_filter_internal; log_sink_internal |
+----------------------------------------+
1 row in set (0.00 sec)log_error_suppression_list
: 用于错误日志的事件的抑制作用,有些日志不希望记录下来
log_error_verbosity
:日志记录等级log_error_verbosity Value Permitted Message Priorities 1 ERROR 2 ERROR, WARNING 3 ERROR, WARNING, INFORMATION 在MGR中建议设置为3可以记录更多日志信息,便于跟踪问题
5. log_timestamps
在MySQL 5.7.2 新增了 log_timestamps
这个参数,该参数主要是控制 error log
、general log
,等等记录日志的显示时间参数。
在 5.7.2 之后改参数为默认 UTC 这样会导致日志中记录的时间比中国这边的慢,导致查看日志不方便。
1 | mysql> show global variables like 'log_timestamps%'; |
可以看到使用的时间是UTC时间,UTC是世界公用的一个时间,那么我们本地时间和UTC时间就必然存在一个换算关系。按北京时间来算,北京时间将比UTC时间快8个小时。
5.1 修改log_timestamps
Mysql5.7 修改
1
2
3
4
5
6set global log_timestamps=system;
# 或者
2.修改后可以在配置文件添加
[mysqld]
log_timestamps=systemMysql8.0修改
1
set global log_timestamps=system;
为了国内用户便于读取日志信息,建议将参数写入到配置文件
my.cnf
MySQL 8.0支持参数
log_timestamps
持久化设置
6. 删除/刷新日志
对于很久以前的错误日志,数据库管理员查看这些错误日志的可能性不大,可以将这些错误日志删除,以保证 MySQL
服务器上的硬盘空间。MySQL
的错误日志是以文本文件的形式存储在文件系统中的,可以直接删除。
1 | mysqladmin -uroot -p flush-logs |
如果出现如下错误:
1 | mysqladmin: refresh failed; error: 'Could not open file '/var/log/mysqld.log' for error logging.' |
执行命令:
1 | install -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log |
flush-logs
指令操作:
- MySQL5.5.7以前的版本,
flush-logs
将错误日志文件重命名为filename.err_old,并创建新的日志文件。
- 从MySQL5.5.7开始,
flush-logs
只是重新打开日志文件,并不做日志备份和创建的操作。
- 如果日志文件不存在,MySQL启动或者执行
flush-logs
时会自动创建新的日志文件。重新创建错误日志,大小为0字节。