🚨 錯誤分析: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 |