一、背景
生产环境多次遇到 MySQL 5.7 在线改表时 crash 的情况,crash 产生的 core file 可以用来排查 crash 的原因,但是在 kernel.core_pattern 设置的目录中却没有发现 core file,查看操作系统日志,发现是因为磁盘空间不足导致 core file 写入失败,然而 kernel.core_pattern 设置的目录,其磁盘空间是足够的,这就很奇怪了,为什么会因为磁盘空间不足导致写入失败?
二、问题排查
操作系统版本:redhat 6.3
先看下 linux 系统日志 /var/log/messages:
Aug 26 01:11:47 mydb12 abrt[8716]: Write error: No space left on device
Aug 26 01:11:48 mydb12 abrt[8716]: Error writing '/var/spool/abrt/ccpp-2020-08-26-01:10:20-2711.new/coredump'
系统日志显示写 core file 时,磁盘空间不足,写入路径为
/var/spool/abrt/ccpp-2020-08-26-01:10:20-2711.new/coredump
但是 kernel.core_pattern 配置的并不是这个位置,看下 /etc/sysctl.conf 内核参数配置:
kernel.core_pattern = /cores/core.%e.%t.%p
再使用 sysctl -a | grep kernel.core_pattern 看下当前生效的 kernel.core_pattern 值: