MySQLを複数起動した時にstatusで個別に状態を確認する方法
ひとつのサーバーでMySQLを2個起動する必要があったので、以下を参考にセットアップしました。
で、手順の中で起動スクリプトの編集をするところがあって、ちょっと自力で編集してたのですが、よく分からずに書き換えてしまってハマってました。
編集前の起動スクリプト /etc/init.d/mysqld の最後の方に以下のような部分があります。
# See how we were called. case "$1" in start) start ;; stop) stop ;; status) status mysqld ;; restart) restart ;; condrestart) condrestart ;; *) echo $"Usage: $0 {start|stop|status|condrestart|restart}" exit 1 esac
自分は複数起動のために mysqld を mysqld2 に書き換えてたのですが、上記の「status mysqld」のところも mysqld2 に書き換えてしまい、status を実行すると、
$ sudo /etc/init.d/mysqld2 status mysqld2 dead but subsys locked
というメッセージが出てしまっていました。
結論としては status mysqld の部分は書き換えなくてもいいです。MySQLが2個起動している状態では、
$ sudo /etc/init.d/mysqld status mysqld (pid 5986 2362) is running...
のように pid が2個表示されて、2個起動してることがわかります。ただ、これだとどっちがどっちだかわかりません。
そこで status で個別に状態を確認できないかなと思ってスクリプトを調べてみると、先頭のほうに以下のような記述がありました。
# Source function library. . /etc/rc.d/init.d/functions
この /etc/rc.d/init.d/functions を見てみると status 関数が定義されていました。そこには -p オプションに関する記述が。
if [ "$1" = "-p" ]; then pid_file=$2 shift 2 fi
どうやら −p オプションで pid ファイルを直接指定できるっぽい。ということで、新しく作成した起動スクリプトのほうで、
status) - status mysqld2 + status -p $mypidfile mysqld2 restart)
と書き換えて実行してみると、
$ sudo /etc/init.d/mysqld2 status mysqld2 (pid 5986) is running...
おーー、できた。ps で確認してみると確かに 5986 番で2個目のMySQLが起動していました。
そもそも pid ファイルを /var/run/mysqld/mysqld2.pid と指定してたのですが、命名規則的に考えると /var/run/mysqld2/mysqld2.pid としてたら良かったのかもしれない?のですが、未検証です。まぁうまく動いたのでよしとしましょう。。
コメントを残す