开发反应他们MySQL的测试库hang住了,登录到mysql库show processlist看下进程,发现都是些insert 语句卡主了,感觉很奇怪,再看下文件系统发现可用空间为0,然后检查磁盘发现最大的文件居然是错误日志文件,有几十GB大小。
将错误日志备份了一部分
tail -1000000 mysql-error-log.err >mysql-error-log.err.bak
然后将日志清理掉:
echo null > mysql-error-log.err
打开备份的日志及看新生成的日志,发现大部分内容都是show engine innodb status看到的内容,如下所示:
如下最后一行内容是 END OF INNODB MONITOR OUTPUT
搜索关键字 INNODB MONITOR 可以看到官方文档关于InnoDB Monitors的内容
如下内容
When InnoDB monitors are enabled for periodic output, InnoDB writes the output to mysqld server standard error output (stderr) every 15 seconds, approximately.
The innodb_status_output and innodb_status_output_locks system variables are used to enable the standard InnoDB Monitor and InnoDB Lock Monitor.
可以知道打开InnoDB monitors差不多15秒会输出一次信息到标准错误输出(而后应该就是写入到错误日志文件),而innodb_status_output和innodb_status_output_locks 两个参数就是控制InnoDB monitors的开关。
这两个参数的含义:
innodb_status_output innodb 状态监控信息开关,on为开启,off为关闭,默认为off
innodb_status_output_locks 为锁监控信息开关,on为开启,off为关闭,默认也为off
一般建议将innodb_status_output innodb 参数关闭,如测试需要可以临时打开,测试完成再关闭。
innodb_status_output_locks 设置为打开,监控锁信息。
这样需要查看锁信息时,可以通过 show engine innodb status \G; 进行查看。
于是将参数innodb_status_output 改为off
SET GLOBAL innodb_status_output=OFF;
改为还需要同步修改配置文件,否则下次重启又打开了。
改完后,错误日志不再有innodb状态信息输出了。