首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 MySQL 無法遠程登入問題:權限配置完整指南

     編輯:MySQL 資料庫相關知識

MySQL 預設僅允許本地連線,這是導致遠程登入失敗最常見的原因。當你建立的使用者帳號僅限制 localhost 或 127.0.0.1 存取時,任何外部 IP 嘗試連線都會被拒絕。本文將詳細說明如何透過授權指令開放遠程存取權限,並解決實務上常見的連線錯誤。

問題根源:預設只允許本地存取

剛安裝完成的 MySQL,預設僅監聽本地回環介面。典型的初始授權指令如下:

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' IDENTIFIED BY '12345678';

這兩行指令分別綁定 localhost 與 127.0.0.1,導致任何非本機的連線請求直接被攔截。

解決方案:授權遠程連線權限

方法一:允許任意 IP 連線(開發/測試環境適用)

使用萬用字元 % 代表所有 IP:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin123' WITH GRANT OPTION;
FLUSH PRIVILEGES;

關鍵點: 必須執行 FLUSH PRIVILEGES; 讓權限立即生效,否則修改不會套用。

方法二:限定特定 IP 連線(生產環境建議)

為了安全性,建議僅開放特定 IP:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.16' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

實測流程與常見錯誤處理

登入 MySQL 後執行授權指令:

[root@localhost bin]# ./mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor...
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'Xinying_2010';
ERROR 2006 (HY000): MySQL Server has gone away
No connection. Trying to reconnect...
Connection id: 9324
Current database: *** NONE ***
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

過程中出現 ERROR 2006: MySQL Server has gone away 通常是連線逾時或封包過大導致,MySQL 會自動嘗試重連,重連成功後指令仍會繼續執行。只要最後出現 Query OK 且執行 FLUSH PRIVILEGES 即代表授權成功。

驗證遠程連線

授權完成後,即可使用 Navicat for MySQL、MySQL Workbench 等客戶端工具,從遠端電腦連線測試。連線參數設定:

  • Host:伺服器公網或內網 IP
  • Port:3306(預設)
  • Username:授權的帳號(如 admin、root)
  • Password:對應密碼

補充:檢查使用者權限表

若仍無法連線,可進入 mysql 資料庫檢查 user 表:

USE mysql;
SELECT Host, User FROM user;

確認目標帳號的 Host 欄位是否為 % 或對應的允許 IP。

安全性建議

  • 生產環境避免使用 root 遠程登入,建議建立專用帳號並限制來源 IP
  • 密碼務必設定強度高的複雜密碼
  • 配合防火牆規則,僅開放必要 IP 的 3306 端口
  • 定期審核 mysql.user 表,移除匿名帳號與過期權限
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved