MySql客戶端連接超時隨機
我有 100 個 PC 客戶端通過 LAN 連接到 MySQL。
他們正在執行沒有特定時期的 INSERT 查詢。據統計,同時嘗試執行 INSERT 查詢的 PC 不超過 10 台。這不是設計上的限制,只是查詢執行取決於每個 PC 使用者活動。
每個客戶端每次需要執行 INSERT 查詢時都會連接和斷開連接(連接 - 插入 - 斷開連接)。
幾個月前一切正常,但幾天前客戶端開始連接失敗。
每天大約兩次,在 5-10 分鐘內,客戶端無法連接。他們收到超時錯誤。在此期間,所有 PC 客戶端都無法連接。他們都無法連接。
失敗的時間是隨機的。有時發生在 09:00,有時發生在 13:00,等等。每個使用者的活動都非常有規律,因此一天與另一天沒有太多差異。我的意思是,一天中的時間似乎並不重要。
在伺服器端看,我在 mysql 日誌中沒有看到任何錯誤,沒有服務崩潰,沒有伺服器重新啟動。我只啟用了錯誤日誌(沒有查詢日誌,沒有慢查詢日誌)。
然後我在搜尋網路問題,但是從PC到伺服器,從伺服器到PC的tracerts是正確的。
我在伺服器(使用wireshark)上進行了網路擷取,看看我是否可以在那裡找到錯誤。
在錯誤期間(那 5-10 分鐘),我看到來自 PC 客戶端的連接卡在“問候”消息中。客戶端 PC 不發送“登錄”請求作為響應。
深入研究網路跟踪,我發現了一些名稱解析問題。
我正在執行 5.1.41 版本的 MySQL 社區版。我不知道這是否適用於更多實際版本,但在此版本中,預設啟用“名稱解析”功能。
啟用名稱解析後,每次網路連接啟動時,MySQL 都會嘗試從其 IP 解析客戶端的 PC 名稱。
如果此名稱解析失敗或延遲,則可能導致連接問題。
隨著名稱解析的下降,每次客戶端 PC 重試時,我們都會獲得更多失敗和延遲的連接,最終沒有網路連接成功。
解決方案是禁用名稱解析。如果您為某些依賴客戶端主機名的 MySQL 使用者定義了權限,則此功能很重要。但是由於我們沒有基於客戶端主機名的任何特權(而不是我們使用 IP 地址),我們可以安全地禁用“名稱解析”功能。
這是解釋這一點的連結,並指出正確的方向以及在網路擷取中搜尋的內容: