错误日志
内容
服务器启动和关闭过程中的信息
未必是错误信息,比如
MySQL
是如何去初始化存储引擎的过程服务器运行过程中的错误信息
比如
sock
文件找不到,无法加载MySQL
数据库的数据文件,忘记初始化MySQL
或 data dir 路径找不到,或权限不正确等事件调度器运行一个事件时产生的信息
MySQL
调度启动一个计划任务的时候也会将相关信息记录在从服务器上启动从服务器进程时产生的信息
在复制环境下,从服务器进程的信息也会被记录
使用
查看配置
1 | show variables like 'log_error'; |
修改配置
是否开启错误日志
1 | log_error = ON|OFF |
设置错误日志路径
1 | log_error = 日志路径 |
是否记录 warnings 信息
各版本不同,MySQL5。7.2
开始,首选 log_error_verbosity
系统变量,而不是使用 --log-warnings
选项或 log_warnings
系统变量,log_warning
参数在 MySQL8.0.3
开始被移除。
log_warnings | 含义 |
---|---|
0 | 不记录告警信息 |
1 | 告警信息写入错误日志 |
>1 | 各类告警信息,例如有关网络故障的信息和重新连接信息写入错误日志 |
- MySQL 5.6-log_warnings
Property | Value |
---|---|
Command-Line Format | –log-warnings[=#] |
System Variable | log_warnings |
Scope (>= 5.6.4) | Global |
Scope (<= 5.6.3) | Global, Session |
Dynamic | Yes |
Type (64-bit platforms) | integer |
Type (32-bit platforms) | integer |
Default Value (64-bit platforms) | 1 |
Default Value (32-bit platforms) | 1 |
Minimum Value (64-bit platforms) | 0 |
Minimum Value (32-bit platforms) | 0 |
Maximum Value (64-bit platforms) | 18446744073709551615 |
Maximum Value (32-bit platforms) | 4294967295 |
- MySQL 5.7-log_warnings
Property | Value |
---|---|
Command-Line Format | –log-warnings[=#] |
Deprecated | 5.7.2 |
System Variable | log_warnings |
Scope | Global |
Dynamic | Yes |
Type (64-bit platforms) | integer |
Type (32-bit platforms) | integer |
Default Value (64-bit platforms, >= 5.7.2) | 2 |
Default Value (64-bit platforms, <= 5.7.1) | 1 |
Default Value (32-bit platforms, >= 5.7.2) | 2 |
Default Value (32-bit platforms, <= 5.7.1) | 1 |
Minimum Value (64-bit platforms) | 0 |
Minimum Value (32-bit platforms) | 0 |
Maximum Value (64-bit platforms) | 18446744073709551615 |
Maximum Value (32-bit platforms) | 4294967295 |
- MySQL 8.0-log_error_verbosity
Property | Value |
---|---|
Command-Line Format | –log-error-verbosity=# |
System Variable | log_error_verbosity |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies | No |
Type | integer |
Default Value (>= 8.0.4) | 2 |
Default Value (<= 8.0.3) | 3 |
Minimum Value | 1 |
Maximum Value | 3 |
查看错误日志内容
进入错误日志存储路径
执行以下命令显示最近 10
条错误日志,
1 | tail mysqld.log |
执行以下命令显示最近的 n
条错误日志,
1 | tail -{n} mysqld.log |
如果需要即时刷新错误日志,详见【关于 tail
命令:原文链接】
1 | 2021-01-26T11:43:05.963492Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. |
删除日志
⚠️此为敏感操作,请在三确认后再执行!
⚡在 MySQL 5.5.7 之前
数据库管理员可以删除很长时间之前的错误日志,以保证 MySQL
服务器上的硬盘空间。使用 mysqladmin 命令开启新的错误日志。mysqladmin 命令的语法如下:
1 | mysqladmin –u root –pflush-logs |
也可以执行以下命令开启新的日志
1 | flush logs |
以上命令会对全局的日志进行操作,请注意!
⚡在 MySQL 5.5.7 之后
服务器将关闭此项功能。只能使用重命名原来的错误日志文件,手动冲洗日志,创建新的日志:
1 | mv xxx.err xxx.err.old #重命名原来的日志,进行备份 |
1 | mysqladmin flush-logs #开启新的日志 |
一般查询日志
内容
查询日志不仅仅记录 select
语句,也会记录其他的语句的执行。
例如:
执行
delete
语句的时候也需要查询和选择符合条件的数据执行
update
也需要筛选某一块数据执行
insert
的时候为了避免数据冲突,需要验证待插入的数据是否存在主键重复的情况
因此会产生大量的查询日志,高并发情况下开启查询日志会导致 IO 较大,从而影响 MySQL 性能。非调试环境下一般不建议开启查询日志。查询日志有助于分析出密集执行的 select
语句,考虑是否对密集型的 select
语句开启缓存,在考虑开启查询日志的 IO 开销下,合理利用查询日志。
使用
查看是否开启查询日志(默认关闭查询日志)
1 | show variables like '%general_log%'; |
开启 / 关闭日志
1 | set GLOBAL general_log='ON'; |
1 | set GLOBAL general_log='OFF'; |