错误:getaddrinfo ENOTFOUND - mysql

21

我在 c9.io 上运行 Node.js 服务器,并尝试连接到 Mysql,我猜测我得到了以下错误:

Error: getaddrinfo ENOTFOUND

这是因为数据库连接有误。

我正在使用以下内容:

var connection = mysql.createConnection({
    host: "REMOTE_ADDR",
    user: "MYUSERNAME", // this is replaced by my username
    database: "c9",
    port: 3306
});

你有任何想法是怎么了吗?

谢谢!

6个回答

29

一小时后,我不知道为什么,找到了问题所在。

在我的情况下,我替换了

host: 'localhost'

需要翻译的内容:

by

host: '127.0.0.1'

17

我知道这个问题已经被问了一段时间,但今天大部分时间我都在尝试解决这个问题。以下是需要检查的内容:

在你的nodejs源代码中:

  • 除非你的db虚拟机上的MySQL监听的不是3306端口,否则尝试不使用'port'选项。我曾经指定了此选项,但直到我删除它之后才解决了连接问题。而3306已经是该选项的默认值。
  • 尝试在主机"option"中使用实际的主机IP。我曾经使用一个实际的域名,但往往会出现相同的错误:"errorError: getaddrinfo ENOTFOUND",当我使用IP地址时,就没有错误了。而在AWS的Ubuntu实例上,我并未遇到此错误。但一旦切换到Azure的Ubuntu VM,我就遇到了这个问题。
  • 将“debug”连接选项设置为true,这将提供一个详细的跟踪,在连接期间会显示发生了什么

在你的db虚拟机/盒子/实例中:

  • 确保MySQL正在监听正确的端口
  • 如果你在使用池来进行并发连接时看到这个错误,请检查my.conf中max_connections和max_user_connections是否已经从默认设置更改过了
  • 在MySQL中监视"SHOW PROCESSLIST;"以查看是否有任何问题

1
解决了我的问题,必须在本地机器上运行时删除端口。 - winthers
1
我使用了没有“port”选项和“localhost”的设置,但仍然遇到相同的错误!有什么想法吗? - João Pimentel Ferreira

5

这段代码对我有效。

var mysql = require('mysql');

var con = mysql.createConnection({
    host: '127.0.0.1',
    port: '3306',
    user: 'yourUsername',
    password: '**********'
});

con.connect(function(err){
    if(err) throw err;
    console.log('connected!');
});

在您的MySQL服务器中查找主机和端口名称。 可以使用“localhost”代替“127.0.0.1”。


不鼓励只提供代码的答案。请点击[编辑]并添加一些概括您的代码如何回答问题的话语,或者解释您的答案与之前的答案/回答有何不同。[来自审核] - Nick

0

我花了近两个小时才弄明白mysql数据库的问题。我正在使用Windows cmd。

我尝试了多种方法,例如:

  1. npm install mysql2
  2. localhost更改为127.0.0.1
  3. 刷新节点

因此,为了解决这个问题:

[Error: getaddrinfo ENOTFOUND 127.0.0.1:3306]

我打开XAMPP并启动MySQL数据库,然后手动检查凭据,对我来说一切正常。

var mysql = require('mysql');

var connection = mysql.createConnection({
  host    : 'localhost',
  user    : 'test',
  password: 'test123',
}); 

0
我曾经遇到过这个问题。我很简单地解决了它,你只需要更改连接字符串的配置,例如如果你在本地机器上运行,请尝试:

host:'localhost' 或 host:'127.0.0.1'

并设置你的用户名,如果你想将代码发布到服务器上,则根据服务器给出主机名,如果在Docker容器中,则给出名称为host:'db'的主机名。

0

我也遇到了这个问题。

重要的是将端口设置为“port”变量。 不能像这样做:host: "IPADDRESS:Port" 例如:host: "127.0.0.1:3306"

这对我解决了问题。

如果已经正确,请通过终端检查连接 使用telnet ip port例如telnet 127.0.0.1 3306。 如果telnet立即返回错误,则连接不起作用,但是 如果telnet被卡住,则连接可能有效。这也帮助了我。通过这种方式检查它的想法可以在这里找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接