Google cloud sql:在“读取初始通信数据包”时失去与MySQL服务器的连接

时间:2014-08-18 14:08:37

标签: python mysql django google-app-engine google-cloud-sql

我已经设置了默认的django / django-wiki项目。本地测试工作正常。从本地服务器(google.appengine.ext.django.backends.rdbms)连接到云sql并不起作用,我相信由于某些身份验证问题。更重要的是,我无法从生产服务器连接。

我确保不会将我的本地MySQLdb部署在我的虚拟环境目录中。

我在app.yaml中有以下内容:

- name: MySQLdb
  version: "latest"

我的DATABASE条目如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dbname',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '/cloudsql/appname:sqlinstance',
        'PORT': '',
    }
}

它似乎正在工作,或者至少没有抱怨丢失包或mysql导入问题。我的问题如下(从生产日志中获取,但也可以通过django调试输出看到):

File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/MySQLdb-1.2.4b4/MySQLdb/connections.py", line 190, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 38")

可能导致这种情况的原因是什么?这是否意味着与某事有联系但没有回复?从外部源连接时,其他帖子似乎提到这是一个问题,但此连接来自app引擎AFAIK。

2 个答案:

答案 0 :(得分:6)

嗯,这比预期的要简单得多。我假设使用我的谷歌帐户创建的云sql默认只授予访问我的GAE应用程序的权限。这必须明确设置,来自Developer Console - > Storage - > Cloud SQL - > instance-name - > Edit - > {{ 1}}。或者,在创建SQL实例时,请打开高级选项。

我刚刚在框中添加了我的应用程序名称,点击了保存,一切正常。

答案 1 :(得分:0)

根据this,每当实例死亡(由于某种原因或其他原因)时,它将重新启动,并且在重新启动时,它只会发出此错误,直到它准备好接收请求为止。

您最好的选择是尝试实施指数退避。这种情况多久发生一次?每一次或偶尔一次?