【问题标题】:Can't connect to MySQL with Sequelize无法使用 Sequelize 连接到 MySQL
【发布时间】:2015-07-04 03:48:06
【问题描述】:

当我尝试连接到我服务器上的 MySQL 数据库时,我总是收到 SequelizeConnectionRefusedError

登录凭据正确,端口已打开,一切看起来都很好(并且在开发环境中就像一个魅力)。

抱歉,背景信息稀少,但我在这里傻眼了——我真的不知道是什么导致了这个问题。

这是我来自mysql --version的输出

mysql  Ver 14.14 Distrib 5.5.43, for debian-linux-gnu (x86_64) using readline 6.3

这是我用来初始化 Sequelize 的代码。我希望它使用的表还不存在,但我很确定这与这个问题没有任何关系。我也尝试使用 root 用户登录,但没有骰子 - 我仍然遇到同样的错误。

var sequelize = new Sequelize("database", username, password, {
    host: "localhost",
    dialect: "mysql",
    port: 3306,
    define: {
        paranoid: true
    }
});

var Model = sequelize.define("Model", {
    md5: {type: Sequelize.STRING(128)},
    ip: {type: Sequelize.STRING(256)},
    url: {type: Sequelize.STRING(1024)}
});

sequelize.sync();

这是在 Ubuntu 14.04 上运行的,其中 node 在Passenger 后面运行(尽管如果我也直接使用 node 运行应用程序也会出现错误)。我在同一台服务器上运行 nginx 和 PHP,另一个 PHP 应用程序正在连接到数据库,如果这有任何相关性的话。

什么可能导致这个问题?

【问题讨论】:

  • 您要连接的数据库实际上是否称为“数据库”?
  • 不,它被称为别的东西,这只是我对它实际关注的应用程序的有点笨拙的伪装。

标签: javascript mysql node.js sequelize.js


【解决方案1】:

我也尝试使用 MySQL 模块直接连接到数据库,但这给了我同样的错误。在寻找相同问题的解决方案时,但与 MySQL 模块而不是 Sequelize 相关,我发现了这个:connect ECONNREFUSED - node js , sql

我需要为mysql 模块提供socketPath 键。以下是我更改代码以使其工作的方式:

var sequelize = new Sequelize("database", username, password, {
    host: "localhost",
    dialect: "mysql",
    logging: function () {},
    pool: {
        max: 5,
        min: 0,
        idle: 10000
    },
    dialectOptions: {
        socketPath: "/var/run/mysqld/mysqld.sock"
    },
    define: {
        paranoid: true
    }
});

【讨论】:

  • 添加 dialectOptions 键还解决了我遇到的一个稍微不同的错误:“SequelizeConnectionError: Connection lost: The server closed the connection.”。此错误在 Sequelize 3.3.2 和 3.13.0 中都出现,并且在这两种情况下都由 dialectOptions 修复。
  • 有没有不使用socketPath的场景?这在网络(远程数据库服务器)上是否与本地数据库服务器一样好?
  • 如果你有一个专用的 MySQL 服务器主机,这并不能解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2020-06-04
  • 2017-07-29
  • 2020-11-27
  • 2012-01-13
  • 2019-02-27
  • 2018-03-08
相关资源
最近更新 更多