Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

egg-mysql超过空闲时间之后断开连接的问题 #4414

Open
MD-luffy opened this issue Aug 5, 2020 · 4 comments
Open

egg-mysql超过空闲时间之后断开连接的问题 #4414

MD-luffy opened this issue Aug 5, 2020 · 4 comments
Labels

Comments

@MD-luffy
Copy link

MD-luffy commented Aug 5, 2020

一段时间不操作数据库之后,再进行操作,比如执行await app.mysql.query(..)时就要很久才能返回(很多时候对于前端来说就超时直接返回接口调用失败了),目测是长时间没操作数据库连接断开了,在egg-mysql文档里面没看到有检测连接状态和重连的方法,不知道大家是怎么处理这种情况的呢 ?

@jjeejj
Copy link

jjeejj commented Aug 6, 2020

理论上应该不是连接断开了。 egg-mysql 底层使用的是 ali-sdk 这个库, ali-sdk 使用的是 mysql 连接池 建立的连接。 可以打断点再排查一下是否是其他的原因

@bolin-L
Copy link

bolin-L commented Aug 7, 2020

我碰到过这个问题 是mysqljs/mysql这个库维护的连接池没有超时销毁的问题,好像是服务端的mysql连接有一个8小时的强制销毁机制啥的,不会通知到客户端断开,所以客户端的连接池的连接会一直存在, 可以看看这个PRAdd idleConnectionTimeout to pool options。 我的临时做法是开定时任务select 1让连接保活

@jjeejj
Copy link

jjeejj commented Aug 7, 2020

我碰到过这个问题 是mysqljs/mysql这个库维护的连接池没有超时销毁的问题,好像是服务端的mysql连接有一个8小时的强制销毁机制啥的,不会通知到客户端断开,所以客户端的连接池的连接会一直存在, 可以看看这个PRAdd idleConnectionTimeout to pool options。 我的临时做法是开定时任务select 1让连接保活

MySQL 本身是有个 等待超时的参数 wait_timeout 默认是 8小时,这时候使用 select 1 保活是很好的处理方案。 但是如果连接被销毁,在用这个连接执行 SQL 是会报错的。 还有题主的一段时间是多久? 应该没有8小时的

@MD-luffy
Copy link
Author

@jjeejj 我后来也是采用 @bolin-L 开定时任务的方法来处理了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants