MySQL配置参数core-file

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_dumpable
chmod 0777 /mysql/crash
echo /mysql/crash/core.%e.%t.%p > /proc/sys/kernel/core_pattern
echo 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进程路径。

发表评论