ダウングレードとは言ってない
公式ドキュメントにもダウングレードがサポートされてないことははっきり書いてあります
MySQL :: MySQL 8.0 Reference Manual :: 2.10.2 Downgrading MySQL
production では必ず8.0に上げる前にバックアップを取っておきましょう
今回、 Homebrew で入れてたやつをうっかりアップグレードしてしまって焦りました
最終的に data ディレクトリを初期化する羽目になりました。。。(一応データは救出出来ました)
以下流れです
うっかり 8.0 にしてしまう
brew upgrade でよく見ずに更新してしまい、いつの間にか起動できなくなっているのに気付きました
その時はこのようなエラーが出ていました
2018-07-28T19:27:30.524132Z 1 [ERROR] [MY-010781] [Server] Found ./mysql/index_stats.frm file in mysql schema. DD will
create .ibd file with same name. Please rename table and start upgrade process again.
2018-07-28T19:27:30.524175Z 1 [ERROR] [MY-010336] [Server] Found .frm file with same name as one of the Dictionary Tab
les.
2018-07-28T19:27:30.524338Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-07-28T19:27:30.524359Z 0 [ERROR] [MY-010119] [Server] Aborting
5.7 を入れ直す
他にも色々変わってそうだし 8.0 を使い続けるのは厳しそうだったので元に戻す方向で頑張ることにしました
実行したコマンドは以下の通り(8.0を消して5.7を入れ直してます)
brew sevices stop mysql
brew uninstall mysql
brew install [email protected]
brew services start [email protected]
しかし5.7が起動しない
素直には起動してくれず、以下のようなログが吐かれていました
2018-07-28T22:01:56.921910Z 0 [ERROR] InnoDB: Unsupported redo log format. The redo log was created with MySQL 8.0.11. Please follow the instructions at http://dev.mysql.com/doc/refman/5.7/en/upgrading-downgrading.html
2018-07-28T22:01:56.921954Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2018-07-28T22:01:57.428053Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2018-07-28T22:01:57.428134Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2018-07-28T22:01:57.428180Z 0 [ERROR] Failed to initialize builtin plugins.
2018-07-28T22:01:57.428202Z 0 [ERROR] Aborting
どうやら中途半端に 8.0 向けになったファイルが悪さをしていそう?
ひとまず起動させて dump だけしたかったので redo log が書かれている ib_logfile を移動させてみます
brew services stop [email protected]
mkdir ~/backup
cd /usr/local/var/mysql
mv ib_logfile* ~/backup
brew services start [email protected]
自分の場合はこれで起動しました!
しかし err ログを見てると不穏な出力がありました
2018-07-28T22:09:52.237832Z 0 [Warning] InnoDB: Table mysql/innodb_index_stats has length mismatch in the column name
table_name. Please run mysql_upgrade
innodb_index_stats
は mysql
DB にある統計用テーブルとのことで、致命的な問題ではなさそうです(起動してますし)
一応動いているのでこのまま dump してしまいます
mysqldump -u root --databases db1 db2... > ~/all.sql
復旧
これで必要なデータは吸い出せたので、データディレクトリを初期化して dump したデータを入れ直します
brew services stop [email protected]
cd /usr/local/var
mv mysql mysql_old
mkdir mysql
mysqld --initialize-insecure
brew services start [email protected]
mysql -u root < ~/all.sql
このブログのデータも無事元通りになりました