Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何解決 Amazon RDS for MySQL 或 Aurora MySQL 相容版中的 "Got an error reading communication packets" (讀取通訊封包時發生錯誤) 的錯誤?
我使用 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_clients 或 aborted_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_timeout 或 interactive_timeout 閾值的閒置連線。
- 取得連線封包時,超過 connect_timeout 秒數閾值的用戶端連線。
- net_write_timeout 和 net_read_timeout 等參數的值不足。
- max_allowed_packet 參數值已超過。
**注意:**當值太小或查詢所需的記憶體超過您為 Amazon RDS for MySQL 分配的記憶體時,就會出現此問題。
解決方法
修改逾時參數
若要確定問題的原因,請查看與連線逾時相關的參數。如果您對參數群組使用預設值,請變更資料庫執行個體的預設連線逾時值。
若要變更連線參數,請完成以下步驟:
- 開啟 Amazon RDS console (Amazon RDS 主控台)。
- 在導覽窗格中,選擇 Parameter groups (參數群組)。
- 為您的資料庫執行個體選擇參數群組。
- 選擇 Edit (編輯)。
- 搜尋連線逾時參數,然後變更其值。
**注意:**變更值後,請在測試新值時監控 MySQL 錯誤日誌。
connect_timeout
為 connect_timeout 設定較高的值,以測試該值是否可以減少此問題的發生次數。connect_timeout 參數定義 MySQL 伺服器資料庫執行個體回應不成功交握之前必須等待的秒數。如需詳細資訊,請參閱 MySQL 網站上的 connect_timeout。
interactive_timeout 和 wait_timeout
您也可以修改 interactive_timeout 和 wait_timeout。如需有關這些參數的詳細資訊,請參閱 MySQL 網站上的 wait_timeout 或 interactive_timeout。使用連線集區的應用程式 (例如 Java) 必須具有與連線集區設定相符的逾時時間。
max_allowed_packet
如果執行個體必須管理大型查詢、大型二進位大物件 (BLOB) 欄或長字串,請增加 max_allowed_packet 的值。如果資料列的資料超過 max_allowed_packet 值,則會收到錯誤。如需詳細資訊,請參閱 MySQL 網站上的 max_allowed_packet。
net_write_timeout 和 net_read_timeout
增加 net_write_timeout 和 net_read_timeout 的值。您可以將 net_write_timeout 和 net_read_timeout 設定為與 wait_timeout 相同的值。如需詳細資訊,請參閱 MySQL 網站上的 net_write_timeout 和 net_read_timeout。
從用戶端應用程式呼叫 **mysql_close () ** 函式,以確保 Amazon RDS for MySQL 或 Aurora MySQL 相容版連線正確關閉。
使用其他疑難排解方法
如果仍收到「Got an error reading communications packets」錯誤訊息,請採取下列任一措施:
- 開啟 Performance Insights 以取得出現該問題之 SQL 陳述式的時間範圍。如需 Aurora MySQL 相容版的資訊,請參閱開啟和關閉 Aurora 的 Performance Insights。
重要:Performance Insights 將於 2026 年 6 月 30 日終止服務。您可以在 2026 年 6 月 30 日之前升級至 Database Insights 的進階模式。如果不升級,則使用 Performance Insights 的資料庫叢集將預設為 Database Insights 的標準模式。只有 Database Insights 的進階模式才支援執行計畫和隨需分析。如果您的叢集預設為標準模式,那麼您可能無法在主控台上使用這些功能。若要開啟進階模式,請參閱為 Amazon RDS 開啟 Database Insights 進階模式和為 Amazon Aurora 開啟 Database Insights 進階模式。 - 在您的 Amazon RDS 或 Aurora MySQL 相容版資料庫執行個體上啟用查詢緩慢日誌,以記錄執行時間超過 long_query_time 值的查詢。
**注意:**預設的 long_query_time 值為 10 秒。 - 開啟 Amazon Virtual Private Cloud (Amazon VPC) Flow Logs 來檢查伺服器或用戶端是否已關閉連線。
- 確認您的應用程式是否已正確關閉來自 MySQL 的連線。
- 從執行用戶端的機器執行以下 tcpdump 命令,測試樣本封包擷取:
sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100
相關資訊
相關內容
- 已提問 1 年前
- 已提問 3 年前

