2016-11-06 501 views
2

我在Windows上运行scotch box(一个无用的LAMP堆栈)。错误connect node.js中的ENOENT /var/run/mysqld/mysqld.sock

我没有问题,通过PHP或Navicat正常连接到MySQL。

,但我试图连接到它Node.js,我得到错误“Error connecting to MySQL: Error: connect ECONNREFUSED 127.0.0.1:3306

从我的周围搜索明白看来我需要设置套接字路径

但当我这样做时,我得到的错误“Error connecting to MySQL: Error: connect ENOENT /var/run/mysqld/mysqld.sock

我100%确定这是正确的套接字路径。我已经SSH进入vagrant并验证mysqld.sock实际上是否存在,并且已在/etc/mysql/my.cnf中正确设置。跳过网络也关闭。

我也尝试将绑定地址设置为0.0.0.0,并完全注释掉绑定地址,重命名mysqld.sock并重新启动mysql服务器,以便它再次重新创建mysqld.sock。还尝试禁用我的防火墙(无论如何都允许node.js)并重新安装MySQL。

这都不是工作和错误仍然是相同的:“Error connecting to MySQL: Error: connect ENOENT /var/run/mysqld/mysqld.sock

这是我到目前为止的代码:

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : 'root', 
    database : 'test', 
    socketPath : '/var/run/mysqld/mysqld.sock' 
}); 

connection.connect(function(err) { 
    if (err) { 
    console.error('Error connecting to MySQL: ' + err.stack); 
    return; 
    } 
    console.log('connected as id ' + connection.threadId); 
    }); 

我该如何解决这个问题?

+0

不应该将'socketPath'路径设置为:''/ var/lib/mysqld/mysqld.sock'而不是'/ var/run/mysqld/mysqld.sock'? – Cyclonecode

+0

我看到我粘贴了错误的错误。本来我认为它是/ var/lib,然后我将它确认为/ var/run /。要100%清除,我现在得到的错误是'错误:连接ENOENT/var/run/mysqld/mysqld.sock''。对困惑感到抱歉。 –

+0

我使用'sudo find/-type s'搜索scotchbox机器上的mysql套接字,似乎套接字位于'/ run/mysqld/mysqld.sock' – Cyclonecode

回答

0

所以我设法解决它。

您只需在my.cnf中注释掉bind-address并使用站点的IP连接即可。

在我的情况下,它是192.168.33.10(这是默认设置为scotchbox的设置)。

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : '192.168.33.10', 
    user  : 'root', 
    password : 'root', 
    database : 'test' 
}); 

connection.connect(function(err) { 
    if (err) { 
    console.error('Error connecting to MySQL: ' + err.stack); 
    return; 
    } 
    console.log('connected as id ' + connection.threadId); 
    }); 
+0

无法正常工作 – sasuke

0

你需要编辑是/etc/mysql/mysql.conf.d/mysqld.cnf

注释掉绑定地址线在该文件中,你应该是文件精细。