プロセスの稼働管理をして死んだら再起動してくれるツールといえばdaemontoolsが超定番で長らく便利に使っておりましが、さすがに10年以上更新されていないので今どきのOSで使うのはソースからコンパイルしたりと結構手間です。
最近のubuntuだとSupervisorが便利なのでこれでMySQLのプロセス管理をしてみます。
参考:
http://qiita.com/yujiod/items/a35c53221bdb3468e105
https://gist.github.com/solar/3900946
supervisor インストール
# apt-get install supervisor
インスト完了後にsupervisorは起動してるはずだが、未起動だったら以下を実行。
# service supervisor restart
以下のmysqldの起動スクリプトmysqld.conf を作成する。
/etc/supervisor/conf.d$ vi mysqld.conf
[program:mysqld]
command=/usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/bin/mysqld_safe –pid-file=/var/run/mysqld/mysqld.pid –user=mysql
autostart=true
autorestart=true
supervisorにMySQLを登録する
$ sudo supervisorctl reread mysqld
mysqld: available
$ sudo supervisorctl add mysqld
mysqld: added process group
mysqlを停止する
$ sudo service mysql stop
mysql stop/waiting
supervisorのmysqlを起動する
$ sudo supervisorctl restart mysqld
mysqld: ERROR (not running)
mysqld: started
$ sudo supervisorctl status
mysqld RUNNING pid 23862, uptime 0:00:05
起動確認
$ ps ax|grep mysql
23862 ? S 0:00 /usr/bin/python /usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/bin/mysqld_safe –pid-file=/var/run/mysqld/mysqld.pid –user=mysql
23863 ? S 0:00 /bin/sh /usr/bin/mysqld_safe –pid-file=/var/run/mysqld/mysqld.pid –user=mysql
24232 ? Sl 0:00 /usr/sbin/mysqld –basedir=/usr –datadir=/var/lib/mysql –plugin-dir=/usr/lib/mysql/plugin –user=mysql –log-error=/var/log/mysql/error.log –pid-file=/var/run/mysqld/mysqld.pid –socket=/var/run/mysqld/mysqld.sock –port=3306
24267 pts/2 S+ 0:00 grep mysql
元々あった mysql自動起動を無効にする
参考 http://blog.goo.ne.jp/59099/e/7cfc3adee76363885fe25707fa4c1963
$ sudo vi /etc/init/mysql.conf
↓ 以下をコメントアウトする
#start on runlevel [2345]$
動作テスト
mysqldをkillしてみると即座に再起動することを確認する。
$ ps ax|grep mysql
25307 ? S 0:00 /usr/bin/python /usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/bin/mysqld_safe –pid-file=/var/run/mysqld/mysqld.pid –user=mysql
25308 ? S 0:00 /bin/sh /usr/bin/mysqld_safe –pid-file=/var/run/mysqld/mysqld.pid –user=mysql
25681 ? Sl 0:03 /usr/sbin/mysqld –basedir=/usr –datadir=/var/lib/mysql –plugin-dir=/usr/lib/mysql/plugin –user=mysql –log-error=/var/log/mysql/error.log –pid-file=/var/run/mysqld/mysqld.pid –socket=/var/run/mysqld/mysqld.sock –port=3306
31699 pts/5 S+ 0:00 grep mysql
$ sudo kill 25681
↓別のPIDで上がっていることが分かる
$ ps ax|grep mysql
31976 ? S 0:00 /usr/bin/python /usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/bin/mysqld_safe –pid-file=/var/run/mysqld/mysqld.pid –user=mysql
31977 ? S 0:00 /bin/sh /usr/bin/mysqld_safe –pid-file=/var/run/mysqld/mysqld.pid –user=mysql
32352 ? Sl 0:00 /usr/sbin/mysqld –basedir=/usr –datadir=/var/lib/mysql –plugin-dir=/usr/lib/mysql/plugin –user=mysql –log-error=/var/log/mysql/error.log –pid-file=/var/run/mysqld/mysqld.pid –socket=/var/run/mysqld/mysqld.sock –port=3306
32370 pts/5 S+ 0:00 grep mysql
$