Windows 環境にインストールした MAMP で、MySQL だけが起動できない事象が起こったので、その際に行った対処をメモとして残しておきます。
環境
- Windows 10 PRO
- MAMP 4.1.0
MAMP のインストール先は C:\MAMP (デフォルト)です。
原因
MAMP をインストールしたときにデフォルトで作成されている MySQL の設定ファイル (C:\MAMP\conf\mysql\my.ini) でバイナリロギングが有効になっています。
バイナリロギングが有効なときは、バイナリログのファイル名がインデックスファイル (C:\MAMP\db\mysql\mysql-bin.index) に記録されるようなのですが、インデックスファイルの中にバイナリログのファイル名以外の情報が混入してしまっていることが原因のようでした。
.\mysql-bin.000001
2019-08-26T09:36:52.354676Z 0 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
... (途中省略) ...
2019-08-26T09:36:52.926819Z 0 [Note] InnoDB: Loading buffer pool(s) from C:\MAMP\db\mysql\ib_buffer_pool
2019-08-26T09:36:52.926928Z 0 [Note] Plugin 'FEDERATED' is disabled.
.\mysql-bin.000002
mysqld: File '2019-08-26T09:36:52.926928Z 0 [Note] Plugin 'FEDERATED' is disabled.' not found (Errcode: 13 - Permission denied)
2019-08-26T09:36:53.372353Z 0 [ERROR] Failed to open log (file '2019-08-26T09:36:52.926928Z 0 [Note] Plugin 'FEDERATED' is disabled.', errno 13)
2019-08-26T09:36:53.373788Z 0 [ERROR] Could not open log file
mysqld: File '2019-08-26T09:36:52.926819Z 0 [Note] InnoDB: Loading buffer pool(s) from C:\MAMP\db\mysql\ib_buffer_pool' not found (Errcode: 2 - No such file or directory)
2019-08-26T09:36:53.374542Z 0 [ERROR] Failed to open log (file '2019-08-26T09:36:52.926819Z 0 [Note] InnoDB: Loading buffer pool(s) from C:\MAMP\db\mysql\ib_buffer_pool', errno 2)
2019-08-26T09:36:53.376252Z 0 [ERROR] Could not open log file
... (途中省略) ...
mysqld: File '2019-08-26T09:36:52.354676Z 0 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions' not found (Errcode: 13 - Permission denied)
2019-08-26T09:36:53.412055Z 0 [ERROR] Failed to open log (file '2019-08-26T09:36:52.354676Z 0 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions', errno 13)
2019-08-26T09:36:53.413720Z 0 [ERROR] Could not open log file
上記を見ると、「.\mysql-bin.000001」や「.\mysql-bin.000002」というようなログファイル本体のファイル名以外に、実行ログと思われるものが記録されていて、それらをバイナリログファイルとして開こうとしてエラーになっているようです。
試しに、ログファイル名以外の実行ログ的なものをエディタで削除してみたら、うまく起動できました。
そもそも、バイナリログのインデックスファイルに実行ログ的なものが書き込まれるのが正しいのか?は調査できていません。(スミマセン)
バイナリログの使用目的は?
レプリケーションやリカバリに使用するみたいです。
詳しくはMySQLのマニュアルを参照してください。
https://dev.mysql.com/doc/refman/5.6/ja/binary-log.html
対処
手軽な開発環境として MAMP を利用しているだけで、MySQL のバイナリログを使用することはないと思うので無効にしてしまいます。
バイナリロギングの無効化
C:\MAMP\conf\mysql\my.ini の中の下記の部分をコメントアウトして、バイナリロギングを無効にします。
#log-bin=mysql-bin
#binlog_format=mixed
#server-id = 1
バイナリログの削除
C:\MAMP\db\mysql ディレクトリの中にある下記のファイルを削除します。
- mysql-bin.nnnnnn
- mysql-bin.index
MAMP の再起動
MySQL Server の緑ランプが点灯すれば成功です!
最後に
個人的な感想ですが、バイナリログが必要な人は、MAMP を使用しないと思うんですが...