为了诊断mysql段错误(segment fault),也被称为崩溃(crash),需要在段错误发生时生成core文件(core dump)。
默认情况下,mysql core文件是不会生成的,需要提前做好一些配置工作。
mysql的core dump正确打开方式如下:
1、打开linux的core文件大小限制,即ulimit -c。
ulimit -c unlimited
如果希望core limit永久生效,需要修改 /etc/security/limits.conf 文件,并且重新登录系统:
echo "mysqluser - core unlimited" >> /etc/security/limits.conf
2、添加mysql的core_file参数(备注:配置在[mysqld]下面),并重启测试mysql实例。
[mysqld]
core_file
这个mysql参数比较特殊,只能写core_file,不能写core_file=ON。
3、配置 suid_dumpable( mysql 通常会以 suid 方式启动)。
echo 2 >/proc/sys/fs/suid_dumpable
如果希望永久修改suid_dumpable,需要修改/etc/sysctl.conf文件,然后运行 sysctl -p 使之生效:
echo "fs.suid_dumpable=2" >> /etc/sysctl.conf
sysctl -p
4、设置core文件存放的目录并且设置完全控制权限
mkdir /data/core && chmod 777 /data/core && echo "/data/core/core.%e.%p.%t" > /proc/sys/kernel/core_pattern
其中,%e代表程序名,%p代表pid,%t代表时间(Epoch秒)。
如果希望永久修改core_pattern,需要修改/etc/sysctl.conf文件,然后运行 sysctl -p 使之生效:
echo "kernel.core_pattern=/data/core/core.%e.%p.%t" >> /etc/sysctl.conf
sysctl -p
5、如果想模拟mysql的crash,可以执行如下命令:
kill -SEGV `pidof mysqld`