如何使用node.js连接到本地mariadb服务器

时间:2019-04-03 19:48:01

标签: mysql node.js mariadb fedora

我正在尝试使用node.js连接到本地mariadb服务器。尝试连接时出现错误:

“错误:(conn = 8,否:1045,SQLState:28000)拒绝用户'root'@'localhost'的访问(使用密码:NO)”

我不确定为什么会这样,因为我在建立连接时设置了密码,并且可以使用root密码登录到mysql服务器

 mysql -u root -p

这是我的代码的样子:

var mysql = require('mariadb');

var con = mysql.createConnection({
        host: "localhost",
        user: "root",
        password: "8pJcpe/h0h_%",
        port: 3306
        })
        .then(conn => {
                console.log("connected" + conn.threadId);
        })
        .catch(err => {
                console.log("got error " + err);
        });

我也尝试通过端口3307进行尝试,并收到以下错误消息: “错误:连接ECONNREFUSED 127.0.0.1:3307”

当我尝试使用要用于ssh进入服务器的端口时,出现以下不同错误: “错误:(conn = -1,否:45009,SQLState:08S01)套接字已意外关闭”

我对此并不陌生,可以寻求帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

一些关键思想:

  • MySQL用户由用户主机标识。
  • 在MySQL localhost中表示本地套接字连接,而不是TCP / IP环回。

此:

mysql -u root -p

将使用本地套接字连接;这将匹配mysql.user表行user='root' and host='localhost'

要强制进行TCP / IP连接:

mysql -h 127.0.0.1 -u root -p

这将匹配mysql.user中的一行,例如user='root' and host='127.0.0.1'user='root' and host='%'

mysql.user中的每一行都是一个单独的用户;可以有多行带有user='root'和不同值host的行。这些行中的每一行代表单独的用户,每个用户都有自己的特权和密码(或身份验证方法)。


对于mariadb node.js驱动程序

使用host选项,我们将尝试进行TCP / IP连接。

要通过本地套接字文件建立连接(即相当于mysql -u root -p,我们需要使用socketPath而不是host选项。

https://mariadb.com/kb/en/library/nodejs-connection-options/


如果要在node.js中使TCP / IP连接正常工作,则应首先确保mysql -h 127.0.0.1 -u root -p连接正常。

答案 1 :(得分:0)

我能够解决此问题。由于某些原因,在使用mariadb时,它无法识别出我在为其提供密码。因此,我不得不切换到mysql并使用它,然后才可以连接并查询数据库。