趣旨
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みたいなパスにインストールされるということも理解できました。