NodeJS/mySQL - ER_ECCESS_DENIED_ERROR Access denied for user 'root'@'localhost' (using password: YES)

Je suis tente de se connecter à mySQL via un NodeJS fichier, mais je reçois l'erreur suivante:

{ 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 }

La chose étrange est que je peux me connecter amende par le terminal en cours d'exécution mysql -u root -p. Je ne reçois cette erreur lors de l'exécution de mon code javascript. J'ai été sur Google et StackOverflow, mais n'ont toujours pas trouvé une solution qui fonctionne. Je suis de l'utilisation de MySQL 5.7.16 sur Ubuntu 16.04.1 sur une MACHINE VIRTUELLE. Vous ne savez pas si une VM fait une différence ici. Mon code Javascript ci-dessous:

'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();
}
);

J'ai essayé d'utiliser 'locahost" ainsi que "127.0.0.1" dans mon javascript. J'ai un utilisateur 'root' pour les 'localhost' et '127.0.0.1' dans mySql.de l'utilisateur sur la table et je suis capable de voir ce par l'exécution de SELECT user, host FROM mysql.user WHERE user='root';

J'ai ajouté des privilèges à l'utilisateur 'root' par l'exécution de cette:

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

J'ai couru le dessus sur 127.0.0.1. J'ai aussi essayé ceci:

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

J'ai tenté de réinitialiser le mot de passe root comme ceci:
https://help.ubuntu.com/community/MysqlPasswordReset

J'ai couru FLUSH PRIVILEGES après chaque tentative. J'ai arrêté et redémarré mySQL. J'ai désinstallé mySQL complètement et réinstallé.

En vain. Je reçois l'erreur d'accès refusé à chaque fois que j'essaie d'exécuter le javascript, mais je n'ai absolument aucun problème quand je me connecte à mySQL via le terminal.

Des idées?

La prochaine chose que je ferais, c'est de créer un autre utilisateur de votre application pour en parler. C'est quelque chose que vous devriez faire de toute façon, et il pourrait y avoir des restrictions dans votre instance mysql limitant la façon dont on peut se connecter en tant que root - peut-être socket vs tcp.
J'ai également essayé. Créé un nouvel utilisateur, et bénéficier de tous les privilèges. Je reçois le même message d'erreur "Accès refusé pour "newUser'@'localhost'.
J'ai aimé la façon dont vous avez décrit les détails de cette question. Parfait!

OriginalL'auteur mwelk11 | 2016-11-08