这是一个奇怪的问题,我不确定发生了什么。我在运行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.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)
我有正确的端口&服务器就像我能说的那样。我的/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
答案 0 :(得分:4)
Connection Refused
在TCP / IP协议级别发出信号,表示您的本地连接尝试使用了错误的主机名和/或(更可能是)端口号。
编辑:这是另一种(不可否认的低概率)可能性:
host
和server
,在这种情况下,node.js可能优先于server
。externalIPaddress
位于NAT防火墙的另一侧,则防火墙可能(实际上应该)配置为丢弃到端口3306的传入流量。确认同时设置server
和host
不会导致此问题。
答案 1 :(得分:3)
您需要设置socketPath
mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'password',
socketPath : '/var/run/mysqld/mysqld.sock',
});
答案 2 :(得分:2)
手动定义套接字为我解决了这个问题。
var client = mysql.createClient({
user: '(your user here)',
password: '(your password here)',
host: '127.0.0.1',
port: '3306',
_socket: '/var/run/mysqld/mysqld.sock',
});
答案 3 :(得分:1)
我有类似的问题,但使用MongoDB。我认为您需要将host
指向127.0.0.1
而不是localhost
。
检查:
$ nslookup localhost
和
$ nslookup localhost.
两者都应返回127.0.0.1的地址
同时检查cat /etc/hosts
如果localhost映射到ipv6:::1 localhost
然后改为127.0.0.1 localhost
localhost
可能指向ipv6地址而不是ipv4地址。
希望这会有所帮助:)
答案 4 :(得分:1)
答案 5 :(得分:0)
正如第一个也是一个好的答案所说,MySQL没有收听你的本地TCP / IP套接字。
使用以下方式连接mysql.Client
模块:
client.port = '/tmp/mysql.sock';
并填写您的mysql套接字文件所在的位置。如果你找不到这个,请考虑使用这个沉重但成功保证的全系统搜索
cd / ; find * | grep mysql.sock
答案 6 :(得分:0)
在my.cnf中,我将bind-address更改为0.0.0.0,现在我的节点应用程序的连接被正确接受了。
答案 7 :(得分:0)
对我来说,这个问题发生在只能在我们的内部网络上访问的Ubuntu盒子上(尽管我认为无论网络如何,这个解决方案都适用)。我能够很好地使用mysql Workshop和我的开发系统中的Node.js mysql插件访问mysql,但不来自运行在服务器上的Node。
特别是,我尝试了localhost,127.0.0.1甚至是'serverName',在/ etc / hosts中定义为127 ....我什么都没有,但ECONNREFUSED。
原来我的mysql实例设置为只接受发往服务器IP地址的连接。也就是说,它只接受来自
的连接{host:'172.xxx.xxx.xxx',user:'blah',....
祝你好运!!