Google App Engine和Cloud SQL:在"读取初始通信数据包"时丢失与MySQL服务器的连接

Tza*_*ach 9 python mysql django google-app-engine google-cloud-sql

我在Google App Engine应用程序上有一个Django应用程序,它使用App Engine身份验证连接到Google Cloud SQL .

大多数情况下一切正常,但有时会引发以下异常:

OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 38")
Run Code Online (Sandbox Code Playgroud)

根据文档,在以下情况下返回此错误:

例如,如果Google Cloud SQL拒绝连接,则因为客户端连接的IP地址未经授权.

在我的情况下这没有多大意义,因为身份验证是由App Engine服务器完成的.

什么可能导致这些零星的错误?

Rya*_*yan 15

我有类似的问题,最后联系谷歌寻求帮助.他们解释说,当他们需要重启或移动实例时就会发生这种情况.如果客户端实例重新启动或被移动到另一个主机服务器(对于各种版本),则IP将不匹配并抛出该错误.他们提到服务器可能会重新启动补丁,错误和减速导致类似的行为(无论是相同的错误还是类似).服务器也会移动以尝试更接近实例以增加响应时间.如果您在移动期间发送请求,则会抛出错误.

他们告诉我,我需要在重试捕获中编写代码,类似于处理数据存储区超时的方式.牢记建立后退机制,重启后过快发送太多请求可能会导致崩溃.

这种情况多久发生一次?

  • https://developers.google.com/cloud-sql/faq#maintenancerestart https://developers.google.com/appengine/articles/handling_datastore_errors http://en.wikipedia.org/wiki/Exponential_backoff (2认同)