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で消しておきます)
もし変更した場合は、上のパスと自動起動も変更しましょう。