在 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 连接页面,包括以下内容:

  1. 确保您的 Cloud SQL 实例具有 public IP
  2. 确保云 SQL 管理员 API 已启用
  3. 确保您的服务帐户具有 Cloud SQL Client 角色

感谢您的帮助!

问题与我的连接字符串有关,它的格式不正确。现在一切正常,并且 运行 !