homebrewでmysqlを8から5.7にバージョンを落としたときの対応
趣旨
Macにhomebrewで入れたMySQLを8から5.7にダウングレードした時の話をします。 事の発端は新しいMacBook Proに開発環境を移行しようとしたんですが、 homebrewでMySQLを入れるとバージョン8が入りました。
で、いろいろ変わっているようなので、今やりたいのはMySQL8対応じゃないし、問題を先送りすることにして、5.7にバージョンを落とすことにしました。 しかし、これはこれで小一時間はまりました。
発生した問題
homebrewは提供されていればバージョンを指定して過去のバージョンをインストールできます。brew uninstall
して、brew install
しましたが、起動が失敗します。
結論としては、アンインストールしても/usr/local/var/mysql/
に各種ファイルが残っていて、それが原因で起動に失敗していました。/usr/local/var/mysql/
以下のファイルをすべて削除することで解消しました。
やった内容
ここから先は、実際に試した内容です。
MySQL 8のuninstall
$ brew uninstall mysql
MySQL 5.7のinstall
brew search {キーワード}
で、どのパッケージが利用可能か確認
ラッキーなことに5.5, 5.6, 5.7が使えそうです。
$ brew search mysql ==> Formulae automysqlbackup mysql++ mysql-cluster mysql-connector-c++ mysql-search-replace mysql@5.5 mysql@5.7 ✔ mysql mysql-client mysql-connector-c mysql-sandbox mysql-utilities mysql@5.6 mysqltuner ==> Casks homebrew/cask/mysql-connector-python homebrew/cask/mysql-shell homebrew/cask/mysql-utilities homebrew/cask/navicat-for-mysql homebrew/cask/sqlpro-for-mysql
- バージョンを指定してインストール
$ brew install mysql@5.7 ==> Downloading https://homebrew.bintray.com/bottles/mysql@5.7-5.7.23.high_sierra.bottle.tar.gz Already downloaded: /Users/rsogo/Library/Caches/Homebrew/mysql@5.7-5.7.23.high_sierra.bottle.tar.gz ==> Pouring mysql@5.7-5.7.23.high_sierra.bottle.tar.gz ==> /usr/local/Cellar/mysql@5.7/5.7.23/bin/mysqld --initialize-insecure --user=rsogo --basedir=/usr/local/Cellar/mysql@5.7/5.7.23 --datadir=/usr/local/var/mysql --tmpdir=/tmp ==> Caveats We've installed your MySQL database without a root password. To secure it run: mysql_secure_installation MySQL is configured to only allow connections from localhost by default To connect run: mysql -uroot This formula is keg-only, which means it was not symlinked into /usr/local, because this is an alternate version of another formula. If you need to have this software first in your PATH run: echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile For compilers to find this software you may need to set: LDFLAGS: -L/usr/local/opt/mysql@5.7/lib CPPFLAGS: -I/usr/local/opt/mysql@5.7/include For pkg-config to find this software you may need to set: PKG_CONFIG_PATH: /usr/local/opt/mysql@5.7/lib/pkgconfig To have launchd start mysql@5.7 now and restart at login: brew services start mysql@5.7 Or, if you don't want/need a background service you can just run: /usr/local/opt/mysql@5.7/bin/mysql.server start ==> Summary 🍺 /usr/local/Cellar/mysql@5.7/5.7.23: 317 files, 234.4MB
これでうまく行ってくれれば良かったのですが、起動させると、次のようなエラーがでました。
$ mysql.server start Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/rsogo-Mac-Book-2.local.pid).
PID fileは存在しないし、困ってしまったのですが、/usr/local/var/mysql/
にある.err
ファイル(私の環境ではrsogo-Mac-Book-2.local.errというファイル名でした)を見ると、既にibdata1があるというFatalレベルのエラーが発生していました。
今回は初期構築なので、MySQLを一度アンインストール後、/usr/local/var/mysql
以下をバッサリ削除して、再度インストールすることで、下記のように正常に起動するようになりました。
$ mysql.server start Starting MySQL . SUCCESS!
実際にはこんなにすんなり行かず、特に下記のようにサービスとして起動するようにすると、これ自体は成功して、実際アクセスすると接続でエラーになるので、設定がミスっているのではないかとか、いろいろ試行錯誤しました。勘でいろいろやるんじゃなく、エラーログを調べるのは大事ですね。
brew services start mysql@5.7
あと今回いろいろ調べるなかでhomebrewで入れると/usr/local/Cellar/mysql@5.7/5.7.23
みたいなパスにインストールされるということも理解できました。