📚

MySQLアップデート後にデータベース起動できなくなったので、対処してみる

2025/03/18に公開

バージョン

  • MySQL: 5.7→8.0へバージョンアップ
  • Rails: 3.1

発生した問題

以下エラーにより、local開発環境でRailsを使ってMySQLに対してマイグレーションができなくなった。

Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)

よくあるマイグレーションエラー時の対処法として以下が紹介されるが、実行しても同じエラーが発生する。

% touch /tmp/mysql.sock
% brew services restart mysql@8.0

以下より、そもそもMySQLを起動できてなさそう。

% brew services list           
Name      Status  User            File
mysql@8.0 stopped s_u ~/Library/LaunchAgents/homebrew.mxcl.mysql@8.0.plist

ゴールは、「MySQLを起動して、RailsでMySQLに対してマイグレーションできるようにする」こと。

調査

https://moneyforward-dev.jp/entry/2024/03/29/170000
上記のサイトがかなり参考になる!

5.7系時代のredoログを残したまま8系にアップグレードしたことが原因であるようです。

redoログファイルを削除し、MySQLを再起動してみます。

エラーログを確認してみる。<MYPC_NUMBER>の箇所は使用しているPCごとに異なる。

% cat /opt/homebrew/var/mysql/<MYPC_NUMBER>.err

すると以下が表示される。参考のサイトとほぼ同じエラーメッセージが出てることが分かる。

2024-12-09T16:51:59.202349Z 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.43, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html

解決法

redoログファイル(ib_logfile0・ib_logfile1)が存在することを確認する。

% ls -l /opt/homebrew/var/mysql/
total 799872
-rw-r-----    1 s_u  admin     196608 12  9 12:31 #ib_16384_0.dblwr
-rw-r-----    1 s_u  admin    8585216 12  6 00:52 #ib_16384_1.dblwr
drwxr-x---   34 s_u  admin       1088 12  9 12:33 #innodb_redo
drwxr-x---    2 s_u  admin         64 12  9 12:33 #innodb_temp
-rw-r-----    1 s_u  admin      42722 12  4 01:50 MYPC-slow.log
-rw-r-----    1 s_u  admin   39601015 12 10 01:55 MYPC.err
-rw-r-----    1 s_u  admin         56 10  7  2022 auto.cnf
-rw-r-----    1 s_u  admin        180 12  4 01:50 binlog.000001
-rw-r-----    1 s_u  admin   11970727 12  9 12:33 binlog.000002
-rw-r-----    1 s_u  admin         32 12  4 01:50 binlog.index
-rw-------    1 s_u  admin       1676 10  7  2022 ca-key.pem
-rw-r--r--    1 s_u  admin       1112 10  7  2022 ca.pem
-rw-r--r--    1 s_u  admin       1112 10  7  2022 client-cert.pem
-rw-------    1 s_u  admin       1676 10  7  2022 client-key.pem
drwxr-x---  645 s_u  admin      20640 12  6 00:52 coinbook_development
drwxr-x---  645 s_u  admin      20640 12  6 00:52 coinbook_test
-rw-r-----    1 s_u  admin      22718 12  9 12:33 ib_buffer_pool
-rw-r-----    1 s_u  admin   50331648 12  9 12:35 ib_logfile0
-rw-r-----    1 s_u  admin   50331648 12  9 12:35 ib_logfile1
-rw-r-----    1 s_u  admin  146800640 12  9 12:33 ibdata1
drwxr-x---    8 s_u  admin        256 12  4 01:49 mysql
-rw-r-----    1 s_u  admin   50331648 12  6 01:52 mysql.ibd
-rw-r-----    1 s_u  admin          6 12  4 01:49 mysql_upgrade_info
drwxr-x---  112 s_u  admin       3584 12  4 01:49 performance_schema
-rw-------    1 s_u  admin       1680 10  7  2022 private_key.pem
-rw-r--r--    1 s_u  admin        452 10  7  2022 public_key.pem
-rw-r--r--    1 s_u  admin       1112 10  7  2022 server-cert.pem
-rw-------    1 s_u  admin       1680 10  7  2022 server-key.pem
drwxr-x---    3 s_u  admin         96 12  4 01:49 sys
-rw-r-----    1 s_u  admin   16777216 12  6 01:52 undo_001
-rw-r-----    1 s_u  admin   33554432 12  6 01:52 undo_002

redoログファイルを削除する。

% rm /opt/homebrew/var/mysql/ib_logfile0
% rm /opt/homebrew/var/mysql/ib_logfile1

MySQLをstop→startで再起動する。

% brew services stop mysql@8.0
Stopping `mysql@8.0`... (might take a while)
==> Successfully stopped `mysql@8.0` (label: homebrew.mxcl.mysql@8.0)
% brew services start mysql@8.0
==> Successfully started `mysql@8.0` (label: homebrew.mxcl.mysql@8.0)

MySQLを起動できた!

% brew services list           
Name      Status  User            File
mysql@8.0 started s_u ~/Library/LaunchAgents/homebrew.mxcl.mysql@8.0.plist

これで無事マイグレーションもできるようになる!🎉

Discussion