需要帮助使用node.js访问mysql数据库

时间:2012-11-18 03:00:22

标签: javascript mysql node.js

我正在尝试运行一个简单的节点示例来访问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的代码。有关我可能做错的建议,提前感谢。

6 个答案:

答案 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');

Source

答案 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特权才能连接。

更多信息在这里: https://dev.mysql.com/doc/workbench/en/wb-mysql-connections-navigator-management-users-and-privileges.html

答案 5 :(得分:-1)

实际上解决方案比你想象的要容易。将主机更改为127.0.0.1以进行数据库连接。