将MySQL Workbench连接到WSL2

我有一个全新的WSL2,在最新的Windows 10(2004)上运行,安装了Ubuntu 20.04和MySQL。我可以从Bash访问它并获取状态--
mysql> status
--------------
mysql  Ver 8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

Connection id:          10
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.20-0ubuntu0.20.04.1 (Ubuntu)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /var/run/mysqld/mysqld.sock
Binary data as:         Hexadecimal
Uptime:                 13 sec

接下来我想要连接 MySQL Workbench。 我所得到的一切都是

Your connection failed for user 'root' to the MySQL server at 127.0.0.1:3306
Access denied for user 'root'@'localhost'

我的WSL2列表是---
PS C:\Users\gymdo> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2

我的WSL2信息是---
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 20.04 LTS (GNU/Linux 4.19.104-microsoft-standard x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sat Jun 13 02:35:32 EDT 2020

  System load:  1.97               Processes:             8
  Usage of /:   0.4% of 250.98GB   Users logged in:       0
  Memory usage: 0%                 IPv4 address for eth0: 172.20.109.28
  Swap usage:   0%

0 updates can be installed immediately.
0 of these updates are security updates.

我尝试使用上面的172.20.109.28,但是出现了相同的错误。
从Windows的角度来看---
Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::c54a:f83c:a5f8:40b2%43
   IPv4 Address. . . . . . . . . . . : 172.20.96.1
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :

我尝试使用上面的172.20.96.1,但是出现了相同的错误。
有一件奇怪的事情是,当我尝试使用root@localhost作为用户名而不仅仅是root时,工作台会弹出“输入密码”的弹窗。我非常兴奋,但是当我将密码字段留空时,它仍然显示密码:NO,登录失败。
我感到非常沮丧,我需要帮助。

在Ubuntu中,你如何启动MySQL?你是用 sudo mysql 还是 mysql -u root -p 开始的? - Kulfy
从WSL2终端内部开始, 我使用以下命令启动它:$ service mysql start 然后我使用以下命令访问它:$ mysql -uroot - Jim Dunn
你在执行 mysql -uroot 前使用 sudo 吗?你的密码是空的吗? - Kulfy
我使用 PowerShell 从 WSL2 启动,使用 WSL -u root 命令,无需密码,因此我作为 root 用户登录,无需使用 sudo。 - Jim Dunn
3个回答

我在WSL 2的MySQL服务器上遇到了同样的问题;我通过将工作台连接配置中的127.0.0.1替换为localhost来解决它。 127.0.0.1配置。

Failed to connect error with Hostname: 127.0.0.1

本地主机配置

successful connection with Hostname: localhost

希望对某人有所帮助!

我正在使用WSL 1,并希望这个方法能够起作用,但事实并非如此。我也不明白为什么在主机名(Hostname)中使用"localhost"或者127.0.0.1会比在WSL内部运行ifconfig命令后得到的IP地址更合适。 - Ryan

问题在于如何验证root用户。默认情况下,这是设置为使用auth_socket而不是mysql_native_password。
作为root用户登录wsl中的mysql服务器并运行:
mysql > SELECT user, authentication_string, plugin, host FROM mysql.user;

输出将列出每个用户的身份验证方法。
现在使用以下命令更改root用户的方法:
mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

确保将'password'更改为root用户的正确密码。
现在运行命令以更新更改:
mysql > FLUSH PRIVILEGES;

现在再次运行命令,确保身份验证方法已更新:
mysql > SELECT user, authentication_string, plugin, host FROM mysql.user;

现在输出应该显示根用户的身份验证方法是mysql_native_password。您现在应该能够使用密码作为根用户登录工作台。

我怀疑这应该是现在推荐的答案,因为它允许以root身份登录。如果用户在安装MySQL后运行sudo mysql_secure_installation脚本来加强默认安全性,可能会出现此问题 - 但我还没有测试过。 - charlesdeb
这应该是被接受的答案,谢谢! - Steve

经过进一步搜索,我发现可能需要授予访问权限。在WSL2框中,我添加了一个新用户并授予了访问权限。
mysql> CREATE USER 'newguy'@'localhost' IDENTIFIED BY 'ratfink';
Query OK, 0 rows affected (0.02 sec)

mysql> GRANT ALL ON mysql.* TO 'newguy'@'localhost';
Query OK, 0 rows affected (0.01 sec)

请在页面下方这里查看示例。

我现在可以使用MySQL Workbench连接,用户名为newguy,密码为ratfink。但是我无法授予root访问权限。我甚至尝试删除root用户并重新添加,但没有成功。也许不应该去干涉自然吧。


这对我来说没有起作用,即使在刷新权限之后,即使我将主机名从我的局域网IP更改为"localhost"或127.0.01。 - Ryan