【问题标题】:ECONNREFUSED error in NodeJS + MySQL web appNodeJS + MySQL Web 应用程序中的 ECONNREFUSED 错误
【发布时间】:2018-05-08 01:07:15
【问题描述】:

我有在 NodeJS + MySQL 上运行的网络应用程序。最初,Web 应用程序运行良好,但突然间 MySQL 连接被拒绝,并引发以下错误:

ECONNREFUSED 127.0.0.1:3306

简单地用pm2 reload重启服务器就可以暂时解决这个问题。但是经过很长一段时间后,上面的错误又出现了。

NodeJS中用于建立MySQL连接的配置如下:

"sqlconn": {
        "connectionLimit": 10,
        "host": "127.0.0.1",
        "user": "root",
        "password": "XYZ",
        "database": "test",
        "port": 3306,
        "multipleStatements": true
}

知道如何解决这个问题吗?

注意:我使用的是 RAM 大小为 512MB 的数字海洋水滴

【问题讨论】:

    标签: mysql node.js node-modules pm2 econnrefused


    【解决方案1】:

    在进行查询时,您不能关闭 mysql 连接。如果你保持连接打开,它会在一段时间后放弃。

    node-mysql 中也有一个错误。可以使用mysql pool。enter link description here

    【讨论】:

    • 所有连接都被关闭。我怀疑我的防火墙是否会阻止连接。
    • 不,否则它根本不会起作用。
    • 我想我现在确实记得这一点。我也遇到过这个。请使用mysql连接池。这将解决问题。
    • 这不是因为没有使用池。原因是内存不足。我已添加解决方案作为答案。此外,使用池有点冒险,因为池仅在服务器启动时启动,并且一旦mysql连接有任何机会掉线,那么所有的mysql查询都会失败。所以要么使用单独的mysql连接,要么我们应该实现监视mysql连接池是否掉线并尝试重新连接的机制。
    • 感谢您的回答。
    【解决方案2】:

    为了检查出了什么问题,我打开了 MySQL 日志文件:

    /var/log/mysql/error.log
    

    日志内容如下:

    InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
    InnoDB: Cannot allocate memory for the buffer pool
    InnoDB: Plugin initialization aborted with error Generic error
    Plugin 'InnoDB' init function returned error.
    Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
    [ERROR] Failed to initialize plugins.
    

    所以原因是Mysql因为内存不足而无法重启

    要解决内存问题,可以按照这个答案:https://stackoverflow.com/a/32932601/3994271

    上述链接中讨论的可能解决方案是:

    • 增加 RAM 大小,或
    • 配置交换文件

    我决定使用配置交换文件

    以下链接提供了有关配置交换文件的详细信息: https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04

    【讨论】:

    • 请提及您使用的内存大小。
    • RAM 大小为 512MB。我创建了一个 1GB 的交换大小
    猜你喜欢
    • 2018-03-19
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多