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

IPv6 環境下 MySQL 無法連接 localhost?一招解決綁定地址不匹配

     編輯:MySQL 資料庫相關知識

現象:客戶端報「無法連接 localhost」

新部署的系統或啟用 IPv6 的機器上,手動安裝 MySQL 或護衛神面板安裝的實例,phpMyAdmin/Navicat 連接 localhost 失敗,但 127.0.0.1 正常。netstat -anp | grep 3306 發現:

tcp6       0      0 :::3306                 :::*                    LISTEN      1234/mysqld

只有 IPv6 (tcp6) 監聽 3306,客戶端默認解析 localhost 為 IPv4 (127.0.0.1),導致連不上。

根因:缺少 bind-address 綁定 IPv4

  • MySQL 默認若不指定 bind-address,在 IPv6 啟用的系統上會綁定 ::(雙棧),但部分舊版本/編譯選項僅綁定 IPv6
  • 客戶端(特別是舊版 PHP/MySQL 驅動)不支援 IPv6 連接

解決方案:強制綁定 0.0.0.0(IPv4 全介面)

方法一:修改 my.cnf(推薦,永久生效)

[mysqld]
bind-address = 0.0.0.0
# 若需同時支援 IPv6,可用雙棧寫法(MySQL 8.0+)
# bind-address = ::
# 或配置兩行(多實例分開)
# bind-address = 0.0.0.0
# bind-address = ::

修改後 重啟 MySQL:systemctl restart mysqld

方法二:護衛神/面板環境(去掉註釋)

護衛神安裝的 MySQL 配置文件中通常已有該行但被註釋:

# bind-address = 0.0.0.0  →  改為
bind-address = 0.0.0.0

保存並重啟數據庫服務。

驗證修復

# 應看到 tcp (IPv4) 和 tcp6 (IPv6) 同時監聽
netstat -anp | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*           LISTEN      5678/mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      5678/mysqld

此時 localhost、127.0.0.1、::1 皆可連接。

補充:若只想禁用 IPv6 監聽

[mysqld]
bind-address = 127.0.0.1  -- 僅本地 IPv4
# 或
skip-networking           -- 禁用所有網路,僅 Unix Socket

總結

IPv6 環境下 MySQL 連接失敗 90% 是 bind-address 缺失或配置不當。**顯式指定 bind-address = 0.0.0.0 是最通用、兼容性最好的解法**,一勞永逸解決新舊客戶端共存問題。

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