Flask-SQLAlchemy 错误 MySQL 服务器已经消失

Flask-SQLAlchemy error MySQL server has gone away

我是新手 运行 Flask 应用程序连接到 MySQL 带有 Flask-SQLAlchemy 的远程服务器。

应用流量很小,经常闲置8小时以上,然后我就和MySQL服务器断开了。

这是我的应用代码:

from flask import Flask, render_template, request, redirect, jsonify, make_response
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import or_    

app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {'pool_pre_ping': True, 'pool_recycle': 300, 'echo':'debug',}
app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://user:pass@myipcode/db'
db = SQLAlchemy(app)

一切正常,直到 8 小时未执行任何查询,然后我失去了数据库连接并且日志显示此错误代码:

"MySQL server has gone away (%r)" % (e,)) sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2006, "MySQL server has gone away (BrokenPipeError(32, 'Broken pipe'))

我做了一些研究,并被建议设置 'SQLALCHEMY_ENGINE_OPTIONS',如代码示例中所写,但无论有没有这样的引擎选项,它的行为都一样,连接不会像它应该的那样每 300 秒回收一次,并且 pool_pre_ping 似乎没有任何区别。 'echo':'debug' 选项按预期工作,因为我记录了每笔交易。

我应该怎么做才能防止长时间不活动后连接断开?

编辑:

要添加一些额外的信息:

数据库托管在来自 GCP 的云 SQL 中。

我迷路了... 任何帮助将不胜感激。

最后我自己想通了,

这与我的应用程序 运行 在像 http://ServerIP/app 而不是 http://ServerIP/ 这样的挂载点上有关,因为它最初打算用作临时服务器。

我正在使用 uWSGI,为了让它在上述路径中工作,我必须在 app.ini 文件的 [UWSGI] 块中指定一个 mount 参数。

当 uWSGI 服务器启动时,它显示它正在安装两个应用程序,一个在 '' 中,另一个在 '/app' 中,我猜这造成了冲突,使应用程序无法管理 MySQL服务器。

http://ServerIP/ 中安装应用程序非常有效。