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

MySQL 遠程連接失敗:Lost connection / Can't connect 徹底解決方案

     編輯:MySQL 綜合教學

MySQL 遠程連接失敗:Lost connection / Can't connect 徹底解決方案

使用 Navicat 等客戶工具連接遠程 MySQL 時,常遇到 Lost connection to MySQL server at 'reading initial communication packet' 或 Can't connect to MySQL server on 'localhost'。本文記錄真實排查過程,從網絡層、配置層、客戶端層三維度給出解決路徑。

一、現象複現

  • 服務器 MySQL 服務正常運行(systemctl status mysqld 顯示 active)
  • 本地 mysql -u root -p 可正常登錄
  • 遠程 Navicat 連接報錯:Lost connection ... reading initial communication packet

二、排查步驟與解決

步驟 1:Linux 主機訪問控制

檢查 /etc/hosts.allow 與 /etc/hosts.deny(TCP Wrappers):

vi /etc/hosts.allow
# 添加以下兩行,允許所有IP訪問 mysqld
mysqld : ALL : ALLOW
mysqld-max : ALL : ALLOW

結果:錯誤變為 Can't connect to MySQL server on 'localhost',說明網絡層通了,進入 MySQL 協議握手階段失敗。

步驟 2:MySQL 綁定地址配置

尋找 my.cnf(或 my.ini),檢查 bind-address:

# 常見位置
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/my.cnf

若配置為 bind-address = 127.0.0.1,MySQL 僅監聽本地回環,拒絕遠程連接。需修改為:

bind-address = 0.0.0.0  # 監聽所有網卡
# 或具體內網IP
bind-address = 192.168.1.100

本案例陷阱:服務器上找不到 my.cnf!

步驟 3:通過錯誤日志定位實際綁定地址

tail -f /var/log/mysqld.log
# 或
journalctl -u mysqld -f

日志關鍵輸出:

151213 17:05:35 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
151213 17:05:35 [Note] - '0.0.0.0' resolves to '0.0.0.0'
151213 17:05:35 [Note] Server socket created on IP: '0.0.0.0'.

關鍵發現:MySQL 實際綁定 0.0.0.0(全網卡),並非 127.0.0.1。配置文件雖無 bind-address,但默認行為即為全監聽。

步驟 4:客戶端連接參數修正(核心解決)

Navicat 連接設置中,Host 填寫服務器公網/內網 IP,而非 localhost:

  • Host:192.168.x.x 或公網 IP
  • Port:3306
  • User/Password:正確賬號密碼

Navicat連接設置

原理:客戶端填 localhost 會解析為 127.0.0.1,嘗試連接本機 3306,而非遠程服務器。填寫服務器真實 IP,TCP 握手直達 0.0.0.0:3306,連接成功。

三、完整排查清單

層級檢查項命令/操作預期結果
網絡端口通達性telnet server_ip 3306 / nc -zv server_ip 3306連接成功
網絡防火牆/安全組阿里云/騰訊云控制台放行 3306;iptables -L -n | grep 3306允許入站
系統TCP Wrappers/etc/hosts.allow 添加 mysqld : ALL : ALLOW無拒絕規則
MySQL服務狀態systemctl status mysqldactive (running)
MySQL監聽地址錯誤日志確認 bind-address 實際值0.0.0.0 或 具體IP
MySQL用戶宿主SELECT user, host FROM mysql.user;存在 user@% 或 user@client_ip
MySQL權限SHOW GRANTS FOR 'user'@'%';具有目標庫權限
客戶端Host填寫Navicat/WorkBench Host欄填 服務器IP非 localhost/127.0.0.1
客戶端SSL/SSH非必要關閉 SSL;SSH隧道配置正確按需啟用

四、總結

  1. 先查日志確認 bind-address,別盲目找配置文件
  2. 客戶端 Host 必須填服務器真實 IP,localhost 僅用於本機連接
  3. TCP Wrappers (hosts.allow) 往往被忽略,是連接被重置的常見原因
  4. 用戶宿主權限 (user@%) 與防火牆是基礎前提

按清單逐項排查,90% 遠程連接問題可在 10 分鐘內解決。

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