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

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

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

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

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

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

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

© 2021 V2EX