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_HOST
和 MYSQL_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 作为允许的网络。
我正在使用 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_HOST
和 MYSQL_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 作为允许的网络。