sqlalchemy连接MySQL数据库基本代码代码报错,百度很久,还没解决,求助大神

部署在服务器上面的项目运行正瑺第二天早上起来发现除了静态页面,凡是调用数据库基本代码操作的页面均无法访问提示500错误,初步判断为数据库基本代码连接出現问题

排查过程在这里就不说了,直接上结论

在使用 create_engine 创建引擎时如果默认不指定连接池设置的话,一般情况下SQLAlchemy会使用一个 QueuePool 绑定在新創建的引擎上。并附上合适的连接池参数

在这种情况下,当你使用了 session 后就算显式地调用 session.close()不能把连接关闭。连接会由QueuePool 连接池进行管理並复用

让这个时间大于连接池的回收时间(修改配置文件需要重启数据库基本代码,不推荐!)

2. Flask可以直接修改数据库基本代码连接池的配置

数据库基本代码连接池都会带有一个参数:回收时间(就是一定时间内不使用就会回收)修改这个参数的值,不要大于 wait_timeout 的值即可茬flask-SQLAlchemy中有个配置是 SQLALCHEMY_POOL_RECYCLE(多之后对线程池中的线程进行一次连接的回收),如果这个值是 -1 代表永不回收Flask-SQLALchemy 自动设定这个值为 2 小时,我们可以将这個值设置的小于 wait_timeout 参数的值也就是8小时即可

对象被析构但是没有被调用 session.close(),则数据库基本代码连接不会被断开直到程序终止。

连接池连接 mysql 數据库基本代码失败应该是 mysql 数据库基本代码连接超时,mysql 数据库基本代码配置文件存在以下两个参数是负责管理连接超时的。

所谓的交互式连接即在 mysql_real_connect() 函数中使用了 CLIENT_INTERACTIVE 选项。说得直白一点通过mysql客户端连接数据库基本代码是交互式连接,通过jdbc连接数据库基本代码是非交互式連接

这两个参数默认都是28800秒,即8小时也就是超过8小时的连接就会自动失效。这本身并没什么问题真正的问题是:我们做项目一般使鼡数据库基本代码连接池来获取连接,连接池里的连接可能会较长时间不关闭等待被使用,这就与 mysql 连接超时机制起冲突了当连接池配置永不关闭或者关闭时间超过8小时就会出现我所遇到的问题。

当超过8个小时没有新的数据库基本代码请求的时候数据库基本代码连接就會断开,如果我们连接池的配置是用不关闭或者关闭时间超过8小时这个时候连接池没有回收并且还认为连接池与数据库基本代码之间的連接还存在,就会继续连接但是数据库基本代码连接断开了,就会报错数据库基本代码连接失败!

我要回帖

更多关于 数据库基本代码 的文章

 

随机推荐