mac で homebrew から入れた mysql 8.0 を 5.7 に落とす

ダウングレードとは言ってない
公式ドキュメントにもダウングレードがサポートされてないことははっきり書いてあります
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_statsmysql 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

このブログのデータも無事元通りになりました