我偶尔会遇到以下错误,导致服务器崩溃。崩溃似乎与 wait_timeout 一致,大约每 8 小时发生一次。除此问题外,所有其他功能均按预期运行。尽管进行了大量的在线研究,我仍然无法找到此问题的解决方案。
{
"name": "Error",
"stack": "Error: Packets out of order. Got: 0 Expected: 10\n at Parser._tryReadPacketHeader (/home/ec2-user/drogoserver/node_modules/mysql/lib/protocol/Parser.js:470:15)\n at Parser.write (/home/ec2-user/drogoserver/node_modules/mysql/lib/protocol/Parser.js:33:29)\n at Protocol.write (/home/ec2-user/drogoserver/node_modules/mysql/lib/protocol/Protocol.js:38:16)\n at Socket. (/home/ec2-user/drogoserver/node_modules/mysql/lib/Connection.js:88:28)\n at Socket. (/home/ec2-user/drogoserver/node_modules/mysql/lib/Connection.js:526:10)\n at Socket.emit (node:events:513:28)\n at Socket.emit (node:domain:489:12)\n at addChunk (node:internal/streams/readable:315:12)\n at readableAddChunk (node:internal/streams/readable:289:9)\n at Socket.Readable.push (node:internal/streams/readable:228:10)",
"message": "Packets out of order. Got: 0 Expected: 10"
}
这就是我创建池的方式:
const pool = mysql.createPool({
host: "",
port: "3306",
user: "",
password: "",
database: "",
charset: "utf8mb4",
multipleStatements: true,
connectionLimit: 100,
acquireTimeout: 1000000,
connectTimeout: 30000,
});
module.exports = pool;
在应用程序的某些部分,我使用 db.query(pool.query) 或 db.getConnection,然后执行查询并释放连接。
比如这样的例子还有很多:
function someBigFunction(){
db.getConnection(async function (err, connection) {
if (err) throw err;
await someFunctionQueryingUsingConnection(connection)
await someOtherFunctionQueryingUsingConnection(connection)
connection.release()
})
}
function someFunctionQueryingUsingConnection(connection) {
return new Promise(function (resolve, reject) {
connection.query(
query,
queryParameterList,
async function (error, results, fields) {
resolve(results)
})
})
}
我正在使用 AWS RDS MySQL 服务。 一些参数是:
wait_timeout 28800
interactive_timeout 28800
max_allowed_packet 500000000
版本“mysql2”:“^3.7.0”,
我真的非常需要有关此问题的帮助。
谢谢
如果您遇到此问题,请检查是否有任何库打开连接但未关闭它。 就我而言,我使用了一些包装器来解决死锁,它留下了一个开放的连接,导致了这个问题。