NodeJS/mySQL - ER_ECCESS_DENIED_ERROR Доступ запрещен для пользователя 'root' @'localhost' (с использованием пароля: YES)

Я пытаюсь подключиться к mySQL через файл NodeJS, но я получаю следующую ошибку:

{ 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. Я был повсюду Google и StackOverflow, но до сих пор не нашел решения, которое работает. Я использую MySQL 5.7.16 на Ubuntu 16.04.1 на VIRTUAL MACHINE. Не уверен, что виртуальная машина здесь имеет значение. Мой 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();
    }
);

Я пробовал использовать "locahost", а также "127.0.0.1" в своем javascript. У меня есть "root" пользователь для "localhost" и "127.0.0.1" в таблице mySql.user, и я могу видеть это, выполняя 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

Я попытался сбросить пароль root так: https://help.ubuntu.com/community/MysqlPasswordReset

После каждой попытки я запускал FLUSH PRIVILEGES. Я остановил и перезапустил mySQL. Я полностью удалил mySQL и переустановил.

Все безрезультатно. Я получаю ошибку отказа в доступе каждый раз, когда я пытаюсь запустить javascript, но у меня нет абсолютно никаких проблем при подключении к mySQL через терминал.

Есть идеи?

Ответ 1

Использование последней версии MySQL в package.json решило проблему.

Я использовал версию 2.0.0. Я изменил версию на 2.10.2.

Ответ 2

У меня такая же проблема, я решил ее, изменив пароль на пустую строку.

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

Ответ 3

Попробуйте добавить поле порта:

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

Ответ 4

У меня была аналогичная проблема. Я запускал mysql в контейнере Docker и имел ту же ошибку при попытке подключиться к нему из моего приложения-узла.

Оказалось, что я запустил контейнер Docker, не подвергая порт, следовательно, он был 3306 внутри контейнера, но не был бы доступен через localhost: 3306. Почему я получил ошибку ER_ACCESS_DENIED_ERROR, потому что на самом деле у меня на сервере 3306 был другой сервер mysql с разными именами и паролями.

Чтобы узнать, работает ли какой-либо конкретный тип порта:

ps axu | grep 3306

Поскольку у меня уже было что-то на порту 3306, чтобы сделать сервер доступным для моего приложения, я сменил порт на 3307 и запустил мой контейнер docker mysql с помощью команды:

docker run --name=<name> -e MYSQL_ROOT_PASSWORD=<password> -p 3307:3306 -d mysql

После запуска mysql-клиента внутри Docker с командой:

docker exec -it <name> mysql -u root -p

И после создания базы данных для подключения я смог подключиться к моему mysql db из моего приложения-узла с этими строками:

 const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'database',
    port: 3307
 });

 connection.connect();

Надеюсь, кто-то поможет докерам и mysql :)

Ответ 5

Для mysql версии 2.16.0 (сентябрь 2018):

просто создайте нового пользователя в mysql.

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

замените имя пользователя и пароль.

Ответ 6

//На удивление это работает.

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

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

Ответ 7

У меня была та же проблема, и меня изменил пароль пользователя базы данных. Следуй этим шагам:

  1. Открыть MySQL Workbench

  2. Открыть Local instance MySQL57 с использованием старого пароля

  3. Перейдите на Server > Users and Privileges
  4. Смените пароль и снова войдите в MySQL. OR Создайте newuser и установите привилегии. (Если смена пароля не работает.)

Ответ 8

Создание нового пользователя (вместо использования root) исправило мою проблему.

mysql> CREATE USER 'new_user'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

Затем предоставьте:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'new_user'@'%' WITH GRANT OPTION;

Затем измените учетные данные:

  var connection = mysql.createConnection({
    host     : 'The mysql IP',
    port     : 'The mysql Port',
    user     : 'new_iser',
    password : 'new_user_pass',
    database : 'database-name'
  }); 

Ответ 9

Я столкнулся с этой проблемой, указав полное имя пользователя в разделе пользователя, когда я изменил "root" @"localhost" на "root". Теперь он работает нормально.

var mysql = require('mysql');

 var con = mysql.createConnection({
  host: hostname,
  user: "root",
  password: "rootPassword"
 });

 con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
 });

Ответ 10

У меня была такая же ошибка из сценария nodejs, поэтому я удалил параметр пароля, и теперь он магически отлично работает

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

Ответ 11

const pool = mysql.createPool({ host: 'localhost', user: 'root', database: 'database_name', password: 'your_pwd' });

убедитесь, что вы написали ключи и правильно. Я столкнулся с подобной проблемой, затем понял, что я написал имя пользователя вместо пользователя

Ответ 12

Добавьте skip-grant-tables в my.ini (этот файл доступен в пути установки по умолчанию mysql)

[ТуздЫ]

пропуск грантовый столов

Порт = 3306

Ответ 13

Если кто-то все еще сталкивается с проблемой. Попробуйте

var mysql = require("mysql");
var con = mysql.createConnection({
  host: "127.0.0.1",
  user: "your_username",
  password: "password",
  database: "your_db_name"
});

Ответ 14

В основном проблема заключается в том, как введенный пароль интерпретируется сервером MySQL. Пожалуйста, перейдите по ссылке ниже. Это должно решить проблему. MySQL 8.0 - клиент не поддерживает протокол аутентификации, запрошенный сервером; рассмотреть вопрос об обновлении клиента MySQL

Ответ 15

Если вы подключаетесь к внешнему серверу с локального хоста, вам может потребоваться добавить адрес маршрутизатора шлюза в поле "Разрешенные хосты" MySQL.

MySQL Allowable Hosts

Этот адрес можно найти после знака @в сообщении об ошибке:

Access denied for user 'your_username'@'blah.blah.blah.yourisp.com'

Ответ 16

Для меня проблема заключалась в том, что внутри объекта соединения SQL pass: 'mypassword' password: 'mypassword' pass: 'mypassword' вместо password: 'mypassword'.

Ответ 17

удалить mysql и удалить связанную с mysql службу (например, mysqld.exe xampp). then, переустановить mysql.