首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 修改本地主機連接限制:解決 Root 無法本地登入問題

     編輯:MySQL 綜合教學

MySQL 修改本地主機連接限制:解決 Root 無法本地登入問題

為了開啟 MySQL 遠程管理權限,常見操作是將 mysql.user 表中 root 用戶的 Host 字段改為 %。但這可能導致本地 localhost / 127.0.0.1 無法登入。本文分析原因並提供兩種修復方案。

問題現象

執行以下操作開啟遠程訪問:

mysql -uroot -p123456
UPDATE user SET Host='%' WHERE User='root';
FLUSH PRIVILEGES;
/etc/init.d/mysqld restart

結果:遠程連接正常,但本地執行 mysql -uroot -p 報錯:

ERROR 1130 (HY000): Host 'localhost' is not allowed to connect to this MySQL server

根本原因

MySQL 權限驗證按 User + Host 精確匹配。將 Host 改為 % 後,原有的 localhost、127.0.0.1、::1、主機名等具體記錄被覆蓋或刪除。MySQL 連接時:

  • 使用 -h localhost 或無 -h 參數 → 解析為 localhost(Unix Socket)
  • 使用 -h 127.0.0.1 → TCP 連接,Host 匹配 127.0.0.1
  • 使用 -h ::1 → IPv6 回環

若表中無對應 Host 記錄,即便密碼正確也會拒絕連接。

方案一:跳過授權表修復(命令行,需重啟服務)

  1. 停止 MySQL:
    /etc/init.d/mysqld stop
  2. 跳過授權啟動:
    mysqld_safe --skip-grant-tables &
  3. 免密登入並清理多餘 Host 記錄:
    mysql -uroot mysql
    USE mysql;
    SELECT Host, User FROM user;  -- 確認現有記錄
    DELETE FROM user WHERE Host='127.0.0.1' AND User='root';
    DELETE FROM user WHERE Host='::1' AND User='root';
    DELETE FROM user WHERE Host='localhost' AND User='root';
    DELETE FROM user WHERE Host='你的主機名' AND User='root';
    -- 保留 Host='%' 的記錄即可
    FLUSH PRIVILEGES;
    QUIT;
  4. 正常重啟 MySQL:
    /etc/init.d/mysqld restart
  5. 驗證本地登入:
    mysql -uroot -p  -- 應可正常登入

方案二:使用圖形化工具遠程修復(更簡單、無需重啟)

既然遠程已可連接,直接用 Navicat Premium、MySQL Workbench、DBeaver 等工具:

  1. 以 root 遠程登入。
  2. 打開 mysql.user 表數據視圖。
  3. 刪除 User='root' 且 Host 為 localhost、127.0.0.1、::1、主機名的多餘行,只保留 Host='%' 的那行。
  4. 工具自動執行 FLUSH PRIVILEGES,即時生效。

Navicat 刪除多餘 Host 記錄示意

優勢: 可視化操作、無需停機、即時生效、降低誤操作風險。

最佳實踐建議

  1. 保留必要本地記錄:建議保留 root@localhost、root@127.0.0.1、root@::1,並為遠程訪問單獨創建新用戶(如 admin@'%'),避免修改 root Host 引發問題。
  2. 使用強密碼:遠程用戶必須設置高強度密碼,並配合防火牆限制來源 IP。
  3. 避免通配符濫用:Host='%' 代表任意主機,生產環境慎用於高權限帳號。

附錄:常見連接報錯快速排查

Host 'x.x.x.x' is not allowed to connectCan't connect to MySQL server on 'host' (111)
錯誤訊息常見原因解決方向
Access denied for user 'root'@'localhost' (using password: YES)密碼錯誤 / 無該 Host 記錄 / 權限不足核對密碼、檢查 user 表 Host 欄位、授權 GRANT
無對應 Host 記錄添加用戶 Host 記錄或改為 %
服務未啟動 / 端口錯誤 / 防火牆攔截檢查服務狀態、端口、防火牆、bind-address 配置

總結

修改 mysql.user.Host 開啟遠程訪問時,務必理解 MySQL 基於 User+Host 的精確匹配機制。推薦保留本地具體 Host 記錄、新建遠程專用帳號;若已出現本地無法登入,可用 --skip-grant-tables 修復或圖形化工具直接清理多餘記錄。規範權限管理是資料庫安全的基石。

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