Node.js 由 mysql 自动崩溃,其中没有任何操作

Posted

技术标签:

【中文标题】Node.js 由 mysql 自动崩溃,其中没有任何操作【英文标题】:Node.js crashing automatically by mysql without any operation in it 【发布时间】:2014-10-11 02:32:47 【问题描述】:

我正在使用 node.js 并面临 node 崩溃的问题。错误信息如下所示。

Error: Connection lost: The server closed the connection.
   at Protocol.end (/var/www/versions/project/js/node_modules/mysql/lib/protocol/Protocol.js:78:13)
   at Socket.<anonymous> (/var/www/versions/project/js/node_modules/mysql/lib/Connection.js:81:28)
   at Socket.EventEmitter.emit (events.js:117:20)
   at _stream_readable.js:919:16
   at process._tickCallback (node.js:419:13)

我在节点服务器中使用 mysql 查询..但是在崩溃时它没有任何操作...节点在不同的时间段内自动崩溃。

【问题讨论】:

如果您在每次请求后都没有关闭连接,很可能会超时。 【参考方案1】:

这是来自 nodejs mysql 的错误。 “连接丢失,服务器关闭连接”。 mysql 服务器已关闭创建的连接。

我不能确定你使用mysql连接的方式,你没有提供示例代码sn-p。

解决此问题的一种方法是在服务器关闭旧连接时重新创建新连接,提供示例代码

    connection.on('error', function(error) 
        if(erroor.code === 'PROTOCOL_CONNECTION_LOST')  
          //re create the connection here again
          connection = mysql.createConnection(config);
         else                                       
          throw err;                                  
        
      );
    

【讨论】:

【参考方案2】:

我发现只有在需要时才使用连接池来获取连接是最好的方法。

// do this once
var pool = mysql.createPool( opts );

// then, just before you need a connection do this
pool.getConnection(function(err, connection) 
    if (err) throw err;

    // use the connection

    // don't forget to release the connection when you are done...
    connection.release();
);

【讨论】:

以上是关于Node.js 由 mysql 自动崩溃,其中没有任何操作的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js/Sequelize 进行批量插入时 PostgreSQL 崩溃

Node.js(&MongoDB) 服务器崩溃,数据库操作中途?

Node.js(&MongoDB) 服务器崩溃,数据库操作中途?

MySQL 结果来自 html 中的 node.js,由 react.js

Node.js 连接到 MySQL Docker 容器 ECONNREFUSED

Node.js网络编程