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

解決 MySQL 無法遠程訪問的完整指南

     編輯:MySQL 資料庫相關知識

前言

MySQL 預設只允許本地連接,這是出於安全考量。但實際開發或部署時,往往需要從遠程主機連接資料庫。本文整理了兩種主流解決方案,並補充關鍵步驟,助你快速打通遠程連線。

方法一:修改 user 表(改表法)

核心思路是將 mysql.user 表中 root 用戶的 host 欄位從 localhost 改為 %(通配符,表示任意主機)。

操作步驟

  1. 在本機登入 MySQL:mysql -u root -p
  2. 切換到 mysql 資料庫:USE mysql;
  3. 更新 host 欄位:UPDATE user SET host = '%' WHERE user = 'root';
  4. 關鍵步驟:刷新權限 FLUSH PRIVILEGES; (許多教程漏掉此步,導致修改不生效)
  5. 驗證:SELECT host, user FROM user; 確認 root 的 host 已變為 %

方法二:授權法(推薦,更靈活)

使用 GRANT 語句為指定用戶分配遠程連線權限,可精確控制 IP、資料庫、表甚至欄位級別的權限。

常用授權範例

  • 允許任意主機連線(全庫全表權限)
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  • 限定特定 IP(如 192.168.1.6)
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  • 限定特定資料庫(如 dk)
    GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

補充:root 遠程登入的快速配置

# 在 MySQL 服務器上執行
mysql -h localhost -u root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

常見避坑指南

  • 防火牆/安全組:確保 3306 端口對外開放(雲服務器需在控制台配置安全組規則)。
  • bind-address:檢查 my.cnf 或 my.ini 中 bind-address = 127.0.0.1,需改為 0.0.0.0 或註釋掉後重啟服務。
  • MySQL 8.0+ 語法變化:IDENTIFIED BY 需分開寫,建議先 CREATE USER 再 GRANT。

總結

「授權法」比「改表法」更安全、可控,生產環境強烈建議使用。配合防火牆與最小權限原則,即可兼顧便利與安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved