Google App Engine PHP PDO连接失败' MySQL服务器已经消失了#39;

时间:2014-07-12 16:51:36

标签: google-cloud-sql

因此,我在主应用程序中设置了两个不同的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

3 个答案:

答案 0 :(得分:4)

Google应用引擎documentation声明:

  

“名为&lt; your-project-id&gt;的Google Cloud Platform项目正在连接名为&lt; your-instance-name&gt;的Cloud SQL实例。”

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

尝试:

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

答案 1 :(得分:2)

在云端控制台的“实例详细信息”中,在屏幕底部的“属性”下,有一个名为实例连接名称的字段。那对我有用的是:

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

答案 2 :(得分:0)

今天发生在我身上,问题在于我的应用程序,请确保它包含整个Google Apps域。例如如果您的应用是testapp,您的实例是instancetest,而您的域名是domain.com,则完整声明为:

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

希望它有所帮助。