重裝 MySQL/PHP 後遠程連線瞬間斷開,錯誤 Lost connection to MySQL server at 'reading initial communication packet', system error: 0。經排查,預設配置缺少 skip-name-resolve 導致 DNS 反解超時,單行配置即可修復。
system error: 0 表明非網路層錯誤,而是 MySQL 內部邏輯中斷。MySQL 預設啟用 DNS 反向解析:收到連線 → 解析客戶端 IP 對應主機名 → 再解析主機名回 IP → 比對授權表。若 DNS 伺服器無回應或極慢,握手階段直接超時斷開。
vim /etc/mysql/my.cnf(或 /etc/my.cnf)[mysqld] 區段新增:skip-name-resolvebind-address = 127.0.0.1,同時註釋掉(# 開頭);/etc/init.d/mysql restart 或 systemctl restart mysql| 副作用 | 說明 | 對策 |
|---|---|---|
| 授權表 Host 欄不再支援主機名 | 只能用 IP 或 % | 授權語句改用 IP:GRANT ... TO 'user'@'192.168.1.%' |
| 內部複寫/集群可能受影響 | 主從若用主機名授權會失效 | 統一改用 IP 授權,或在 /etc/hosts 映射 |