跳至內容

如何解決 Amazon RDS for MySQL 或 Aurora MySQL 相容版中的 "Got an error reading communication packets" (讀取通訊封包時發生錯誤) 的錯誤?

2 分的閱讀內容
0

我使用 Amazon Relational Database Service (Amazon RDS) for MySQL 或 Amazon Aurora MySQL 相容版本的資料庫執行個體。我收到「Got an error reading communication packets」錯誤訊息。

簡短描述

您收到「[Warning] Aborted connection abc to db: 'database name' user: 'user name' host: 'host IP' (Got an error reading communication packets)」錯誤訊息。

aborted_clientsaborted_connects 參數值增加時,您會收到上述錯誤訊息。當用戶端終止且未關閉連線或連線中斷時,Amazon RDS 會取消連線並增加 aborted_clients 參數的狀態計數器。當用戶端無法連線到 MySQL 伺服器時,aborted_connects 參數值會增加。

如果 log_error_verbosity 的值超過 2,那麼您也會收到錯誤訊息。log_error_verbosity 參數指定管理錯誤日誌事件的詳細程度。如需詳細資訊,請參閱 MySQL 網站上的通訊錯誤和中止連線

以下因素可能會導致「Got an error reading communication packets」錯誤訊息:

  • 用戶端或驅動程式不相容。
  • 防火牆或 Prox 會關閉任何閒置連線或封鎖連線。
  • 不當關閉的用戶端伺服器連線,導致 Amazon RDS for MySQL 內部的休眠連線數量增加。
  • 不當終止連線的用戶端應用程式。
    **注意:**MySQL 強制關閉長時間閒置的連線。
  • 超過 wait_timeoutinteractive_timeout 閾值的閒置連線。
  • 取得連線封包時,超過 connect_timeout 秒數閾值的用戶端連線。
  • net_write_timeoutnet_read_timeout 等參數的值不足。
  • max_allowed_packet 參數值已超過。
    **注意:**當值太小或查詢所需的記憶體超過您為 Amazon RDS for MySQL 分配的記憶體時,就會出現此問題。

解決方法

修改逾時參數

若要確定問題的原因,請查看與連線逾時相關的參數。如果您對參數群組使用預設值,請變更資料庫執行個體的預設連線逾時值。

若要變更連線參數,請完成以下步驟:

  1. 開啟 Amazon RDS console (Amazon RDS 主控台)。
  2. 在導覽窗格中,選擇 Parameter groups (參數群組)。
  3. 為您的資料庫執行個體選擇參數群組。
  4. 選擇 Edit (編輯)。
  5. 搜尋連線逾時參數,然後變更其值。
    **注意:**變更值後,請在測試新值時監控 MySQL 錯誤日誌

connect_timeout

connect_timeout 設定較高的值,以測試該值是否可以減少此問題的發生次數。connect_timeout 參數定義 MySQL 伺服器資料庫執行個體回應不成功交握之前必須等待的秒數。如需詳細資訊,請參閱 MySQL 網站上的 connect_timeout

interactive_timeout 和 wait_timeout

您也可以修改 interactive_timeoutwait_timeout。如需有關這些參數的詳細資訊,請參閱 MySQL 網站上的 wait_timeoutinteractive_timeout。使用連線集區的應用程式 (例如 Java) 必須具有與連線集區設定相符的逾時時間。

max_allowed_packet

如果執行個體必須管理大型查詢、大型二進位大物件 (BLOB) 欄或長字串,請增加 max_allowed_packet 的值。如果資料列的資料超過 max_allowed_packet 值,則會收到錯誤。如需詳細資訊,請參閱 MySQL 網站上的 max_allowed_packet

net_write_timeout 和 net_read_timeout

增加 net_write_timeoutnet_read_timeout 的值。您可以將 net_write_timeoutnet_read_timeout 設定為與 wait_timeout 相同的值。如需詳細資訊,請參閱 MySQL 網站上的 net_write_timeoutnet_read_timeout

從用戶端應用程式呼叫 **mysql_close () ** 函式,以確保 Amazon RDS for MySQL 或 Aurora MySQL 相容版連線正確關閉。

使用其他疑難排解方法

如果仍收到「Got an error reading communications packets」錯誤訊息,請採取下列任一措施:

相關資訊

為什麼 Amazon RDS 資料庫執行個體上的資料庫連線會中斷?

如何檢視和下載 Aurora Serverless 資料庫叢集的日誌?