mysql8 > mysql5.7 by brew

MySQLはもっとも世界で使用実績のあるDBであり、私も、私の勤める企業でも使用しています。2018年5月にはメジャーバージョンが切り替わり、8.0となりました。再帰SQLへの対応や、トランザクションの強化などいろいろ強化されています。

詳しくは、こちらのブログ(界隈では非常に有名です)か公式をどうぞ。

漢(オトコ)のコンピュータ道: MySQL 8.0登場!立ち止まることを知らない進化はこれからも続く。

MySQL :: MySQL 8.0 Release Notes

 

会社では、Pythonで開発することが多く、mysqlclientを使用しています。mysqlclientでmysql8に接続する場合は、/etc/my.cnfで下記を追加して、セキュリティを変更しなければなりません。

default_authentication_plugin= mysql_native_password

 

弊社では、まだ5.7を使用していますが、そのうち8になるかなぁとは思うので、メモしておきます。 さて、ローカルのMacで開発する際は、便利なのでHomebrewを使ってmysqlをインストールするのですが、こちらもデフォルトでインストールするバージョンは8にすでになっています。早いですね。でも、8だと動かないし、環境違うのは避けたいんだよな。デグレードしなくちゃ

 

とうことで、うっかり普通にbrew install mysqlとやってしまったけど、バージョン指定したいときの方法を書いておきます。

brew remove mysql
brew cleannup
(もしくは下記コマンドで直接消す)
sudo rm -r /usr/local/Cellar/mysql/ (本体を消す)
sudo rm -r /usr/local/var/mysql/ (設定ファイルを消す)

brew install mysql@5.7
echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile (パスを通す)
ln -sfv /usr/local/opt/mysql@5.7/*.plist ~/Library/LaunchAgents(自動起動する)
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql@5.7.plist

 

あと、Pythonのmysqlclientなどのように、ラッパーライブラリから呼び出す際は、

それらのライブラリが/usr/local/opt以下を見に言って、mysqlを実行するのですが、下記みたいなエラーが出ることがあります。

ImportError: dlopen(/Users/hoge/anaconda3/lib/python3.6/site-packages/_mysql.cpython-36m-darwin.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib

 

上を見ればわかりますが、/usr/local/opt/mysql ではなく、/usr/local/opt/mysql@5.7になっています。なので、エラーになります。しまいには、Did you install mysqlclient?と、「おまえ、myclient使おうとしてるけど、インストールしてんの?」と聞かれます。してるわ。

ということで、名前を変えます。ここにあるのは、全てシンボリックリンク です。

cd /usr/local/opt
mv mysql@5.7 mysql
(たぶん、すでにmysqlいうシンボリックリンク があるので、それはrmで消しておきます)

もし変更した場合は、上のパスと自動起動も変更しましょう。