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:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
關鍵點: 必須執行 FLUSH PRIVILEGES; 讓權限立即生效,否則修改不會套用。
為了安全性,建議僅開放特定 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 等客戶端工具,從遠端電腦連線測試。連線參數設定:
若仍無法連線,可進入 mysql 資料庫檢查 user 表:
USE mysql;
SELECT Host, User FROM user;
確認目標帳號的 Host 欄位是否為 % 或對應的允許 IP。
mysql.user 表,移除匿名帳號與過期權限