除了超时:什么还会导致“ MySQL服务器已消失”错误?

时间:2019-06-14 06:57:08

标签: flask sqlalchemy mariadb

有关于这个主题的阅读,我做到了。我无法一辈子使用它。

我有一个Flask应用程序,该应用程序包含多个蓝图,每个蓝图都使用MariaDB服务器上的一个或两个不同的数据库。所有蓝图都遵循以下模式:

from .. import common
Session = common.mysql_sessionmaker("stammdaten")

@blp.route('/login', methods=["POST"])
def login_form():
    db = Session()

.. common中的mysql_sessionmaker函数如下所示:

def mysql_sessionmaker(dbname):
    engine = create_engine(
        "mysql://dham@localhost" + '/' \
            + dbname + '?charset=utf8mb4',
            pool_recycle=60,
            pool_pre_ping=True)
    return scoped_session(sessionmaker(engine))

因此,我已经用尽了有关此问题的所有提示和技巧:

  • 缩短pool_recycle fom最初从1800到很短的时间
  • 使用pool_pre_ping
  • 使用scoped_session()

但无济于事。当然,我无法重现此错误。这是公司Intranet上一个相当低频的站点(每天打几十个电话),无论何时使用它,它都可以正常工作。但是每天早晨,我都会检查apache日志,以查找来自SQLAlchemy内部深处的巨大python堆栈转储信息。

在绝望中,我什至尝试将整个数据库设置代码移到@before_request函数中,以便每个请求都完全从头开始。还是一样的错误。

同一台服务器上的一堆PHP脚本根本没有数据库问题。

mariadb服务器是现成的RedHat安装版本5.5.56。我不使用flask-sqlalchemy是因为我不了解它的作用,并且因为它不支持多个数据库连接(上次检查)。

[EDIT]错误不是由过长的查询引起的。当我重试有问题的查询时,它们会在不到一秒钟的时间内返回。

0 个答案:

没有答案