
定期連接第二代 MySQL 伺服器時會收到此錯誤:
OperationalError: (2062, 'Cloud SQL socket open failed with error: Transport endpoint is not connected')
這種情況會持續約 10 分鐘,然後消失。
我能找到的與 Cloud SQL 相關的此錯誤的唯一參考是它可能與連接限制有關(https://groups.google.com/d/msg/google-cloud-sql-discuss/sdeD17oDBOQ/wtTewl4-EgAJ)但在一個 TaskQueue 任務之外的實例幾乎沒有發生任何其他事情,因此我發現我們不太可能達到每個實例 12 個限制(並且絕對不是 4k 總體限制)。
導致此異常的程式碼使用與應用程式其餘部分相同的資料庫設置,並且只是嘗試SELECT
按主鍵進行行(因此是一個小查詢)。
在資料庫日誌中有很多錯誤條目,如下所示。
[Note] Aborted connection 39643 to db: 'my_schema' user: 'root' host: 'cloudsqlproxy~<instance_ip>' (Got an error reading communication packets)
但我不確定它們是否相關,因為它們在一天中非常一致地發生,上述錯誤僅在特定時間發生約 10 分鐘。
這僅在升級到第二代 Cloud SQL 後開始。
還有其他人看過這個或知道更多嗎?
答案1
事實證明,這個問題的根源是連接限制,正如問題中連結的 Google 網路論壇聊天最初建議的那樣。
該錯誤的出現是因為 Pipelines API 使用 webapp,而應用程式的其餘部分使用 Django。由於 Django 為我們關閉了連接,因此沒有代碼可以手動處理它,但是那些通過 webapp 並訪問資料庫(使用 Django 的連接代碼)的路由使它們保持打開狀態,導致最終達到限制。