You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cloud SQL Python Connector连接时遇WinError 10061求助

Cloud SQL Python Connector连接失败,报错ConnectionRefusedError: [WinError 10061]

已创建Cloud SQL实例及数据库,遵循官方文档示例代码使用Cloud SQL Python Connector连接时始终失败,错误栈如下:

Traceback (most recent call last):
  File "c:\Users\my_name\my_path\gl_cloudsql_mysql_fx.py", line 149, in <module>
    print(bnm_data_db.isTableExist('MY_TABLE'))
  File "c:\Users\my_name\my_path\gl_cloudsql_mysql_fx.py", line 81, in isTableExist
    with self.__pool.connect() as db_conn:
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\engine\base.py", line 3245, in connect
    return self._connection_cls(self)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\engine\base.py", line 145, in __init__
    self._dbapi_connection = engine.raw_connection()
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\engine\base.py", line 3269, in raw_connection
    return self.pool.connect()
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\base.py", line 455, in connect
    return _ConnectionFairy._checkout(self)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\base.py", line 1270, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\base.py", line 719, in checkout
    rec = pool._do_get()
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\impl.py", line 168, in _do_get
    with util.safe_reraise():
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 147, in __exit__
    raise exc_value.with_traceback(exc_tb)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\impl.py", line 166, in _do_get
    return self._create_connection()
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\base.py", line 396, in _create_connection
    return _ConnectionRecord(self)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\base.py", line 681, in __init__
    self.__connect()
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\base.py", line 905, in __connect
    with util.safe_reraise():
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 147, in __exit__
    raise exc_value.with_traceback(exc_tb)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\base.py", line 901, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\sqlalchemy\pool\base.py", line 368, in <lambda>
    return lambda rec: creator_fn()
  File "c:\Users\my_name\my_path\gl_cloudsql_mysql_fx.py", line 27, in getconn
    conn: pymysql.connections.Connection = self.__connector.connect(
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\google\cloud\sql\connector\connector.py", line 154, in connect
    return connect_task.result()
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\concurrent\futures\_base.py", line 458, in result
    return self.__get_result()
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\concurrent\futures\_base.py", line 403, in __get_result
    raise self._exception
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\google\cloud\sql\connector\connector.py", line 261, in connect_async
    return await asyncio.wait_for(get_connection(), timeout)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\asyncio\tasks.py", line 445, in wait_for
    return fut.result()
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\google\cloud\sql\connector\connector.py", line 257, in get_connection
    return await self._loop.run_in_executor(None, connect_partial)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\concurrent\futures\thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\site-packages\google\cloud\sql\connector\pymysql.py", line 54, in connect
    socket.create_connection((ip_address, SERVER_PROXY_PORT)),
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\socket.py", line 845, in create_connection
    raise err
  File "C:\Users\my_name\Anaconda3\envs\composer-bis-gl-env\lib\socket.py", line 833, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

本地Conda环境运行的Python代码:

from google.cloud.sql.connector import Connector
import sqlalchemy
import pymysql

connector = Connector()

# function to return the database connection
def getconn() -> pymysql.connections.Connection:
    conn: pymysql.connections.Connection = connector.connect(
      "my_project:my_location:my_instance",
      "pymysql",
      user="user",
      password="password",
      db="my_database",
    )
    return conn

# create connection pool
pool = sqlalchemy.create_engine(
  "mysql+pymysql://",
  creator=getconn,
)

# insert statement
check_table_statement = sqlalchemy.text(
  "SELECT count(*) from information_schema.tables",
)

with pool.connect() as db_conn:
  result = db_conn.execute(check_table_statement)
  print(result)

connector.close()

已尝试操作:将多个查询到的IP添加到Cloud SQL实例白名单,但不同方式(Google搜索、whatsmyip.org、nslookup myip.opendns.com resolver1.opendns.com)查到的IP不一致,且添加后仍无法连接。

注意事项:

  • 未勾选Allow only SSL connections选项,无需使用CA证书
  • Cloud SQL实例使用公网IP

排查与解决方案

  1. 升级Cloud SQL Python Connector版本
    执行命令升级到最新版,避免版本兼容性问题:

    pip install --upgrade cloud-sql-python-connector
    
  2. 验证网络连通性

    • 用PowerShell测试Cloud SQL公网IP的3306端口是否可达:
      Test-NetConnection <你的Cloud_SQL公网IP> -Port 3306
      
      若测试失败,检查本地防火墙是否允许出站3306端口,或路由器是否有网络限制。
    • 确认本地网络没有代理拦截请求,若使用代理需确保代理配置正确。
  3. 获取真实出口IP并添加到白名单
    打开PowerShell执行以下命令获取真实公网出口IP:

    Invoke-RestMethod ifconfig.me
    

    将返回的IP添加到Cloud SQL实例的授权网络中,等待1-2分钟后重试连接。

  4. 确认服务账号权限

    • 本地运行代码使用的Google Cloud账号需拥有Cloud SQL Client角色。
    • 确保本地已正确认证:执行gcloud auth application-default login完成登录,或设置GOOGLE_APPLICATION_CREDENTIALS环境变量指向服务账号密钥文件。
  5. 检查实例状态与连接信息

    • 确认Cloud SQL实例处于运行状态,公网IP已正确分配。
    • 核对代码中的实例连接名"my_project:my_location:my_instance"是否与控制台完全一致,可从实例详情页复制正确连接名。

内容的提问来源于stack exchange,提问作者Bismuth Habs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:11:07