我有一个全新的 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
答案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 用户,但没有成功。我想这不应该扰乱大自然。