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 连接到 AWS RDS MySQL 数据库实例
Flask-SQLAlchemy 和 Gevent 没有关闭 mysql 连接