Warning: mysql_connect() [function.mysql-connect]: [2002]
由於目標機器積極拒絕,無法連接。 (trying to connect via tcp://localhost:3306)
後續 mysql_select_db()、mysql_query()、mysql_num_rows() 連鎖報錯。
錯誤代碼 2002 (CR_CONN_HOST_ERROR) 表示**無法連接到 MySQL 服務器**,常見原因:
# Windows
net start mysql
sc query mysql
# Linux
systemctl status mysqld
service mysql status
# Linux
tail -f /var/log/mysqld.log
# Windows
type "C:\ProgramData\MySQL\MySQL Server 5.7\Data\主機名.err"
尋找:Out of memory、No space left on device、InnoDB: Fatal error 等。
原文作者發現:執行大量資料處理腳本後 MySQL 自動停止,重啟服務即恢復。
可能原因:
| 原因 | 解決 |
|---|---|
| 服務未啟動 | net start mysql / systemctl start mysqld |
| 配置錯誤 | 檢查 bind-address=0.0.0.0、註解 skip-networking |
| 端口衝突 | netstat -ano | findstr 3306 找佔用進程殺掉或改埠 |
| 資源耗盡 | 優化 SQL、分批處理、增加 swap、擴容記憶體/磁碟 |
| 權限問題 | 確認用戶主機匹配、FLUSH PRIVILEGES |
# PHP 連接檢查
$link = @mysql_connect('localhost', 'user', 'pass');
if (!$link) {
die('連接失敗: ' . mysql_error());
}
# 建議改用 mysqli/PDO 並啟用異常模式
「目標機器積極拒絕」絕大多數情況下**不是網絡/防火牆問題,而是 MySQL 服務沒跑起來**。優先檢查服務狀態與錯誤日誌,針對根因(資源、配置、代碼邏輯)解決,而非單純重啟掩蓋問題。