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

Debian 重裝後 MySQL 拒絕 TCP 連線排查實錄:skip-networking 參數導致 Java 應用連線失敗

     編輯:MySQL 資料庫相關知識

現象描述

重裝 Debian + Tomcat + MySQL 後,原本正常的 Java 應用(Client → SOAP → Server → MySQL)拋出 SQL State: null 異常,本地 mysql -u root -p 卻可正常登入。

排查步驟

  1. 重啟 MySQL 確認服務狀態
    /etc/init.d/mysql restart
  2. 檢查 Socket 檔案位置
    mysqladmin variables | grep socket
    # 顯示 /var/run/mysqld/mysqld.sock
  3. 測試 TCP 連線
    mysql -h 127.0.0.1 -u root -p
    # 錯誤:Can't connect to MySQL server on 127.0.0.1
  4. 檢查監聽埠
    netstat -an | grep LISTEN
    # 發現無 3306 埠監聽
  5. 檢查設定檔 /etc/mysql/my.cnf
    • bind-address、port 設定正確
    • 發現 skip-networking 未被註解!
  6. 修正並重啟
    # 註解 skip-networking
    /etc/init.d/mysql restart
    # netstat 再次確認 3306 已監聽
    # Java 應用恢復正常

根因分析

Debian 出於安全預設啟用 skip-networking,導致 MySQL 僅監聽 Unix Socket,不開放 TCP/IP 連線。Java 應用透過 JDBC 需要 TCP 連線,故失敗。上次安裝未遇此問題,推測與 Debian 安全策略版本差異有關。

解決方案模板

# /etc/mysql/my.cnf
[mysqld]
# skip-networking   # 註解此行
bind-address = 0.0.0.0  # 或具體 IP
port = 3306

修改後 必須重啟 MySQL 生效。

避坑提醒

  • 任何變更 my.cnf 後務必 service mysql restart
  • 生產環境建議顯式設定 bind-address 而非依賴預設
  • Docker 容器化部署時需額外注意網路模式與 skip-networking 衝突
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved