错误:数据包乱序。获得:0 预期:10 Nodejs MySQL

问题描述 投票:0回答:1

我偶尔会遇到以下错误,导致服务器崩溃。崩溃似乎与 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”,

我真的非常需要有关此问题的帮助。

谢谢

mysql node.js node-mysql node-mysql2
1个回答
0
投票

如果您遇到此问题,请检查是否有任何库打开连接但未关闭它。 就我而言,我使用了一些包装器来解决死锁,它留下了一个开放的连接,导致了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.