MAMP の MySQL が起動しない

特に何もしていないのに、 MAMP の Apache Web さーばや MySQL データベースサーバが起動しなくなった、というような質問を受けることが時々あります。

今回は MySQL が起動せず、 phpMyAdmin を開いたところ、次のエラーメッセージが表示されました。

1#2003 - Can't connect to MySQL server on 'localhost' (10061) — The server is not responding.

調べてみると ポートが使用中のため、 MySQL が起動できない という状態のようでした。

対処として、

  1. そのポートを使用しているプロセスを調べて
  2. プロセスを停止する

という方法をとりました。

ポートを使用しているプロセスを調べる

まずは そのポートを使用しているプロセス を調べます。

ターミナルを起動し、次コマンドを入力します。

1$ lsof -i :[ポート番号]

今回は MAMP の MySQL でポート番号は 8889 でしたため、次のコマンドを実行しました。

1$ lsof -i :8889

すると、次のような結果が表示されました。

1COMMAND   PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
2mysqld  23048  [user_name]   34u  IPv6 0xddcfd357f938fd83      0t0  TCP *:ddi-tcp-2 (LISTEN)

上記を読み解くと、 MySQL が、 PID (プロセス番号) 23048 で稼働中、という意味です。

何らかの理由で MySQL のプロセスが残っており、これが妨げとなって新しいプロセスを起動できない状態になっているようです。

プロセスを停止する

今回 MAMP という閉じられた環境であるため、そのままプロセスを停止します。

プロセスの停止は、ターミナルで次コマンドを実行します。

1$ kill [PID]

PID は先のコマンドで調べた PID (プロセス番号) の数値を入力します。

具体的には

1COMMAND   PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
2mysqld  23048  [user_name]   34u  IPv6 0xddcfd357f938fd83      0t0  TCP *:ddi-tcp-2 (LISTEN)

23048 をいれて

1$ kill 23048

というようにします。


プロセスを停止すると、次に

1$ lsof -i :8889

を実行しても何も出力されなくなります。


このように、 ポートが使用中のため、同じ同じポート利用するアプリケーションが起動しない という状態であれば、 ポートを使用しているプロセスをしらべて停止 してポートが空けてあげればよいです。

今回は MAMP という閉じた環境のため影響は僅少ですが、 プロセスの停止はわりと最終手段 であるため、安易な操作は禁物ですよ。