这是一个奇怪的问题,我不确定发生了什么。我在运行 Ubuntu 10.04 LTS 的 linux 机器上安装了 MySQL。我可以通过 SSH mysql -p
访问 mysql 并以这种方式执行我的所有命令。我添加了一个用户,我可以使用 AddedUser
从我的机器远程连接,但不能从本地机器连接。这对我来说毫无意义......
SELECT host, user FROM mysql.user
产量:
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | AddedUser |
| 127.0.0.1 | root |
| li241-255 | root |
| localhost | debian-sys-maint |
| localhost | root |
+-----------+------------------+
问题是我正在这台机器上使用 Node.js 进行开发,我无法使用相同的用户名从服务器进行本地连接。我试过 FLUSH PRIVILEGES
但这似乎没有效果。
我知道它不是 Node.js,因为我在另一个数据库上使用相同的代码并且它在那个环境中工作。
编辑
这是 Node 给我的错误。
node.js:50
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: ECONNREFUSED, Connection refused
at Stream._onConnect (net.js:687:18)
at IOWatcher.onWritable [as callback] (net.js:284:12)
编辑2
据我所知,我拥有正确的端口和服务器。我的 /etc/mysql/my.cnf
包含这个:
port = 3306
socket = /var/run/mysqld/mysqld.sock
我的 MySQL 对象包含:
{ host: 'localhost',
port: 3306,
user: 'removed',
password: 'removed',
database: '',
typeCast: true,
flags: 260047,
maxPacketSize: 16777216,
charsetNumber: 192,
debug: false,
ending: false,
connected: false,
_greeting: null,
_queue: [],
_connection: null,
_parser: null,
server: 'ExternalIpAddress' }
可能有用?
netstat -ln | grep mysql
unix 2 [ ACC ] STREAM LISTENING 1016418 /var/run/mysqld/mysqld.sock
最佳答案
Connection Refused
正在 TCP/IP 协议(protocol)级别发出信号,这意味着您的本地连接尝试使用了错误的主机名和/或(更有可能)端口号。
编辑:这是另一种(公认的低概率)可能性:
- 你有两个
host
和server
在 JS 对象中定义,在这种情况下,node.js 可能优先于server
. - 如果
externalIPaddress
位于 NAT 防火墙的另一侧,防火墙可能(实际上应该)配置为丢弃到端口 3306 的传入流量。 - 当您尝试连接时,您的数据包首先被路由到 NAT 防火墙并在那里被丢弃。
验证同时拥有 server
和 host
设置不会导致这个问题。
关于MySQL 可以远程连接但不能本地连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4523459/