Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

HomebrewでアップグレードしたMySQLサーバー(5.7 → 8.2)が起動に失敗するようになった

こんにちは、クラウド経費・クラウド債務支払でバックエンドエンジニアをしている@いいねです。

最近、私は開発環境で使用している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が無事に起動するようになりました。


マネーフォワード福岡拠点では、エンジニアを募集しています!

求人情報はこちら。

hrmos.co

福岡開発拠点のサイトはこちら。

fukuoka.moneyforward.com