我正在尝试运行一个简单的节点示例来访问mysql数据库并收到以下错误 - 错误:ER_ACCESS_DENIED_ERROR:拒绝用户访问' root' @' ubuntu.local&#39 ; (使用密码:是)
var mysql = require('mysql');
var connection = mysql.createConnection({
host : '192.168.0.12',
user : 'root',
password : 'password',
database : 'app'
});
connection.connect();
connection.query('SELECT * from users', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0]);
});
connection.end();
以上是使用node.js访问mysql的代码。有关我可能做错的建议,提前感谢。
答案 0 :(得分:9)
我遇到了类似的问题,我遇到了同样的错误。
我的答案最终是因为我使用的是另一个端口。默认情况下,mysql需要一个3306的端口,但是我使用的是MAMP,其中MySQL服务器端口被指定为8889.只要我在数据库连接中添加了端口定义,就可以了:
var connection = mysql.createConnection({
port: 8889,
user: 'root',
password : 'password',
database : 'my_database'
});
注意:这适用于使用MAMP的Mac,没有在ubuntu或Windows上试过。
答案 1 :(得分:3)
我遇到了完全相同的问题。我无法通过nodejs中的mysql模块连接,但能够通过终端中的mysql客户端连接(mysql -u root -p1111 -h localhost mydb)
事实证明,mysql模块将“localhost”转换为127.0.0.1。 这不适用于(mysql -u root -p1111 -h 127.0.0.1 mydb)。 见Issue 734
所以我必须在MySQL中为127.0.0.1设置密码,它解决了这个问题。
说明
通过控制台连接到mysql:
mysql -u root -p mysql
并运行
SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('Add-Your_password-here');
答案 2 :(得分:1)
我已经解决了这个问题很长一段时间,在我所做的所有论坛中,一个简单的解决方案解决了我的问题。我的密码有一些特殊的字符。我将它改为更简单的一个像#34; onlyletters"它完美无缺。可能是nodejs mysql模块中的编码问题,我可以......希望它会对你们中的一些人有所帮助......
答案 3 :(得分:0)
我有一个类似的问题,我的nodejs项目。我正在使用knex.js进行querybuilder及其配置。
当主机值 127.0.0.1 时出现此问题,当我将更改为127.0.0.1更改为localhost时,问题就消失了。
var knex = require('knex')({
client: 'mysql',
connection: {
**host: 'localhost',**
user: 'userNew',
password: 'password',
database: 'appDb'
}
});
答案 4 :(得分:0)
用户可能没有分配任何管理角色,因此他无法访问数据库。用户将至少需要SELECT特权才能连接。
答案 5 :(得分:-1)
实际上解决方案比你想象的要容易。将主机更改为127.0.0.1以进行数据库连接。