使用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
排查与解决方案
升级Cloud SQL Python Connector版本
执行命令升级到最新版,避免版本兼容性问题:pip install --upgrade cloud-sql-python-connector验证网络连通性
- 用PowerShell测试Cloud SQL公网IP的3306端口是否可达:
若测试失败,检查本地防火墙是否允许出站3306端口,或路由器是否有网络限制。Test-NetConnection <你的Cloud_SQL公网IP> -Port 3306 - 确认本地网络没有代理拦截请求,若使用代理需确保代理配置正确。
- 用PowerShell测试Cloud SQL公网IP的3306端口是否可达:
获取真实出口IP并添加到白名单
打开PowerShell执行以下命令获取真实公网出口IP:Invoke-RestMethod ifconfig.me将返回的IP添加到Cloud SQL实例的授权网络中,等待1-2分钟后重试连接。
确认服务账号权限
- 本地运行代码使用的Google Cloud账号需拥有
Cloud SQL Client角色。 - 确保本地已正确认证:执行
gcloud auth application-default login完成登录,或设置GOOGLE_APPLICATION_CREDENTIALS环境变量指向服务账号密钥文件。
- 本地运行代码使用的Google Cloud账号需拥有
检查实例状态与连接信息
- 确认Cloud SQL实例处于运行状态,公网IP已正确分配。
- 核对代码中的实例连接名
"my_project:my_location:my_instance"是否与控制台完全一致,可从实例详情页复制正确连接名。
内容的提问来源于stack exchange,提问作者Bismuth Habs
相关产品推荐
相关产品推荐

