我正在尝试使用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)套接字已意外关闭”
我对此并不陌生,可以寻求帮助。谢谢。
答案 0 :(得分:0)
一些关键思想:
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并使用它,然后才可以连接并查询数据库。