何が起きた
MySQL8.0のイメージを起動したDockerコンテナに外部(docker-composeの別のコンテナ)からアクセスすると、ERROR 1045 (28000): Plugin caching_sha2_password could not be loaded
とエラーが発生するので、mysql_native_password
に認証方法を変更しました。すると、GRANTしているにもかかわらず、ERROR 1045 (28000): Access denied
が発生します。
対処方法
mysql_native_password
に変更した後に改めてパスワードを修正する。
ALTER USER 'develop'@'%' IDENTIFIED WITH mysql_native_password BY 'password'
ALTER USER 'develop'@'%' identified by 'develop';
詳しい経緯
- docker-composeで以下のように設定しました
db:
image: mysql:8.0
container_name: develop_db
command: mysqld --character-set-server=utf8mb4 --sql-mode=""
volumes:
- mysql-volume:/var/lib/mysql:delegated
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_HOST: '%'
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: calcium
MYSQL_USER: develop
MYSQL_PASSWORD: develop
tty: true
- 別のコンテナからmysql cliでアクセスすると
ERROR 1045 (28000): Plugin caching_sha2_password could not be loaded
が発生 - 以下のSQLで「mysql_native_password」に変更
ALTER USER 'develop'@'%' IDENTIFIED WITH mysql_native_password BY
'password'
- 別のコンテナからmysql cliでアクセスすると
ERROR 1045 (28000): Access denied
が発生する - GRANT分で権限を付与
GRANT ALL PRIVILEGES ON `calcium_test`.* TO 'develop'@'%';
FLUSH PRIVILEGES;
- ここまでやってもAccess deniedが消えなかった。けど、パスワードを再設定したらいけました。
たったこれだけで4時間溶かしました。