我试图从另一个项目上的App Engine应用程序访问存储在一个Cloud Platform项目中的Google Cloud SQL实例,但它无法正常工作。
与SQL实例的连接失败,并显示以下错误:
OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 38")
我按照Google的文档中的说明操作,并将第二个项目的App Engine服务帐户添加到容纳Cloud SQL实例的项目的IAM权限列表中(使用" Cloud SQL Editor"作为角色)。我在我的应用程序中使用的连接详细信息和配置与在与Cloud SQL实例位于同一项目中的功能完善的App Engine应用程序中使用的相同。
关于我的配置唯一似乎是在我的第二个GCP项目中,当IAM权限列表中出现看起来像默认值([MY-PROJECT-NAME]@appspot.gserviceaccount.com
)的App Engine服务帐户时,此服务帐户是IAM& A的服务帐户标签下列出的不管理员。列出的唯一服务帐户是Compute Engine default service account
。我还没有删除任何服务帐户;此处未列出App Engine默认服务帐户,但除了MySQL连接外,App Engine应用程序运行良好。
不确定它是否相关,但我在App Engine标准环境中运行Python 2.7应用程序,使用MySQLdb进行连接。
答案 0 :(得分:4)
最终想出来 - 也许这会对遇到同样问题的其他人有用。
<强>问题:强>
问题在于&#34;云端SQL编辑器&#34;角色是不是超集 正如我想象的那样,&#34; Cloud SQL Client&#34; &#34; Cloud SQL Editor&#34; 允许管理Cloud SQL实例,但不允许 与数据库的基本连接。
<强>解决方案:强>
删除授予Cloud SQL Editor权限的IAM条目 将其替换为授予Cloud SQL Client权限的一个 问题并允许数据库连接通过。