App Engine 与云的连接-sql 问题

App Engine connection to cloud-sql issues

我正在使用 flask_mysqldb (https://github.com/alexferl/flask-mysqldb/blob/master/flask_mysqldb/__init__.py) 从 App Engine 连接到云 sql。

我将以下参数传递给它:

MYSQL_HOST = "PUBLIC IP of the cloud sql instance"
MYSQL_UNIX_SOCKET = '/cloudsql/<project_id>:<region>:<instance name>'
MYSQL_USER = 'user'
MYSQL_PASSWORD = 'pword'

但我在尝试从 App Engine 连接时收到错误消息:

MySQLdb._exceptions.OperationalError:(2003,“无法连接到 'PUBLIC_IP_ADDRESS' (110) 上的 MySQL 服务器”)

当我允许所有连接到云 sql 实例(即允许 0.0.0.0/0 作为允许的网络)时,应用引擎会成功并能够连接。

应用引擎实例与云sql实例在同一个项目中,并且应用引擎服务帐户具有正确的权限。

知道问题出在哪里吗?谢谢

此错误是由于您在示例中同时设置了 MYSQL_HOSTMYSQL_UNIX_SOCKET 造成的。设置 MYSQL_HOST 告诉 flask-mysqldb 通过 TCP 连接,而设置 MYSQL_UNIX_SOCKET 告诉它通过 Unix 套接字连接。这些是相互冲突的,因此导致您看到的错误。

不要设置 MYSQL_HOST,将其从您的代码中删除,一切都会正常工作:

from flask import Flask
from flask_mysqldb import MySQL

app = Flask(__name__)

# Required
app.config["MYSQL_USER"] = <YOUR_DB_USER>
app.config["MYSQL_PASSWORD"] = <YOUR_DB_PASSWORD>
app.config["MYSQL_DB"] = <YOUR_DB_NAME>
app.config["MYSQL_UNIX_SOCKET"] = '/cloudsql/<PROJECT_ID>:<REGION>:<INSTANCE_NAME>'
# Extra configs, optional:
app.config["MYSQL_CURSORCLASS"] = "DictCursor"

mysql = MySQL(app)

@app.route("/")
def users():
    cur = mysql.connection.cursor()
    cur.execute("""SELECT user, host FROM mysql.user""")
    rv = cur.fetchall()
    return str(rv)

if __name__ == "__main__":
    app.run(debug=True)

通过上述更改,您不必再允许 0.0.0.0/0 作为允许的网络。