DBeaverからWSL上で起動しているMySQLコンテナに接続する

UbuntuからWindowsのWSL環境に乗り換えてしばらく経ちますが、なんかうまくいかない状況が続いていて、さっさとやらないとなと思っていたのですが、ようやくできたかつ地味にハマったので覚書。

環境

  • Windows 11 Pro
    • WSL2 ubuntu 22.04.1
  • docker 24.0.5
    • MySQL 8.0 (8.0-bookwormのイメージを使用)

やったこと

結論から先に書いておくと、DBeaverから接続するhostのIPアドレスをWSLのIPアドレスにしました
これだけ。

Docker Composeを使用しており、設定ファイルは一部抜粋ですがこのようになっています。

version: '3.1'

services:
  :
  db:
    build: ./docker/mysql
    volumes:
      - api-db:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: 'Asia/Tokyo'
    ports:
      - 3306:3306
  :

ポートを変更する話も見かけたけど、WSL上で直接MySQLを起動していなかったので、そこは必要がなかった。

[Docker][WSL2] WSL2 の Docker 上で動く MySQL に ホストマシンから繋ぐ

DBeaverでの接続時にPublic Key Retrieval is not allowedが発生する

MySQL 8.0からの機能らしく、安全な通信ができない場合にエラーになるらしい。

記事からの引用ですが、以下の手順で解消できました。

  1. 接続設定画面を開く
  2. ドライバのプロパティタブを開く
  3. allowPublicKeyRetrievalをTRUEにする

MySQL接続時に「Public Key Retrieval is not allowed」が出る件│おくやんのテックダイアリー

できてみて

MacのときはDocker for Macで起動してたらlocalhostで繋がったのになとか思ってましたが、Windowsの上でWSL(Ubuntu)が動いていてみたいな想像をするとまぁそうかという感じでした。
落ち着いて考えればハッとすることだけど、なかなか気付けなかったな…w