前提
下記の環境で作業していました。
OS:Windows 10
DBクライアント:DBeaver
DockerでMySQLコンテナを立ててテスト環境を作ろうとした
今回単にDockerで軽くMySQLコンテナを立てようとしたらエラーに次ぐエラーで大変だったので備忘録。
今回利用したdocker-compose.ymlは次でよくある平凡な定義でした。
services:
db:
image: mysql:8
command: --collation-server=utf8mb4_0900_bin
--transaction-isolation=READ-COMMITTED
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
TZ: Asia/Tokyo
ports:
- 13306:3306
1個目のエラー
Host xxx is not allowed to connect to this MySQL server
よくある接続しようとしているユーザーの権限にリモートで接続する権限がないんだなと思いました。
下記GRANTコマンドで権限付与を試してみることに。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
2個目のエラー
すると、次のようなエラーが・・・
you are not allowed to create a user with grant
権限的にGRANTが実行できない。
なんで?と思ったけど、docker-compose.ymlに次のように追記すれば、最初からリモートから接続できるみたいで、こちらを試してみることに。
environment:
MYSQL_ROOT_HOST: '%'
3個目のエラー
よし、これでリモートから接続できるようになったはず。
もう1度DBクライアントから接続してみようとしたところ、またまたエラー・・・
Public Key Retrieval is not allowed
これは見たことない。
ググってみると、有志の方が記事に残してくれていた!
「allowPublicKeyRetrieval」をtrue、「useSSL」をfalseにするみたい。
これを実行すると、無事接続できました!!
さいごに
単純にMySQLコンテナ立てて外部から接続しようとしただけなのに、こんなに複雑なことになるっけ?と思いつつ単純な作業だけに同じような事象に見舞われる方もいると思うので備忘録として残します。