我读取了与GCF中云SQL中托管的MySQL有关的所有文档,但仍然无法连接。此外,在与此相关的SQLalchemy文档中尝试了所有提示。我正在使用以下连接
con = 'mysql+pymysql://USER:PASSWORD@/MY_DB?unix_socket=/cloudsql/Proj_ID:Zone:MySQL_Instance_ID'
mysqlEngine = sqlalchemy.create_engine(con)
我遇到的错误是:
(pymysql.err.er.operationalerror)(2003年,"无法在'localhost'上连接到mysql server([[errno 111]连接拒绝))(此错误的背景:http://sqlalche.me/E/E3Q8)
您需要确保使用正确的 /cloudsql/<INSTANCE_CONNECTION_NAME>
(这是格式 <PROJECT_ID>:<REGION>:<INSTANCE_ID>
)。如果您的云SQL实例与您的功能在同一项目和区域中,那么这应该是所有需要的。
GCF文档还强烈建议将您的池限制为单个连接。这意味着您应该在引擎设置中同时设置pool_size=1
和max_overflow=0
。
如果您想查看如何设置这些设置的示例,请在GitHub上查看此示例应用程序。
我相信您的问题是在con
字符串变量末尾由<PROJECT_ID>:<REGION>:<INSTANCE_ID>
代表的Connection_name
。
顺便说一句应该引用:
con = 'mysql+pymysql://USER:PASSWORD@/MY_DB?unix_socket=/cloudsql/<PROJECT_ID>:<REGION>:<INSTANCE_ID>'
检查是否正在使用此命令正确编写:
gcloud sql instances describe <INSTANCE_ID> | grep connectionName
如果不是这种情况,请记住云功能中存在的这些注意事项官方文档:
第一代MySQL实例必须与您的云功能在同一区域。第二代MySQL实例以及PostgreSQL实例在任何区域都可以使用云功能。
您的云功能可以访问项目中的所有云SQL实例。如果您的云函数的服务帐户(在GCP控制台的云函数的常规选项卡上列出了cloud SQL实例(cloud SQL实例),则可以访问其他项目中的第二代MySQL实例以及其他项目的PostgreSQL实例(在GCP控制台的cloud Function的常规选项卡上列出)(s)具有云SQL客户端角色。
在带有Google支持的长线程之后,我们发现了:简单地,我们应该在没有任何防火墙规则的情况下公开访问云SQL。它是无证的,可以使您发疯,但是支持团队的银色子弹是:它在Beta!
我有这个问题。服务帐户是正确的,具有正确的权限,与我的App Engine应用程序相同的确切连接字符串。仍然在日志中得到这个。
dial unix /cloudsql/project:region:instance connect: no such file or directory
从第二代云功能切换到第一代求解。没有看到第二个无法连接到云SQL实例的任何地方记录的。