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に接続する方法は?
ホストへの接続方法について WSL vs WSL2のドキュメント に従って、WSL2を/ etc/resolv.confホストであるネームサーバーの場合:
export WSL_Host_IP=$(awk '/nameserver/ { print $2 }' /etc/resolv.conf)
この記事 で説明されているように、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 ...
と入力します