Search code examples
mysqlflaskgoogle-cloud-platformsqlalchemygoogle-cloud-sql

Error connecting to Google Cloud SQL database in GCloud app engine (Flask application)


I am new to all of this so bear with me ! I created a Flask app with python and everything is working fine locally. I even connected to Google Cloud SQL mySQL database in my local environment. However, when I deploy to GCloud App Engine, I get an error saying I cannot connect to MySQL server.

Steps I have taken : Created MySQL instance, created database, created tables Gave Default App Engine service account Cloud SQL Client permissions Tried to connect SQLAlchemy to the database, but the connection is refused with code 2002 or 2003. Here is the error log I have received :

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"

I keep getting this error even though I tried many many things to connect to the database. Currently, I am just connecting using SQLAlchemy_URI, but I also tried connect_engine and got the same errors.

I am getting pretty hopeless so any help would be very much appreciated !


Solution

  • If you check your logs from AppEngine, you should see some additional information that might narrow down what's going wrong.

    In general, it's best to double check the Connecting from App Engine Standard page, including the following:

    1. Make sure your Cloud SQL instance has a public IP
    2. Make sure the Cloud SQL Admin API is enabled
    3. Make sure sure your service account has the Cloud SQL Client role