错误:数据包乱序。得到:0 预期:3

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

我正在使用 NodeJS 的 MySQL 模块,但是在对数据库发出大约 10 次请求后,我不断收到以下错误。我使用以下代码连接到数据库:

var con = mysql.createConnection({
    host: "10.37.100.15",
    user: process.env.MYSQLUSR,
    password: process.env.MYSQLPASSWD,
    database: process.env.MYSQLDB
});

然后我用

con.query(sqlStatement, function (err, result, fields) {<function>})
。我已经尝试将服务器上的
max_allowed_packet
更改为 500M,但这并没有解决问题。这是完整的错误:

events.js:377
      throw er; // Unhandled 'error' event
      ^

Error: Packets out of order. Got: 0 Expected: 3
    at Parser._tryReadPacketHeader (/app/node_modules/mysql/lib/protocol/Parser.js:470:15)
    at Parser.write (/app/node_modules/mysql/lib/protocol/Parser.js:33:29)
    at Protocol.write (/app/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/app/node_modules/mysql/lib/Connection.js:88:28)
    at Socket.<anonymous> (/app/node_modules/mysql/lib/Connection.js:526:10)
    at Socket.emit (events.js:400:28)
    at addChunk (internal/streams/readable.js:293:12)
    at readableAddChunk (internal/streams/readable.js:267:9)
    at Socket.Readable.push (internal/streams/readable.js:206:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
Emitted 'error' event on Connection instance at:
    at Connection._handleProtocolError (/app/node_modules/mysql/lib/Connection.js:423:8)
    at Protocol.emit (events.js:400:28)
    at Protocol._delegateError (/app/node_modules/mysql/lib/protocol/Protocol.js:398:10)
    at Protocol.handleParserError (/app/node_modules/mysql/lib/protocol/Protocol.js:380:10)
    at Parser._tryReadPacketHeader (/app/node_modules/mysql/lib/protocol/Parser.js:478:10)
    at Parser.write (/app/node_modules/mysql/lib/protocol/Parser.js:33:29)
    [... lines matching original stack trace ...]
    at Socket.emit (events.js:400:28) {
  code: 'PROTOCOL_PACKETS_OUT_OF_ORDER',
  fatal: true
}
mysql node.js database
2个回答
2
投票

默认 wait_timeout 是 8 小时。

我怀疑 mysql-nodejs 版本没有重置重新连接时的预期数据包计数。

在测试环境中,您可以减少

wait_timeout

很可能是:

#2534 的最后评论是“我将连接从 mysql.createConnection 更改为 mysql.createPool,错误再也不会发生”


0
投票

我的后端 Strapi 和前端 mysql 服务器也有同样的问题。 我所做的是将 mysql cnf 文件上的 wait_timeout 设置为 5 秒。

我删除了 wait_timeout,问题得到了解决。

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