MySQL 連接失敗是運維與開發最常遇到的問題。本文系統梳理錯誤碼 10060(連接超時)、10061(連接被拒絕)、2003(無法連接到服務器)的根因、排查步驟、解決方案與預防措施,助你快速定位恢復。
| 錯誤碼 | 訊息 | 核心含義 | 典型原因 |
|---|---|---|---|
| 10060 | Can't connect to MySQL server (10060) | 連接超時 | 網路不通、防火牆攔截、MySQL 未監聽該 IP/Port |
| 10061 | Can't connect to MySQL server on 'localhost' (10061) | 連接被拒絕 | MySQL 服務未啟動、監聽地址錯誤、端口衝突 |
| 2003 | Can't connect to MySQL server on 'host' (2003) | 無法連接到服務器 | 綜合錯誤,含以上兩種、DNS 解析失敗、客戶端庫版本不匹配 |
# 1. Ping 測試
ping 192.168.1.100
# 2. 端口連通性
telnet 192.168.1.100 3306
# 或 PowerShell
Test-NetConnection 192.168.1.100 -Port 3306
# 或 Linux
nc -zv 192.168.1.100 3306
❌ 不通 → 檢查防火牆、安全組、VPN、網段路由。
# Windows
net start mysql
sc query mysql
# Linux
systemctl status mysqld
systemctl start mysqld
# 檢查進程與端口
netstat -antp | grep 3306
ss -antlp | grep 3306
❌ 服務未運行 → 查看錯誤日誌 tail -f /var/log/mysqld.log 或 Windows 事件查看器。
# 檢查配置文件
grep -n "bind-address" /etc/my.cnf
# bind-address = 127.0.0.1 # 僅本地
# bind-address = 0.0.0.0 # 監聽所有介面 (推薦生產)
# bind-address = 192.168.1.100 # 指定 IP
修改後**必須重啟 MySQL**。
# Linux firewalld
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# Linux iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# Windows 防火牆
netsh advfirewall firewall add rule name="MySQL 3306" dir=in action=allow protocol=TCP localport=3306
# 雲廠商安全組:入站規則允許 3306(或限制來源 IP)
# 1. 檢查用戶宿主
SELECT User, Host, plugin FROM mysql.user WHERE User='root';
# 2. 允許遠程連接 (MySQL 8.0+)
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass#2024';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 或修改現有用戶 Host
UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
⚠️ **生產環境禁用 root 遠程登入**,創建專用應用賬號、限制來源 IP、強密碼。
mysql_native_password。SslMode=Preferred 或 SslMode=None(測試環境)。localhost 解析為 ::1,MySQL 未監聽 IPv6。改用 127.0.0.1 或配置 bind-address = ::。@echo off
echo ==== MySQL 連接診斷 ====
echo 1. 檢查服務...
net start | find "MySQL" >nul && echo [OK] MySQL 服務運行中 || (echo [ERR] 服務未啟動 & net start mysql)
echo 2. 檢查端口...
netstat -an | find "3306" >nul && echo [OK] 3306 端口監聽中 || echo [ERR] 3306 未監聽
echo 3. 測試本地連接...
mysql -u root -p -e "SELECT 1;" >nul 2>&1 && echo [OK] 本地連接正常 || echo [ERR] 本地連接失敗
echo 4. 檢查 bind-address...
type "C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" | find "bind-address"
pause
Threads_connected、Aborted_connects、服務存活、端口存活。wait_timeout、max_connections。MySQL 連接失敗 90% 是 **網路/防火牆/bind-address/服務狀態** 問題。按「網路 → 服務 → 配置 → 防火牆 → 權限 → 客戶端」六層排查,通常 5 分鐘內定位。**生產環境務必:監聽 0.0.0.0、專用賬號、限制來源 IP、啟用 SSL、配置連線池、建立監控告警。**