LoginSignup
5
4

More than 5 years have passed since last update.

MySQL コアダンプ出力設定

Posted at

Ver 5.0 で出力されるか心配だったが、以下の手順でなんとか出力できた。

前提条件

/etc/init.d/mysqld を使って root で起動している

設定手順 概要

  1. my.cnf の設定
  2. /etc/profile 編集
  3. suid_dumpable 設定
  4. 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
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4