我已经在 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
我只有两个接口eth0
和lo
,所以看起来 WSL 和 Windows 共享相同的本地接口。为了验证这一点,我启动了一个 Python 网络服务器并从 localhost 上的 Windows 访问。
如何从 WSL2 连接到 MySQL?
根据关于如何连接到主机的WSL vs WSL2 文档,您可以在/etc/resolv.conf中的 WSL2 中查看名称服务器,它恰好是主机:
如本文所述,您必须使用 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
:(如果您
/mnt/c/
相应地使用正确的 ipconfig 路径。)然后你可以输入
mysql -uroot ...
上述步骤有效,但有一种更简单的方法来引用主机。
截至 2021 年,您只需将 Windows 主机称为:
或者
这将返回与上述使用 resolve.conf 文件的出色解决方法相同的 IP 地址,并且更容易一些。
请注意,来自 wsl 的 localhost 确实解析为不同的 IP,即正常的 127.0.0.1
这是有道理的,它基本上是一个虚拟机。
意想不到的后果:如果您尝试登录 MariaDB,这不算作 localhost - 因此您必须具有正确的安全设置以允许从远程计算机(包含的 VM)登录