注意:如无特定声明,在此阶段的总结都是在 MySQL 5.7 中记录的。
root@localhost 22:52: [(none)]> select @@version;
+------------+
| @@version |
+------------+
| 5.7.18-log |
+------------+
1 row in set (0.00 sec)
错误日志默认是启用的,一般存放在数据目录下,如无特别指定,默认以 $HOSTNAME.err 为文件名称。错误日志中除了记录错误相关的信息之外,默认还记录 MySQL 初始化、启动和关闭过程中输出的信息(未必是错误信息)、event scheduler 运行时所产生的信息、主从架构中的从 I/O Thread 的信息。
在工作中,善于利用错误日志来定位问题是非常好的一个习惯。
类似于 Oracle 数据库中的 alert log,在 MySQL 5.7 和 8.0 版本中,在初始化数据库时加上 --initialize 参数会生成一个临时的数据库初始化密码,记录在 log_error 中。
设置方法:(默认启用)
# vim /etc/my.cnf
log_error = /usr/local/mysql/data/error.log
重启 MySQL 后查看变量
root@localhost 23:06: [(none)]> show variables like 'log_error';
+---------------+---------------------------------+
| Variable_name | Value |
+---------------+---------------------------------+
| log_error | /usr/local/mysql/data/error.log |
+---------------+---------------------------------+
1 row in set (0.00 sec)
log_warnings 变量的值也与错误日志相关,其用于表示警告信息是否一并记录到错误日志中。
该值为 0,表示不记录警告信息。
该值为 1,表示警告信息一并记录到错误日志中。
该值大于 1,表示“失败的连接”的信息和创建新连接时“拒绝访问”类的错误信息也会被记录到错误日志中。
root@localhost 23:06: [(none)]> show variables like 'log_warnings%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings | 2 |
+---------------+-------+
1 row in set (0.00 sec)
随着错误日志越滚越大,有时候为了维护方便,需要先将旧的错误日志进行备份(便于日后分析之用),然后生成新的错误日志。可用 mysqladmin 或者是在 MySQL 终端用 flush logs 来生成新的日志,但是要注意,这个操作还会刷新二进制日志。
# cd /usr/local/mysql/data/
# mv error.log{,.back.$(date +"%Y%m%d")}
# mysqladmin -uroot -p flush-logs
# ls error*