獲取 MySQL 崩潰時的 core file
阿新 • • 發佈:2019-01-02
對於一般程序,要讓程序崩潰時能生成 core file 用於除錯,只需要設定 rlimit 的 core file size > 0 即可。比如,用在 ulimit -c unlimited 時啟動程式。
對 MySQL 來說,由於 core file 中會包含表空間的資料,所以預設情況下為了安全,mysqld 捕獲了 SEGV 等訊號,崩潰時並不會生成 core file,需要在 my.cnf 或啟動引數中加上 core-file。
但是即使做到了以上兩點,在 mysqld crash 時還是可能無法 core dump。還有一些系統引數會影響 core dump。以下指令碼可供參考:
echo 2 >/proc/sys/fs/suid_dumpable
chmod 0777 /var/crash
echo /var/crash/core> /proc/sys/kernel/core_pattern
echo 1 >/proc/sys/kernel/core_uses_pid
由於 mysql 通常會以 suid 方式啟動,所以需要開啟 suid_dumpable 。對於 core_pattern,最好指定一個保證可寫的絕對路徑。
之後,就可以用 kill -SEGV 讓 mysqld 崩潰,測試一下能不能正常產生 core file 了。