从 WSL2 连接到 MySQL?

从 WSL2 连接到 MySQL?

我在 Windows 上安装了 MySQL 服务器,我想从 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我只有两个接口eth0lo,因此 WSL 和 Windows 似乎共享同一个本地接口。为了验证这一点,我启动了一个 Python Web 服务器并从本地主机上的 Windows 进行访问。

如何从 WSL2 连接到 MySQL?

答案1

根据WSL 与 WSL2 文档关于如何连接主机,你可以在 WSL2 中查看/etc/resolv.conf对于名称服务器(恰好是主机):

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

答案2

正如所述本文,您必须使用 WSL 以太网适配器创建的 IP。

如果需要,请创建 Windows 防火墙规则。(MySQL 的入站规则)

运行ipconfig.exe并查找Ethernet-Adapter vEthernet (WSL)。提取 IP 地址。(如果您使用文章中的 awk 行,我必须将 $14 更改为 $13 才能使其正常工作)。

在 mysql 中授予 ip 地址访问权限:(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

编辑 如果您想跳过此-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 ...

答案3

上述步骤有效,但有一个稍微更简单的方法来引用主机。

自 2021 年起,您需要做的就是将 Windows 主机称为:

hostname.

或者

hostname.local

这将返回相同的IP 地址与上面使用 resolve.conf 文件的出色解决方法一样,并且更加简单。

请注意,wsl 中的 localhost 确实解析为不同的 IP,即正常的 127.0.0.1

这很有道理,基本上它是一个虚拟机。

意外后果:如果您尝试登录 MariaDB,这不算作本地主机 - 因此您必须具有正确的安全设置才能允许从远程计算机(包含的 VM)登录

相关内容