连接到远程mysql db时Sequelize Connect ETIMEOUT

art*_*tze 5 mysql node.js sequelize.js

我收到错误SequelizeConnectionError: connect ETIMEDOUT试图连接到远程MySQL数据库与sequelize时。

当我尝试连接到本地 mysql 数据库时,可以成功建立连接。

我正在使用new Sequelize(...)包含在 models/index.js 中的sequelize 的默认数据库连接代码,具有以下配置(填充了正确的值):

"production": {
  "username": "root",
  "password": null,
  "database": "database_production",
  "host": "127.0.0.1",
  "dialect": "mysql"
} 
Run Code Online (Sandbox Code Playgroud)

我尝试使用一个简单的 php 脚本连接到远程数据库并且它工作正常(因此我们可以排除远程数据库服务器端的问题)

有任何想法吗?

Ngu*_*Dat 5

对我来说,我必须:

1)在本地服务器(Xamp / Mamp)上定义我的数据库的确切信息。这意味着我必须有现有的数据库才能连接,用户名和密码是数据库中的特权帐户。

2) Xamp/Mamp 必须在线(当然)。默认端口将被此本地服务器占用,因此请尝试为 mysql 使用不同的端口8889而不是3306.

这就是我尝试过的:

sequelize = new Sequelize('wohui', 'root', 'root', {
  dialect: 'mysql',
  host: 'localhost',
  port: 8889
});

sequelize
        .authenticate()
        .then(() => {
            console.log('Connection has been established successfully.');
        })
        .catch((err) => {
            console.log('Unable to connect to the database:', err);
        });
Run Code Online (Sandbox Code Playgroud)


Shi*_*vam 0

造成这种情况的原因可能有几个,列出一些我遇到过的,

  • mysql 服务器未授予远程 root 访问权限。
  • 配置是按环境过滤的,理想情况下是通过使用 NODE_ENV 变量来完成的,您可以尝试使用 prod 配置在本地运行服务器吗?就我而言,我会做类似的事情NODE_ENV=production node server.js。假设server.js是启动文件。您可以尝试记录 before 的值new Sequelize(...),这可能会更好地了解发生的情况。

  • 你能告诉我在哪里以及如何检查和更改远程服务器操作吗 (2认同)