gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:35:57 25 4
gpt4 key购买 nike

错误 OperationalError: (OperationalError) (2006, 'MySQL server has gone away') 当我在 Flask 上编码项目时,我已经收到此错误,但我不明白为什么会收到此错误。

我有这样的代码(是的,如果代码小并且执行速度快,那么就没有错误)\

db_engine = create_engine('mysql://root@127.0.0.1/mind?charset=utf8', pool_size=10, pool_recycle=7200)
Base.metadata.create_all(db_engine)

Session = sessionmaker(bind=db_engine, autoflush=True)
Session = scoped_session(Session)
session = Session()

# there many classes and functions

session.close()

此代码返回错误“MySQL 服务器已消失”,但当我在脚本中使用暂停时,一段时间后返回它。

我使用来自 openserver.ru 的 Mysql(它是像 wamp 这样的 Web 服务器)。

谢谢..

最佳答案

查看mysql文档,我们可以看到有一个bunch of reasons why this error can occur 。然而,我看到的两个主要原因是:

<小时/>

1) 最常见的原因是连接已被断开,因为超过 8 小时未使用(默认设置)

By default, the server closes the connection after eight hours if nothing has happened. You can change the time limit by setting the wait_timeout variable when you start mysqld

为了完整起见,我只会提到两种处理该问题的方法,但它们已经在其他答案中提到过:

A:我的工作运行时间很长,所以我的连接已经过时。为了解决这个问题,我刷新了我的连接:

create_engine(conn_str, pool_recycle=3600)  # recycle every hour

B:我有一个长期运行的服务,并且有很长一段时间不活动。为了解决这个问题,我在每次调用之前 ping mysql:

create_engine(conn_str, pool_pre_ping=True)
<小时/>

2) 我的数据包大小太大,应该会引发此错误:

_mysql_exceptions.OperationalError: (1153, "Got a packet bigger than 'max_allowed_packet' bytes")

我只看到它埋在跟踪的中间,尽管通常你只会看到通用的 _mysql_exceptions.OperationalError (2006, 'MySQL server has gone gone'),所以它是很难捕获,尤其是当日志位于多个位置时。

The above doc假设最大数据包大小默认为 64MB,但实际上是 16MB,可以通过 SELECT @@max_allowed_pa​​cket

进行验证

要解决此问题,请减小 INSERTUPDATE 调用的数据包大小。

关于python - SQLAlchemy 错误 MySQL 服务器已消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58232274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com