MAMPのMySQLエラーを解消する「Can’t connect to MySQL server on ‘localhost’」

よこのじ(@yokonoji_work)です。

MAMPをイジっていると、phpMyAdminにアクセスしたときに次のようなエラーが発生しました。

Error
MySQL said: #2003 - Can't connect to MySQL server on 'localhost' (10061) — The server is not responding.
mysqli_real_connect(): (HY000/2003): Can't connect to MySQL server on 'localhost' (10061)

このエラーを解消した方法を備忘録として残しておきます。

エラー状況を整理する

発生したのはこのようなエラーです。「Open start page」より初期画面のlocalhost/MAMP/には接続できますが、MySQLには接続できないという状況です。

986-mamp-error-10061

そして、Stop Serverを押してもMySQL Serverは停止しません(Apache Serverは停止します)。

986-mamp-error-stopserver

このような状況ですので、MySQL Serverが停止せずに起動したままになっているのが原因のようです。

こうなる前にやったこと、それはデータベース -> ユーザー でのパスワードの変更です。変更したのはrootのパスワードです。

エラー解消方法

「C:\MAMP\logs」フォルダにMySQLのエラー情報ファイルmysql_error_log.errがあります。これをメモ帳で開くと、私の場合はport: 8891に問題があるようです。

018-11-30 01:01:59 12132 [Note] Starting crash recovery...
2018-11-30 01:01:59 12132 [Note] Crash recovery finished.
2018-11-30 01:02:00 12132 [Note] Server hostname (bind-address): '*'; port: 8891
2018-11-30 01:02:00 12132 [Note] IPv6 is available.
2018-11-30 01:02:00 12132 [Note]   - '::' resolves to '::';
2018-11-30 01:02:00 12132 [Note] Server socket created on IP: '::'.

そして、私がやったこと。

まず、phpMyAdminのエラー画面を表示させます。

Apache Serverが停止している場合は「Open start page」でページが開けませんので、Apache Serverを起動する必要があります。しかし、「Stop Servers」のボタンしかないと思います。その場合は「Preferences」でApacheを別ポートに変更すると起動されます。

次に「C:\MAMP\bin\phpMyAdmin」フォルダにあるconfig.inc.phpを開いて、ポート番号をエラーログに記載のポートに書き換えます。今回、私の場合は3306を8891に変更しました。また、パスワードも変更後のものに書き換えます。

$cfg['Servers'][$i]['port'] = '3306'; // MySQL port
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = 'root'; // MySQL password

書き換えた後、エラー画面で「Retry to connect」またはページの更新をすると、正常にMySQLに接続できるはずです。接続できたら、MAMPの設定「Preferences」でMySQLのポートを先ほど書き換えたポートと同じにします。

このとき、MySQL Serverのポートが使用済みという表示があるかと思いますが、その場合は「Use anyway(とにかく使う)」を押して、設定で指定したポートを使うようにします。

これでもう一度phpMyAdminに接続できるか確認します。接続できたら「Stop Servers」を押して、MySQL Serverも正常に停止できることを確認します。

986-mamp-error-問題解消

以上の内容で問題が解消されない場合は、エラー情報ファイルmysql_error_log.errを遡って他に問題があるポートがない確認して、同様の手順を行ってみてください。