1. MySQL core-file 参数
Linux环境下,进程崩溃生成core文件以便于程序调试和问题排查。进程在启动前,设置core file size 大于0,进程崩溃通常就会生成core file dump文件。MySQL在系统提供的core file生成机制之外,额外添加了一个参数–core-file,来控制是否生成core文件。
// mysqld.cc{"core-file", OPT_WANT_CORE, "Write core on errors.", 0, 0, 0, GET_NO_ARG,NO_ARG, 0, 0, 0, 0, 0, 0},
…
case (int) OPT_WANT_CORE: test_flags |= TEST_CORE_ON_SIGNAL; break;
…
// my_init_signals()if (test_flags & TEST_CORE_ON_SIGNAL) { // Change limits so that we will get a core file. struct rlimit rl; rl.rlim_cur= rl.rlim_max= RLIM_INFINITY; if (setrlimit(RLIMIT_CORE, &rl)) sql_print_warning("setrlimit could not change the size of core files to" " ‘infinity’; We may not be able to generate a" " core file on signals"); }
代码版本:5.7.19
从以上代码可以看出,启动MySQL进程时,加上–core-file参数,即使linux系统没有配置生成core file,MySQL也能通过自己在代码中调用系统函数来让自己进程在崩溃时生成core file。
2. core file 操作系统相关参数设置
echo 2 >/proc/sys/fs/suid_dumpablechmod 0777 /mysql/crashecho /mysql/crash/core.%e.%t.%p > /proc/sys/kernel/core_patternecho 1 >/proc/sys/kernel/core_uses_pid
/proc/sys/fs/suid_dumpable 取值为0,1,2,具体意义如下:
- 0 表明调用 seteuid和 setgid 改变用户或组的进程,将不能产生core文件
- 1 表明debug模式,任何进程都可以产生core文件
- 2 表明生成的core文件只有root用户可读,更加安全地保护内存数据
/proc/sys/kernel/core_pattern 设置的core文件存放目录和core文件名称,注意磁盘空间要足够存储core file。
/proc/sys/kernel/core_uses_pid 控制core文件扩展名是否带中进程id。
3. 模拟MySQL崩溃,生成core文件
测试当mysqld进程崩溃时,是否会产生core file:
kill -SEGV mysqld进程号
4. gdb调试core文件
gdb调试core文件:
gdb /usr/local/mysql/bin/mysqld core.mysqld.1573578046.1207
/usr/local/mysql/bin/mysqld 为MySQL进程路径。
进入gdb命令行界面后,就是一些gdb的命令了,这里不再赘述。
未经允许不得转载:搬瓦工VPS_美国VPS » MySQL配置参数core-file