我有一个node
程序每小时查询一次本地数据库马上再查询一次内网数据库,仅在查询内网数据库时出现read ECONNRESET。
使用npm
库knex
+mysql2
连接数据库,knex
配置如下(有使用连接池)
require('knex')({
client: 'mysql2',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test'
}
pool: {
min: 5,
max: 1000
},
acquireConnectionTimeout: 60000,
asyncStackTraces: false, // 捕获堆栈跟踪,正式环境不要开启,会消耗性能
migrations: {
tableName: 'knex_migrations' // 记录版本控制的表用哪个
},
log: {
warn (message) {
console.log('[knex warn]', message)
},
error (message) {
console.log('[knex error]', message)
},
deprecate (message) {
console.log('[knex deprecate]', message)
},
debug (message) {
console.log('[knex debug]', message)
}
}
})
mysql的show variables like 'wait_timeout';
是
即8小时。
根据这篇回答:https://stackoverflow.com/a/2...
应该不会出现read ECONNRESET
才对啊,mysql
关闭无用连接时间是8小时
,而我每小时
查询一次数据库,都会大概率出现这问题,何况我还用了连接池,knex
应该是用了mysql2
的连接池吧?mysql2
的连接池不是会自动维护这些连接吗?
最近也遇到同样的问题。但是之前使用knex时,一直没事。
结合与楼主发生的时间差不多,然后试了下把knex版本降到之前使用的0.13之后,就没事了
遇到的坑友可以试试