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

Posted

技术标签:

【中文标题】Flask-SQLAlchemy 错误 MySQL 服务器已消失【英文标题】:Flask-SQLAlchemy error MySQL server has gone away 【发布时间】:2021-02-09 02:12:02 【问题描述】:

我是新手,正在运行一个使用 Flask-SQLAlchemy 连接到 mysql 远程服务器的 Flask 应用程序。

该应用程序的流量很少,通常闲置超过 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 小时没有执行任何查询,然后我失去了 db 连接并且日志显示此错误代码:

"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 的 Cloud SQL 中。

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

【问题讨论】:

这个问题可能与mysql服务器上的设置有关。看看这个问题:***.com/questions/7942154/… 【参考方案1】:

最后我自己想通了,

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

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

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

http://ServerIP/ 中安装应用程序就像一个魅力。

【讨论】:

以上是关于Flask-SQLAlchemy 错误 MySQL 服务器已消失的主要内容,如果未能解决你的问题,请参考以下文章

Flask-SQLAlchemy错误

使用 Flask-SQLAlchemy 连接到 AWS RDS MySQL 数据库实例

Flask-SQLAlchemy 和 Gevent 没有关闭 mysql 连接

使用Flask-SQLALchemy操作MySQL数据库

在python3下怎样用flask-sqlalchemy对mysql数据库操作

在python3下怎样用flask-sqlalchemy对mysql数据库操作