F.Ko-Jiの「一秒後は未来」

MySQLを複数起動した時にstatusで個別に状態を確認する方法

ひとつのサーバーでMySQLを2個起動する必要があったので、以下を参考にセットアップしました。

» 複数MySQLのセットアップ備忘メモ – ひげろぐ

で、手順の中で起動スクリプトの編集をするところがあって、ちょっと自力で編集してたのですが、よく分からずに書き換えてしまってハマってました。

編集前の起動スクリプト /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 としてたら良かったのかもしれない?のですが、未検証です。まぁうまく動いたのでよしとしましょう。。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など