查询mysql数据库时出现ETIMEDOUT错误

Posted

技术标签:

【中文标题】查询mysql数据库时出现ETIMEDOUT错误【英文标题】:ETIMEDOUT error when querying mysql database 【发布时间】:2017-04-13 14:42:18 【问题描述】:

使用 sequel pro 我创建了一个名为 test 的数据库。它有一张名为users 的表。在该表中有一个用户 -> id=1, name=Phantom

I have installed the mysql node module

当我运行下面的代码时,我得到The solution is: undefined

谁能告诉我如何连接到数据库并向用户展示?

var mysql      = require('mysql');
var connection = mysql.createConnection(
  host     : 'localhost:8889',
  user     : 'root',
  password : 'root',
  database : 'test'
);

connection.connect();

connection.query('SELECT * from users', function(err, rows, fields) 
  if (err) throw err;
  console.log('The solution is: ', rows);
);

connection.end();

它显示以下错误:

错误:连接 ETIMEDOUT 在 Connection._handleConnectTimeout (/Users/fitz035/Desktop/sony/presave/node_modules/mysql/lib/Connection.js:425:13)

我正在通过 MAMP 运行数据库。这些是数据库设置:

Host:   localhost 
Port: 8889 
User:   root 
Password:   root 
Socket: /Applications/MAMP/tmp/mysql/mysql.sock

【问题讨论】:

检查回调中的err参数,看看哪里出了问题。从您的代码中我猜,在实际查询通过之前,连接已关闭。 @Sirko 更新了问题 您是否验证过,您的数据库实际上正在运行(在该端口上)? 如果您的数据库在端口 8889 上运行,您应该将其作为附加参数传递给连接。默认的 mysql 端口是 3306,您的应用程序现在找不到任何服务器。作为替代方案,您可以直接传递套接字,如下所示:***.com/a/26465986/1169798 让我们continue this discussion in chat. 【参考方案1】:

如果它在配置有防火墙的 VPS 上,您需要通过 SSH 将您的 IP 列入白名单。否则,即使在通过 cPanel 的 RemoteMYSQl 添加后,它仍然会抛出完全高于错误的错误

# csf -a [RemoteIP]
# csf -r 

您也可以通过 WHM 快速完成。刚刚发布,因为它可能对某人有帮助。

【讨论】:

【参考方案2】:

节点是异步的,所以connection.end() 很可能在您的查询回调之前发生。另外,非标准时指定Mysql运行的端口。

试试这个:

var mysql      = require('mysql');
var connection = mysql.createConnection(
  host     : 'localhost',
  user     : 'root',
  password : 'root',
  database : 'test',
  port: 8889
);

connection.connect();

connection.query('SELECT * from users', function(err, rows, fields) 
    if(err) console.log(err);
    console.log('The solution is: ', rows);
    connection.end();
);

【讨论】:

抱歉,更新了问题。认为新信息可能更有意义 确实,这会改变一切 :) 尝试将端口号添加到 createConnection 酷,关于connection.end 的观点仍然有效。如果您对它感到满意,请接受答案,或者如果需要我可以澄清 如果您曾经使用过连接池,请注意,关闭池中连接的正确方法是使用 connection.release()(不推荐使用 connection.end()!)

以上是关于查询mysql数据库时出现ETIMEDOUT错误的主要内容,如果未能解决你的问题,请参考以下文章

查询 MySql 视图时出现 SQLGrammar 错误

在mysql查询中使用参数时出现mysql语法错误

写入 MySQL 时查询 sqlite_master 表时出现 to_sql() 错误

尝试在 mysql 中导出查询结果时出现致命错误

MySQL Cluster ERROR 失败,查询时出现错误'Got error 240'Unknown error code' from NDBCLUSTER'

MySQL & MsAccess 2007 - 尝试更新时出现错误 3197