我试图通过NodeJS文件连接到mySQL,但收到以下错误:

{ Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)
    at Handshake.Sequence._packetToError (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/sequences/Sequence.js:30:14)
    at Handshake.ErrorPacket (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/sequences/Handshake.js:67:18)
    at Protocol._parsePacket (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Protocol.js:197:24)
    at Parser.write (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.ondata (_stream_readable.js:555:20)
    at emitOne (events.js:101:20)
    at Socket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:176:18)
    at Socket.Readable.push (_stream_readable.js:134:10)
    --------------------
    at Protocol._enqueue (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Protocol.js:110:26)
    at Protocol.handshake (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Protocol.js:42:41)
    at Connection.connect (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/Connection.js:81:18)
    at Connection._implyConnect (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/Connection.js:222:10)
    at Connection.query (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/Connection.js:137:8)
    at Object.<anonymous> (/home/matthew/Node/mySqlTest/index.js:11:12)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
  code: 'ER_ACCESS_DENIED_ERROR',
  errno: 1045,
  sqlState: '28000',
  fatal: true }

奇怪的是,我可以通过终端运行mysql -u root -p次连接.我只有在运行javascript时才会出现这个错误.我已经浏览了谷歌和StackOverflow,但仍然没有找到一个有效的解决方案.我在虚拟机上使用Ubuntu 16.04.1上的MySQL 5.7.16.不确定虚拟机是否在这里起作用.我的Javascript代码如下:

'use strict';                                                                                                                                      

var mysql = require('mysql');

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password'
});

connection.query(
    'SELECT "foo" AS first_field, "bar" AS second_field',
    function(err, results, fields) {
        console.log(err);
        console.log(results);
        connection.end();
    }
);

我曾try 在javascript中使用"locahost"和"127.0.0.1".我有一个mySql中"localhost"和"127.0.0.1"的"root"用户.用户表,我可以通过执行SELECT user, host FROM mysql.user WHERE user='root';

通过执行以下命令,我为"root"用户添加了权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password';

我也在127.0.0.1上运行了上面的程序.我也试过:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION

我已try 按如下方式重置根密码:

每次try 后我都跑了FLUSH PRIVILEGES.我已经停止并重新启动了mySQL.我已经完全卸载并重新安装了mySQL.

这一切都无济于事.每次try 运行javascript时,我都会收到拒绝访问错误,但当我通过终端连接到mySQL时,我绝对没有问题.

有什么 idea 吗?

推荐答案

使用最新的MySQL版本解决了这个问题.

我用的是2.0.0版.我把版本改成了2.10.2.

Mysql相关问答推荐

在mySQL中使用子查询和WHERE子句的JOIN

为什么我安装MySQL时不能使用3306端口?

Google Sheet查询以提取数据并用值替换复选框.(差异)

计算符合字段值只能包含一种事件类型这一事实的记录

布尔值之间的 SQL less/greater 比较会产生意外结果

使用 awk 重写 maxscale 过滤器

模拟Mysql Cursor类的fetchone()方法,并将其返回值设置为None

如何在 Shopware 6 DAL 中实施 Haversine 公式?

MySQL CHECK 约束以确保记录不使用自动增量 ID 引用自身?

检索按键列值分组的最新日期 (MySql)

带有 PARTITION BY 子句的 ROW_NUMBER() 停止在 MariaDB 上工作

插入二进制数据会导致Data too long for column...

使用另一个表中的值更新一个表中的值

无法在两个 mysql 表上执行内部联接

如何在 MySQL 中 Select 字段具有最小值的数据?

在另一个 where 语句(子查询?)中使用一个 sql 查询的结果

为什么 GRANT 在 MySQL 中不起作用?

如何允许 django 管理员将字段设置为 NULL?

在 MySQL 的 LIMIT 子句中使用变量

mysql 从日期格式中提取年份