定期尝试连接第二代 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 的连接代码)的路由使它们保持打开状态,最终导致达到限制。