【问题标题】:Google App Engine PHP PDO connection fails 'MySQL server has gone away'Google App Engine PHP PDO 连接失败“MySQL 服务器已消失”
【发布时间】:2014-07-12 16:51:36
【问题描述】:

所以我设置了两个不同的 GAE 应用项目,在主应用中我创建了两个 Cloud SQL 实例。我已授予对两个 SQL 实例上其他应用程序的访问权限。

当我尝试从不包含云 sql 实例(在 GAE 上运行)的应用程序进行简单 PDO 连接时,我收到此错误:SQLSTATE[HY000] [2006] MySQL 服务器已消失

这是根据 GAE 文档的 PHP 连接线:

$db = new pdo('mysql:unix_socket=/cloudsql/<app-id>:<sql-instance-name>;dbname=<db-name>', 'root', '');

从我的本地 GAE SDK 实例通过 IP 连接按预期工作。

任何建议都会很棒!

到目前为止我已经尝试过:

  1. 将 max_allowed_pa​​cket 大小增加 32000

  2. 将 long_query_time 增加到 60

  3. 将 wait_timeout 增加到 60

【问题讨论】:

    标签: google-cloud-sql


    【解决方案1】:

    谷歌应用引擎documentation 声明:

    “名为 的 Google Cloud Platform 项目正在连接到名为 的 Cloud SQL 实例。”

    您可能会收到错误消息,因为对于项目 ID,您使用的是 appengine 应用程序的项目 ID,而不是 Cloud SQL 项目 ID。

    试试:

    $db = new pdo('mysql:unix_socket=/cloudsql/<sql-project-id>:<sql-instance-name>;dbname=<db-name>', 'root', '');
    

    【讨论】:

      【解决方案2】:

      在 Cloud Console 的实例详细信息中,在靠近屏幕底部的属性下,有一个名为 实例连接名称 的字段。所以对我有用的是:

      $db = new pdo('mysql:unix_socket=/cloudsql/<instance-connection-name>;dbname=<db-name>', 'root', '');
      

      【讨论】:

      • 显然对于新的第二代MySQL,实例连接名称也需要区域。属性下的实例连接名称对我有用!类似于“decent-slice-123456:europe-west3:sqlinstance”
      【解决方案3】:

      今天发生在我身上,我的问题是 app-id,确保它包括整个 Google Apps 域。例如如果你的应用是 testapp,你的实例是 instancetest,你的域是 domain.com,完整的语句是:

      $db = new pdo('mysql:unix_socket=/cloudsql/domain.com:testapp:instancetest;dbname=testdb', 'root', '');
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-23
        • 1970-01-01
        • 2017-04-29
        • 2012-05-25
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        相关资源
        最近更新 更多