将 MySQL Workbench 连接到 WSL2

将 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

我是一个被打败的人---我需要帮助。

答案1

我在 WSL 2 MySQL-Server 上遇到了同样的问题;我通过替换127.0.0.1在工作台连接的配置中本地主机

127.0.0.1 配置

无法连接主机名错误:127.0.0.1

本地主机配置

与主机名成功连接:localhost

我希望它对某些人有用!

答案2

问题在于如何对 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';

确保将“密码”更改为 root 用户的正确密码。

现在运行命令来更新更改:

mysql > FLUSH PRIVILEGES;

现在再次运行该命令以确保身份验证方法已更新:

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

现在输出应该显示 root 用户的身份验证方法是使用 mysql_native_password。您现在应该能够使用密码以 root 用户身份登录 Workbench。

答案3

经过进一步搜索,我发现可能需要授予访问权限的提示。在 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 与用户连接:新人和密码:拉特芬克来自 MySQL Workbench。我有不是能够授予访问权限。我甚至尝试删除 root 用户并重新添加 root 用户,但没有成功。我想这不应该扰乱大自然。

相关内容