Mysql8 でsequel pro がクラッシュした件 caching_sha2_password

新しいPCを調達したのでsqlをインストールし直し。
brew install mysql で何時ものようにインストールしたと思いや入ってきたのがMysql5.xでなく8だった。
そういや8出たってニュース見たなーと思いつつMysqlを立ち上げSequel Proでアクセスしてみると

Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image not found

なんじゃりゃ

調べてみると、MySql8からデフォルトの認証方法がmysql_native_passwordからcaching_sha2_passwordに変わったらしい。

Mysqlはアカウント毎に認証方法が指定されているが、5.7以前は殆どmysql_native_passwordプラグインで認証されているのだが8からはcaching_sha2_passwordが推奨になったようだ。
caching_sha2_passwordの方がパスワードに暗号化処理を掛けている為より安全性が高いからだ。
MySqlの認証はクライアントとサーバーで同じ認証形式をサポートしている必要がある為、Sequel Pro側でまだ対応していないようだ。
新しい機能は色々変更しなければならない為認証方法を元にもどそう。

ALTER USER '***'@'%' IDENTIFIED WITH mysql_native_password BY '***';
FLUSH PRIVILEGES; 

無事、Sequel Proから繋がりました。
さっそく任意のデータベースを開いてみると
クラッシュしました。
問題が発生しましたと言われ永遠のloading
おいおいおいおい
今度はなんだよデータベースくらい見せろよ
sql8 Sequel Proで検索してみると案の定Sequel Pro側が未対応であった。
理由はSqlの8からスキーマの定義等色々変わっているかららしい。

Sql8のデータベース記述:

type=MYSQL_TYPE_VAR_STRING
flags=4225
// 0001 000 1000 0001
//                  ^-- NOT NULL
//          ^---------- BINARY
//    ^---------------- NO DEFAULT
charsetnr=33 
// Sequel Pro: {
//		33,
//		"utf8",
//		"utf8_general_ci",
//		"UTF-8 Unicode"
//	},

Sql5.xのデータベース記述:

type=MYSQL_TYPE_VAR_STRING
flags=4225
// 0000 000 0000 0001
//                  ^-- NOT NULL
charsetnr=33
// Sequel Pro: {
//		33,
//		"utf8",
//		"utf8_general_ci",
//		"UTF-8 Unicode"
//	},

エラーになるわけよ。
変更しすぎや8.0

これ以上ハマるのは御免なので5.7にもどそう
Clean uninstall 手順:

まず現在起動しているSqlをkillする

mysql.server stop
ps -ef | grep mysql
kill -KILL (PID)

※PIDとはgrepで出てきたプロセスIDである。
grep processも引っかかるけど無視してよい

MySqlのプロセスが停止しているのを確認したらアンインストール

sudo rm -rf /usr/local/var/mysql
brew uninstall mysql
brew cleanup

ただ単にuninstallしただけだと8.0で作られた変なスキーマなデータが残ってしまうので問題を起こしかねない。
必ずファイルごと消し去ろう。

8.0をアンインし終わったところで早速5.7を入れなおしましょう。

brew install mysql@5.7
brew link mysql@5.7 --force

これで5.7のパスもmysqlで通りインストール出来たはず。
恐る恐るSequel Proを開いてみるとーー
無事開けました。

結構時間食ってしまった。
8.0は色々新しいのでしばらくは様子見だね。