因此,我在主应用程序中设置了两个不同的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连接按预期工作。
任何建议都会很棒!
到目前为止,我已尝试过:
增加max_allowed_packet大小32000
将long_query_time增加到60
将wait_timeout增加到60
答案 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', '');
希望它有所帮助。