ローカルで 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 からでは、デフォルトのパスワード認証機構が 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

関連記事