Sequelize连接到远程mysql db时连接ETIMEOUT

时间:2017-06-23 05:20:09

标签: mysql node.js sequelize.js

尝试使用sequelize连接到远程mysql数据库时,我收到错误SequelizeConnectionError: connect ETIMEDOUT

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

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

"production": {
  "username": "root",
  "password": null,
  "database": "database_production",
  "host": "127.0.0.1",
  "dialect": "mysql"
} 

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

有什么想法吗?

5 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,因为我忘记了在云提供商的入站规则中打开与mysql端口3306的连接

答案 1 :(得分:1)

当未建立与sql服务器的连接时,通常会出现此错误。一些需要注意的事情是:

  1. 确保mysql服务器正在您要连接的主机中运行。
  2. 确保主机ip正确。
  3. 确保输入的端口正确。
  4. 确保正确定义了防火墙规则。

答案 2 :(得分:0)

这可能有几个原因,列出我面临的一些原因,

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

答案 3 :(得分:0)

对我来说,我必须:

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);
        });

答案 4 :(得分:0)

我面临着同样的问题。在我的情况下,我提供了错误的端口号(我没有更新生产数据库的端口号)