从Cloud Run连接Cloud SQL Postgres报错:为何使用3307端口?
Cloud Run连接Cloud SQL Postgres出现3307端口超时问题排查
问题现象
连接时抛出超时错误:
connection to Cloud SQL instance at 34.86.67.205:3307 failed: timed out after 10s
明明用的是Postgres连接,代码里指定了Unix套接字和Postgres默认的5432端口,却出现了属于MySQL的3307端口错误。
当前使用的连接代码
unix_socket_path = f"/cloudsql/{db_inst}" logger.info(f"Using socket path {unix_socket_path}") eng = sqlalchemy.create_engine ( sqlalchemy.engine.url.URL.create( drivername="postgresql+pg8000", username=db_user, password=db_pass, database=db_name, query={"unix_sock": "{}/.s.PGSQL.5432".format(unix_socket_path)}, ), )
原因分析与解决方法
- 3307是Cloud SQL Auth代理默认的MySQL转发端口,出现这个端口说明你的连接请求被错误路由到了MySQL代理端口,而非Postgres的对应端口。
- 常见触发原因及对应排查方向:
- Cloud Run服务的Cloud SQL关联错误:登录Google Cloud控制台,检查Cloud Run服务的「连接」配置,确认关联的是目标Postgres实例,没有误绑定MySQL实例。
- 实例ID配置错误:验证
db_inst变量的实际值,必须是Postgres实例的完整连接名(格式为项目ID:区域:实例名),如果填成了MySQL实例的ID,代理会自动转发到3307端口。 - Auth代理异常:虽然代码指定了Unix套接字,但Cloud Run的Cloud SQL集成如果出现异常,可能会跳过套接字,错误尝试TCP端口连接。
- 驱动参数解析问题:pg8000驱动对
unix_sock参数的解析可能存在异常,可尝试换成postgresql+psycopg2驱动测试。
内容的提问来源于stack exchange,提问作者Gregory Golberg
相关产品推荐
相关产品推荐

