【发布时间】: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服务器上的设置有关。看看这个问题:stackoverflow.com/questions/7942154/…
标签: mysql flask sqlalchemy flask-sqlalchemy pymysql