我偶尔会遇到以下错误,导致服务器崩溃.崩溃似乎与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,然后执行查询并释放连接.

例如,有很多这样的 case ,比如:

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相关问答推荐

透视从另一个表添加信息的查询

数组上的MySQL、JSON_CONTAINS用法

子查询是否可以按主查询中的列进行分组?

Mysql-查找缺少列的表

如何查询一行

获取连续11天未考勤的员工

如何对 varchar() 数据值使用聚合窗口函数?

为大表优化 Django 模型

如何计算每行的剩余金额?

MySQL过滤食谱上的多对多 - 成分表

最好的 MySQL 性能调优工具?

如何在 MySQL 中 Select 字段具有最小值的数据?

Laravel classloader.php 错误打开流失败:没有这样的文件或目录

如何在mysql select查询中获取两个日期之间的日期列表

MySQL:低基数/ Select 性列=如何索引?

Amazon RDS Aurora 与 RDS MySQL 与 EC2 上的 MySQL?

将 Blob 转换为字节数组的最简单方法

MySQL获取两个值之间的随机值

如何通过一个语句描述数据库中的所有表?

MySQL讲解查询理解