SupervisorでMySQLのプロセス管理


プロセスの稼働管理をして死んだら再起動してくれるツールといえば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
$

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *