Ver 5.0 で出力されるか心配だったが、以下の手順でなんとか出力できた。
前提条件
/etc/init.d/mysqld を使って root で起動している
設定手順 概要
- my.cnf の設定
- /etc/profile 編集
- suid_dumpable 設定
- mysqld 再起動
手順詳細
1. my.cnf に以下を設定
[mysqld]
core-file
[mysqld_safe]
core-file-size = unlimited
2. /etc/profile 編集
ulimit -c unlimited を常に有効にするために、/etc/profile にある以下の箇所を変更。
(30行目付近)
ulimit -S -c 0 > /dev/null 2>&1
↓
ulimit -c unlimited > /dev/null 2>&1
3. suid_dumpable 設定
/etc/init.d/ 配下のスクリプトを root で起動しているアプリでもコアダンプ出力を有効にする
とりあえずすぐに有効にする設定
# echo 1 > /proc/sys/fs/suid_dumpable
恒久設定
# vi /etc/sysctl.conf
-----
(↓以下を最終行に追加)
fs.suid_dumpable=1
4. mysqld 再起動
# /etc/init.d/mysql restart
5.コアダンプの出力テスト
1. mysqlプロセス確認
# ps -ef | grep mysql | grep -v grep
root 9681 9611 0 17:00 pts/1 00:00:00 tailf /var/log/mysqld.log
root 11915 1 0 20:39 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/data/mysql/datafile --socket=/data/mysql/run/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
mysql 11971 11915 3 20:39 pts/0 00:00:01 /usr/libexec/mysqld --basedir=/usr --datadir=/data/mysql/datafile --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --open-files-limit=8192 --port=3306 --socket=/data/mysql/run/mysql.sock
2. SIGSEGV シグナルでmysqldを落とす (SIGSEGV:セグメンテーション違反)
# kill -11 11971
(↓mysqld.err)
Number of processes running now: 0
140807 20:40:24 mysqld restarted
mysqld_safe を介して立ち上げているため、プロセスダウンを検知してすぐに再起動がかかる
# ps -ef | grep mysql | grep -v grep
root 9681 9611 0 17:00 pts/1 00:00:00 tailf /var/log/mysqld.log
root 11915 1 0 20:39 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/data/mysql/datafile --socket=/data/mysql/run/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
#-↓ プロセスIDが違う(再起動がかかったため)
mysql 12030 11915 12 20:40 pts/0 00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/data/mysql/datafile --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --open-files-limit=8192 --port=3306 --socket=/data/mysql/run/mysql.sock
3. コア出力確認
datadir に core.<pid> で出力されている
# ls -l /data/mysql/datafile/core*
-rw------- 1 mysql mysql 6817431552 8月 7 20:40 /data/mysql/datafile/core.11971