web-dev-qa-db-ja.com

WSL2からMySQLに接続しますか?

MySQLサーバーをWindowsにインストールしましたが、WSL2から接続したいと思います。残念ながら、WSLはMySQLサーバーに到達できないようです:

$ /mnt/c/Program\ Files/MySQL/MySQL\ Server\ 5.7/bin/mysql.exe -uroot -p
Enter password: 
mysql> exit
Bye

$ mysql -uroot -p --protocol=TCP
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)

ifconfigには2つのインターフェースしかありませんeth0およびloなので、WSLとWindowsは同じローカルインターフェースを共有しているようです。これを確認するために、Pythonウェブサーバーを起動し、ローカルホストのWindowsからアクセスしました。

WSL2からMySQLに接続する方法は?

1
nowox

ホストへの接続方法について WSL vs WSL2のドキュメント に従って、WSL2を/ etc/resolv.confホストであるネームサーバーの場合:

export WSL_Host_IP=$(awk '/nameserver/ { print $2 }' /etc/resolv.conf)
2
Vince

この記事 で説明されているように、WSLイーサネットアダプターが作成するIPを使用する必要があります。

必要に応じて、Windowsファイアウォールルールを作成します。 (MySQLのインバウンドルール)

ipconfig.exeを実行し、Ethernet-Adapter vEthernet (WSL)を探します。 IPアドレスを抽出します。 (記事のawk-lineを使用する場合、$ 14を$ 13に変更して機能させる必要がありました)。

Mysqlでip-addressアクセスを許可します:grant all on *.* to 'root'@'172.0.0.0/255.0.0.0' identified by '<password>' with grant option;(Windowsの再起動後にIPアドレスが変更されることがわかったため、IP範囲/マスクバージョンを使用する必要がありました。)

次に、mysql -uroot -p -h<ip-address> --protocol=tcpを呼び出すことができます

Editこの-hパラメータをスキップする場合は、.bashrcにエクスポートとエイリアスを追加できます。

export WSL_Host_IP=$(/c/Windows/system32/ipconfig.exe | awk '/WSL/ {getline; getline; getline; getline; print substr($13, 1, length($13)-1)}')
alias mysql='mysql -h$WSL_Host_IP'

/mnt/c/を使用する場合は、それに応じてipconfigのパスを修正してください。)

次に、mysql -uroot ...と入力します

2
Sascha