请教一个关于 Mysql 连接的问题

2020-12-10 10:21:30 +08:00
 jayzau1973
用 flask 写了个小后台,数据库用的 mysql 。时间长了之后 mysql 连接会自动断开导致报错( orm 用的 peewee ):
```
raise err.InterfaceError("(0, '')")
peewee.InterfaceError: (0, '')
```
有大佬知道怎么解决这个问题吗...
2910 次点击
所在节点    Python
17 条回复
dongxiao
2020-12-10 11:27:40 +08:00
我用的 sqlalchemy,采用的方法是设置超时后把 session 设成 global,然后开了个多线程在超时前销毁 session 并重建,用的地方 import 这个包就行
yagamil
2020-12-10 13:16:54 +08:00
持久化连接池
jayzau1973
2020-12-10 14:31:41 +08:00
@dongxiao 我在想难道每个写后端的都要这样搞吗,感觉不太合理。PHP 就不用自己去优化
jayzau1973
2020-12-10 14:32:49 +08:00
@yagamil 连接池倒是有 `PooledMySQLDatabase`,但好像无法持久化...
676529483
2020-12-10 14:35:07 +08:00
数据库连接要在请求结束时关闭,或者交还给连接池,要主动释放资源,flask 可以通过钩子做
wewin
2020-12-10 18:53:35 +08:00
大概过了多久?我记得 mysql 连接,闲置 8 小时会断开
zhanglintc
2020-12-10 19:14:34 +08:00
初始化应该有个自动重连的参数可以设置,找找文档看看呢
MaxFang
2020-12-10 20:19:06 +08:00
@jayzau1973 非优化过的框架里面,php 也是没有超时自动重连的吧。一般 mysql 默认连接 8 小时。以前踩过类似的坑。
littlewing
2020-12-10 22:39:51 +08:00
把数据库的超时断开连接时间调大
jayzau1973
2020-12-11 09:08:19 +08:00
@wewin
@littlewing
超时时间调过了,不过即使时间再长,终会有断开的一天吧。想要有一个自动重连的功能
jayzau1973
2020-12-11 09:11:14 +08:00
@MaxFang 嘿嘿嘿 PHP 就接触过一点 laravel 框架
jayzau1973
2020-12-11 09:11:25 +08:00
@zhanglintc 好的我看看
Rache1
2020-12-11 09:43:01 +08:00
Laravel 是有自动重连的

\Illuminate\Database\DetectsLostConnections::causedByLostConnection
daytonight
2020-12-11 12:21:59 +08:00
使用前 ping 一次 mysql,失败则重新建立连接,sqlalchemy 可以设置 pool_pre_ping 参数。
meshell
2020-12-11 13:58:10 +08:00
发个 select 1 呗然后重连
viiii
2021-01-21 05:08:17 +08:00
不知道楼主解决这个问题没有? 一样在这里被卡住了
jayzau1973
2021-01-21 11:45:19 +08:00
@viiii 没呢 断了手动重启- -

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/734006

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX