gpt4 book ai didi

mysql - NodeJS AWS Lambda:连接丢失:服务器关闭了连接

转载 作者:行者123 更新时间:2023-11-29 09:24:14 24 4
gpt4 key购买 nike

我在AWS上部署了lambda函数。此lambda函数建立在NodeJS之上。此lambda函数包含多个脚本,每个脚本由某个事件触发。最近,我在随机时间和随机脚本执行期间收到以下错误(我找不到模式)。

{
"errorType": "Error",
"errorMessage": "Connection lost: The server closed the connection.",
"code": "PROTOCOL_CONNECTION_LOST",
"fatal": true,
"stack": [
"Error: Connection lost: The server closed the connection.",
" at Protocol.end (/var/task/node_modules/mysql/lib/protocol/Protocol.js:112:13)",
" at Socket.<anonymous> (/var/task/node_modules/mysql/lib/Connection.js:97:28)",
" at Socket.<anonymous> (/var/task/node_modules/mysql/lib/Connection.js:525:10)",
" at Socket.emit (events.js:203:15)",
" at Socket.EventEmitter.emit (domain.js:448:20)",
" at endReadableNT (_stream_readable.js:1143:12)",
" at process._tickCallback (internal/process/next_tick.js:63:19)"
]
}


我做了一些研究,发现此错误是由MySql生成的。但是,该错误会在脚本执行期间发生,而脚本甚至不会以任何方式与MySQL进行交互。

我为MySQL创建了一个包装器,以实现其某些功能。下面是代码:

const util = require('util');

let lib = {
'mySqlWrapper': (config) => {
if (!config) {
config = {
host: process.env.MYSQL_HOST,
port: process.env.MYSQL_PORT,
user: process.env.MYSQL_USERNAME,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DB_NAME,
timezone: 'utc'
}
};
let connection = require("mysql").createConnection(config);
return {
query(sql, args) {
return util.promisify(connection.query).call(connection, sql, args);
},
close() {
return util.promisify(connection.end).call(connection);
},
beginTransaction() {
return util.promisify(connection.beginTransaction).call(connection);
},
commit() {
return util.promisify(connection.commit).call(connection);
},
rollback() {
return util.promisify(connection.rollback).call(connection);
}
};
}
}

module.exports = lib;


请注意,我确定每个连接都是在执行脚本时创建的,并且在脚本结束之前已关闭。

此外,我确实更改了数据库的一些超时,例如:

Name                      Value
connect_timeout 5
delayed_insert_timeout 5
lock_wait_timeout 10
wait_timeout 5


我不了解此错误的原因,尤其是它是随机发生的(并非每次都发生),甚至在执行与MySQL无关的脚本时也是如此。有人可以帮我找到可能的原因吗?

最佳答案

没有完整的功能,很难说。但是要明确一点,您是否在功能结束时关闭连接?您是否在处理程序功能之外建立连接?如果是这样,则它可以在同一台机器上的函数调用之间持续存在。您在mysql服务器上是否有可以检查的日志?

关于mysql - NodeJS AWS Lambda:连接丢失:服务器关闭了连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59880890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com