ローカルで mysql をサクッと立てたい時に使うコマンド
Published: 2023/10/26
背景
docker run mysql
で起動した mysql を、ローカルの開発用 DB として使おうとして、 Sequel Ace からユーザーを作成した際に、そのユーザーでログインしようとすると、以下のエラーが発生した。
Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
原因
直接的な原因は以下。
MySQL 8.0のcaching_sha2_password + 非SSL接続が転ける
日々調べたこととかの覚書。主にMySQL。
yoku0825.blogspot.com
これに加えて、 MySQL 8 からでは、デフォルトのパスワード認証機構が caching_sha2_password
になる。
これにより、 Sequel Ace から作成していたユーザーはこの caching なパスワード認証を利用して作成され、結果、上記の記事の通り、 SSL 接続か、 「サーバーの公開鍵を指定しての TCP 接続」をしないと初回のログインができなくなる。
加えて、 Sequel Ace にはサーバーの公開鍵を指定しての非SSL な TCP 接続、という機能がないっぽいので、コンテナ起動以降の操作をすべてそれで完結していこうとすると、作成したユーザーのログインで詰まることになる。
(SSL 接続をすれば良さそうではあるが、開発環境でそこまでやりたいか、問題がある。)
対策
上記の記事にも解決策の一つとしてあるように、デフォルトのパスワード認証プラグインを旧来の mysql_native_password
を用いるようにしながら MySQL を起動させれば良い。
コマンドとしては以下のようになる。
docker run \
--name mysql-server \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=password \
mysql \
mysqld --default-authentication-plugin=mysql_native_password
コピペしやすく一行にまとめて以下。
docker run --name mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql mysqld --default-authentication-plugin=mysql_native_password
Tags: mysql
関連記事
MySQL で parent child なレコード群の bulk insert
2023/3/14
ARIES と fuzzy check pointing
2021/6/1
MySQL で json 配列の要素一つ一つをレコードとする
2019/3/2