在 GCloud 应用引擎(Flask 应用程序)中连接到 Google Cloud SQL 数据库时出错
Error connecting to Google Cloud SQL database in GCloud app engine (Flask application)
我对这一切都是陌生的,所以请多多包涵!我用 python 创建了一个 Flask 应用程序,在本地一切正常。我什至在本地环境中连接到 Google Cloud SQL mySQL 数据库。但是,当我部署到 GCloud App Engine 时,我收到一条错误消息,提示我无法连接到 MySQL 服务器。
我采取的步骤:
已创建 MySQL 个实例、已创建数据库、已创建表
授予默认 App Engine 服务帐户云 SQL 客户端权限
尝试将 SQLAlchemy 连接到数据库,但连接被拒绝,代码为 2002 或 2003。这是我收到的错误日志:
insertId: "612bd61a000008b1eb289e07"
labels: {1}
logName: "projects/edge-321919/logs/stderr"
receiveTimestamp: "2021-08-29T18:46:50.215413245Z"
resource: {2}
severity: "ERROR"
textPayload: "Traceback (most recent call last):
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/flask/app.py", line 2070, in wsgi_app
response = self.full_dispatch_request()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/flask/app.py", line 1515, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/flask/app.py", line 1513, in full_dispatch_request
rv = self.dispatch_request()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/flask/app.py", line 1499, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/srv/main.py", line 143, in home
for item in Blog_Post.query.order_by(Blog_Post.id.desc()).limit(NUMBER_RESULTS):
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 2840, in __iter__
return self._iter().__iter__()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 2850, in _iter
execution_options={"_sa_orm_load_options": self.load_options},
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1688, in execute
conn = self._connection_for_bind(bind)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1530, in _connection_for_bind
engine, execution_options
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 747, in _connection_for_bind
conn = bind.connect()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 3166, in connect
return self._connection_cls(self, close_with_result=close_with_result)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 96, in __init__
else engine.raw_connection()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 3245, in raw_connection
return self._wrap_pool_connect(self.pool.connect, _connection)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 3216, in _wrap_pool_connect
e, dialect, self
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 2070, in _handle_dbapi_exception_noconnection
sqlalchemy_exception, with_traceback=exc_info[2], from_=e
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 3212, in _wrap_pool_connect
return fn()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 307, in connect
return _ConnectionFairy._checkout(self)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 767, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 425, in checkout
rec = pool._do_get()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/impl.py", line 146, in _do_get
self._dec_overflow()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 72, in __exit__
with_traceback=exc_tb,
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
return self._create_connection()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 253, in _create_connection
return _ConnectionRecord(self)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 368, in __init__
self.__connect()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 611, in __connect
pool.logger.debug("Error on connect(): %s", e)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 72, in __exit__
with_traceback=exc_tb,
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 605, in __connect
connection = pool._invoke_creator(self)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/create.py", line 578, in connect
return dialect.connect(*cargs, **cparams)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 584, in connect
return self.dbapi.connect(*cargs, **cparams)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/MySQLdb/__init__.py", line 130, in Connect
return Connection(*args, **kwargs)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/MySQLdb/connections.py", line 185, in __init__
super().__init__(*args, **kwargs2)
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (2002, "Can't connect to local MySQL server through socket '/cloudsql/edge-321919:northamerica-northeast1:edge-2021-test' (111)")"
timestamp: "2021-08-29T18:46:50.002225Z"
尽管我尝试了很多方法来连接到数据库,但我仍然收到此错误。目前,我只是使用 SQLAlchemy_URI 进行连接,但我也尝试了 connect_engine 并得到了同样的错误。
我变得非常绝望,所以非常感谢任何帮助!
如果您从 AppEngine 检查日志,您应该会看到一些额外的信息,这些信息可能会缩小问题的范围。
一般来说,最好仔细检查从 App Engine Standard 连接页面,包括以下内容:
- 确保您的 Cloud SQL 实例具有 public IP
- 确保云 SQL 管理员 API 已启用
- 确保您的服务帐户具有
Cloud SQL Client
角色
感谢您的帮助!
问题与我的连接字符串有关,它的格式不正确。现在一切正常,并且 运行 !
我对这一切都是陌生的,所以请多多包涵!我用 python 创建了一个 Flask 应用程序,在本地一切正常。我什至在本地环境中连接到 Google Cloud SQL mySQL 数据库。但是,当我部署到 GCloud App Engine 时,我收到一条错误消息,提示我无法连接到 MySQL 服务器。
我采取的步骤: 已创建 MySQL 个实例、已创建数据库、已创建表 授予默认 App Engine 服务帐户云 SQL 客户端权限 尝试将 SQLAlchemy 连接到数据库,但连接被拒绝,代码为 2002 或 2003。这是我收到的错误日志:
insertId: "612bd61a000008b1eb289e07"
labels: {1}
logName: "projects/edge-321919/logs/stderr"
receiveTimestamp: "2021-08-29T18:46:50.215413245Z"
resource: {2}
severity: "ERROR"
textPayload: "Traceback (most recent call last):
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/flask/app.py", line 2070, in wsgi_app
response = self.full_dispatch_request()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/flask/app.py", line 1515, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/flask/app.py", line 1513, in full_dispatch_request
rv = self.dispatch_request()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/flask/app.py", line 1499, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/srv/main.py", line 143, in home
for item in Blog_Post.query.order_by(Blog_Post.id.desc()).limit(NUMBER_RESULTS):
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 2840, in __iter__
return self._iter().__iter__()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 2850, in _iter
execution_options={"_sa_orm_load_options": self.load_options},
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1688, in execute
conn = self._connection_for_bind(bind)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1530, in _connection_for_bind
engine, execution_options
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 747, in _connection_for_bind
conn = bind.connect()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 3166, in connect
return self._connection_cls(self, close_with_result=close_with_result)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 96, in __init__
else engine.raw_connection()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 3245, in raw_connection
return self._wrap_pool_connect(self.pool.connect, _connection)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 3216, in _wrap_pool_connect
e, dialect, self
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 2070, in _handle_dbapi_exception_noconnection
sqlalchemy_exception, with_traceback=exc_info[2], from_=e
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 3212, in _wrap_pool_connect
return fn()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 307, in connect
return _ConnectionFairy._checkout(self)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 767, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 425, in checkout
rec = pool._do_get()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/impl.py", line 146, in _do_get
self._dec_overflow()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 72, in __exit__
with_traceback=exc_tb,
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
return self._create_connection()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 253, in _create_connection
return _ConnectionRecord(self)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 368, in __init__
self.__connect()
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 611, in __connect
pool.logger.debug("Error on connect(): %s", e)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 72, in __exit__
with_traceback=exc_tb,
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 605, in __connect
connection = pool._invoke_creator(self)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/create.py", line 578, in connect
return dialect.connect(*cargs, **cparams)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 584, in connect
return self.dbapi.connect(*cargs, **cparams)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/MySQLdb/__init__.py", line 130, in Connect
return Connection(*args, **kwargs)
File "/layers/google.python.pip/pip/lib/python3.7/site-packages/MySQLdb/connections.py", line 185, in __init__
super().__init__(*args, **kwargs2)
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (2002, "Can't connect to local MySQL server through socket '/cloudsql/edge-321919:northamerica-northeast1:edge-2021-test' (111)")"
timestamp: "2021-08-29T18:46:50.002225Z"
尽管我尝试了很多方法来连接到数据库,但我仍然收到此错误。目前,我只是使用 SQLAlchemy_URI 进行连接,但我也尝试了 connect_engine 并得到了同样的错误。
我变得非常绝望,所以非常感谢任何帮助!
如果您从 AppEngine 检查日志,您应该会看到一些额外的信息,这些信息可能会缩小问题的范围。
一般来说,最好仔细检查从 App Engine Standard 连接页面,包括以下内容:
- 确保您的 Cloud SQL 实例具有 public IP
- 确保云 SQL 管理员 API 已启用
- 确保您的服务帐户具有
Cloud SQL Client
角色
感谢您的帮助!
问题与我的连接字符串有关,它的格式不正确。现在一切正常,并且 运行 !