window11 wsl mysql8 错误分析:1698 - Access denied for user ‘root‘@‘kong.mshome.net‘
🚨 错误分析:1698 - Access denied for user 'root'@'kong.mshome.net'
这个错误是因为 MySQL 的 root
用户 使用 auth_socket
插件进行身份验证,而不是使用密码。因此,当你尝试从 远程主机 连接时,MySQL 会拒绝访问。
✅ 解决方法:修改 MySQL 的身份验证方式
你需要将 root
用户 的身份验证插件从 auth_socket
改为 mysql_native_password
,以便使用密码登录。
🔧 步骤 1:登录 MySQL
在 WSL 终端中执行以下命令,以 root 用户 登录 MySQL:
sudo mysql
🔧 步骤 2:检查当前的身份验证插件
执行以下命令,查看 root
用户 的身份验证插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
输出示例:
+------+-----------+-------------+
| user | host | plugin |
+------+-----------+-------------+
| root | localhost | auth_socket |
+------+-----------+-------------+
这里你会看到 plugin
是 auth_socket
,这就是导致远程连接被拒绝的原因。
🔧 步骤 3:修改身份验证插件
执行以下命令,将 root
用户 的身份验证插件改为 mysql_native_password
:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
将 your_password
替换为你想设置的 root 用户密码。
🔧 步骤 4:刷新权限
执行以下命令,刷新权限表:
FLUSH PRIVILEGES;
🔧 步骤 5:确认修改结果
再次执行以下查询,确认身份验证插件已修改为 mysql_native_password
:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
输出示例:
+------+-----------+-----------------------+
| user | host | plugin |
+------+-----------+-----------------------+
| root | localhost | mysql_native_password |
+------+-----------+-----------------------+
🔧 步骤 6:重启 MySQL 服务
执行以下命令,重启 MySQL 服务:
sudo service mysql restart
🔧 步骤 7:测试远程访问
在 Windows 主机 中尝试使用 MySQL 客户端 连接到 WSL 中的 MySQL 服务器:
mysql -h <WSL_IP_ADDRESS> -P 3306 -u root -p
✅ 解决方案总结
错误原因 | 解决方法 |
---|---|
使用 auth_socket 插件 | 将插件修改为 mysql_native_password |
未设置远程访问权限 | 授予 root 用户远程访问权限 |
🎯 常见问题排查
问题 | 解决方法 |
---|---|
连接超时 | 检查防火墙是否阻止 3306 端口 |
Access denied for user 错误 | 确认身份验证插件已更改为 mysql_native_password |