こんにちは、クラウド経費・クラウド債務支払でバックエンドエンジニアをしている@いいねです。
最近、私は開発環境で使用しているMySQLを、Homebrewを通じて5.7系から8系へバージョンアップしました。 その際に、古いバージョンをアンインストールして新しいバージョンをインストールするというシンプルな手順で行いました。
しかし、このアップグレードが思わぬトラブルを引き起こすことになります。
注意点
今回の解決策は開発環境での対応であり、本番環境で同様の対応を行う場合は十分な検証を行った上で実施することをお勧めします。 本解決策を参考に実施される際にはくれぐれも十分な注意を払った上で、自己責任で実施してください。
問題発生:MySQLサーバーが起動しない
バージョンアップ後、いつものようにMySQLサーバーを起動しようとしたところ、以下のようなエラーメッセージが表示されました。
$ mysql.server start Starting MySQL . ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/******.pid).
エラーログの調査
エラーメッセージだけでは原因が不明だったため、エラーログを確認しました。すると、以下のようなログが出力されていました。
2024-03-29T02:23:06.078427Z 0 [System] [MY-015015] [Server] MySQL Server - start. 2024-03-29T02:23:06.224674Z 0 [System] [MY-010116] [Server] /opt/homebrew/opt/mysql/bin/mysqld (mysqld 8.2.0) starting as process 7300 2024-03-29T02:23:06.226433Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /opt/homebrew/var/mysql/ is case insensitive 2024-03-29T02:23:06.250233Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2024-03-29T02:23:06.720544Z 1 [ERROR] [MY-012526] [InnoDB] Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. This redo log was created with MySQL 5.7.44, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.2/en/upgrading.html 2024-03-29T02:23:06.720571Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error. 2024-03-29T02:23:06.722151Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine 2024-03-29T02:23:06.722223Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 2024-03-29T02:23:06.722235Z 0 [ERROR] [MY-010119] [Server] Aborting 2024-03-29T02:23:06.722524Z 0 [System] [MY-010910] [Server] /opt/homebrew/opt/mysql/bin/mysqld: Shutdown complete (mysqld 8.2.0) Homebrew. 2024-03-29T02:23:06.723133Z 0 [System] [MY-015016] [Server] MySQL Server - end.
確かに起動に失敗しており、特にポイントとなるのはこの行です。
2024-03-29T02:22:55.860389Z 1 [ERROR] [MY-012526] [InnoDB] Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. \ This redo log was created with MySQL 5.7.44, and it appears logically non empty. \ Please follow the instructions at http://dev.mysql.com/doc/refman/8.2/en/upgrading.html
5.7系時代のredoログを残したまま8系にアップグレードしたことが原因であるようです。
redoログファイルであるib_logfile0
, ib_logfile1
はMySQLのデータディレクトリに存在します。
自分の場合、HomebrewでインストールしたMySQLのデータディレクトリは/opt/homebrew/var/mysql/
にありました。
参考:MySQL :: MySQL 8.0 リファレンスマニュアル :: 15.6.5 redo ログ
$ ls /opt/homebrew/var/mysql/ ib_logfile0 ib_logfile1 ...
ib_logfile0
, ib_logfile1
が残っていることが確認できます。
解決策:redoログファイルの削除
幸い開発環境という気軽に操作できる環境だったため、問題のredoログファイルを削除することにしました。
$ rm /opt/homebrew/var/mysql/ib_logfile0 $ rm /opt/homebrew/var/mysql/ib_logfile1
redoログファイルを削除し、MySQLを再起動してみます。
※ redoログファイルを削除することでデータの一部が失われる可能性があるため、必要に応じてデータのバックアップを取得してください。
$ mysql.server start Starting MySQL SUCCESS!
MySQLが無事に起動するようになりました。
マネーフォワード福岡拠点では、エンジニアを募集しています!
求人情報はこちら。
福岡開発拠点のサイトはこちら。