【问题标题】:Cannot connect to MySQL database (running on WSL2) from Windows Desktop Application "MySQL Workbench"无法从 Windows 桌面应用程序“MySQL Workbench”连接到 MySQL 数据库(在 WSL2 上运行)
【发布时间】:2020-03-13 06:58:58
【问题描述】:

我在适用于 Linux 的 Windows 子系统(WSL2 版本)上设置了 MySQL。我对 MySQL 比较陌生,但我已经确认了以下几点:

  • 正在运行(ps ax | grep mysqld 返回值)
  • 它在默认主机127.0.0.1上运行
  • 它在默认端口3306上运行

要登录 mysql shell,我使用命令sudo mysql -u root -p。没有 sudo,我无法登录到 shell。

我认为这个问题与运行 MySQL 服务的主机有关,但我不知道如何更改它并正确连接。下面是 MySQL Workbench 中的连接设置截图。

下面是我使用显示的设置和我的root 用户密码时遇到的错误。

【问题讨论】:

  • 您是从可以运行命令行登录的同一台计算机上运行 mysql 工作台还是从另一台计算机上运行?
  • 是同一个物理设备。 MySQL 在 Windows Subsystem for Linux 上运行,而 MySQL Workbench 在 Windows 操作系统上运行。
  • 啊,我想how to connect to wsl mysql from windows host 可以帮到你。
  • 是的,我已经看过这篇文章,但是运行了 Powershell 脚本仍然无法连接。
  • 我认为这是关键:允许root用户从任何主机访问WSL2 MySQL:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

标签: mysql-workbench windows-subsystem-for-linux


【解决方案1】:

事实证明,这根本与 WSL 无关,而是 MySQL 用户的身份验证方法。

从 MySQL 5.5.10 版开始,用户可以使用auth_socket authentication。就我而言,我使用 Linux apt 存储库来配置和安装 MySQL,并将其设置为默认身份验证方法,如以下命令的输出所示:

SELECT user,authentication_string,plugin,host FROM mysql.user;

MySQL Workbench 不支持这种类型的身份验证,因此,您必须恢复到旧的身份验证方法mysql_native_password

为此,请在以 root 或您尝试连接到 MySQL Workbench 的任何用户身份登录时运行以下命令:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

完成后,MySQL 工作台连接正常。

【讨论】:

【解决方案2】:

起初我在连接到在 WSL2 中运行的 Mysql 时遇到问题,但现在我可以通过 localhost 连接到 WSL2 MySQL 实例。您只需要确保 MySQL 正在侦听它在 MySQL 8 中默认执行的所有端口。

[mysql]
port=3307 # or any port you like
bind-address=0.0.0.0

[

【讨论】:

  • 奇怪的配置你有 3307 但在连接 3306 并且它连接?显然这是安装在 Windows 上的另一个 DB 实例。
【解决方案3】:

我认为从 SQL 客户端(SQLYog、HeidiSQL 等)连接到安装在 WSL2(Windows 10)上的 mariaDB(MySQL)数据库不需要更改 SGDBR 配置,这是我为解决此问题所做的:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

这个命令会给root用户设置一个密码,就是这样... 您现在可以使用 root/[new_password] 连接到您的数据库

我希望它对你有帮助和工作

更多信息:https://mariadb.com/kb/en/authentication-plugin-unix-socket/

【讨论】:

    【解决方案4】:

    除了创建用户并授予对 localhost 和 % 的访问权限外,我还必须在 WSL 中使用 eth0 的内部 IP 地址。我按照How to connect to WSL mysql from Host Windows 中的说明进行操作。 它对我有用。

    【讨论】:

      【解决方案5】:

      我使用的是 WSL 1,不知不觉中我也一直在使用 MySQL 8 而不是 5.7。

      我在 StackExchange 网站上尝试了几个小时的答案,但都没有奏效。

      然后this answer 给了我检查我的 MySQL Workbench 版本的想法。当时是 6 点。

      升级到 MySQL Workbench 8 后,我就可以使用它连接到在 WSL 中运行的 MySQL 8 服务器:

      请注意,我之前曾运行过(在 MySQL 中,在 WSL 中):

      CREATE USER 'my_local'@'%' IDENTIFIED BY 'xxxxiuyiuyiuyxxx';
      GRANT ALL PRIVILEGES ON * . * TO 'my_local'@'%';
      FLUSH PRIVILEGES;
      

      【讨论】:

        【解决方案6】:

        如果其他人尝试了上述所有操作,但工作台仍然无法连接到 wsl2 数据库,对我来说,这是因为我在 windows 上也安装了 mysql(不是 wsl2)并且它的服务正在运行(MYSQL80)。立即停止它允许它连接到 wsl2 localhost。

        【讨论】:

        • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
        猜你喜欢
        • 2020-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-01
        • 2015-03-30
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        相关资源
        最近更新 更多