Ответ 1
Использование последней версии MySQL в package.json решило проблему.
Я использовал версию 2.0.0. Я изменил версию на 2.10.2.
Я пытаюсь подключиться к 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 через терминал.
Есть идеи?
Использование последней версии MySQL в package.json решило проблему.
Я использовал версию 2.0.0. Я изменил версию на 2.10.2.
У меня такая же проблема, я решил ее, изменив пароль на пустую строку.
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: ''
});
Попробуйте добавить поле порта:
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
port: 3307
});
У меня была аналогичная проблема. Я запускал 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 :)
Для mysql версии 2.16.0 (сентябрь 2018):
просто создайте нового пользователя в mysql.
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
замените имя пользователя и пароль.
//На удивление это работает.
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: ""
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
У меня была та же проблема, и меня изменил пароль пользователя базы данных. Следуй этим шагам:
Открыть
MySQL Workbench
Открыть
Local instance MySQL57
с использованием старого пароля- Перейдите на
Server
>Users and Privileges
- Смените пароль и снова войдите в MySQL.
OR
Создайте newuser и установите привилегии. (Если смена пароля не работает.)
Создание нового пользователя (вместо использования 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'
});
Я столкнулся с этой проблемой, указав полное имя пользователя в разделе пользователя, когда я изменил "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!");
});
У меня была такая же ошибка из сценария nodejs, поэтому я удалил параметр пароля, и теперь он магически отлично работает
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root'
});
const pool = mysql.createPool({ host: 'localhost', user: 'root', database: 'database_name', password: 'your_pwd' });
убедитесь, что вы написали ключи и правильно. Я столкнулся с подобной проблемой, затем понял, что я написал имя пользователя вместо пользователя
Добавьте skip-grant-tables в my.ini (этот файл доступен в пути установки по умолчанию mysql)
[ТуздЫ]
пропуск грантовый столов
Порт = 3306
Если кто-то все еще сталкивается с проблемой. Попробуйте
var mysql = require("mysql");
var con = mysql.createConnection({
host: "127.0.0.1",
user: "your_username",
password: "password",
database: "your_db_name"
});
В основном проблема заключается в том, как введенный пароль интерпретируется сервером MySQL. Пожалуйста, перейдите по ссылке ниже. Это должно решить проблему. MySQL 8.0 - клиент не поддерживает протокол аутентификации, запрошенный сервером; рассмотреть вопрос об обновлении клиента MySQL
Если вы подключаетесь к внешнему серверу с локального хоста, вам может потребоваться добавить адрес маршрутизатора шлюза в поле "Разрешенные хосты" MySQL.
Этот адрес можно найти после знака @в сообщении об ошибке:
Access denied for user 'your_username'@'blah.blah.blah.yourisp.com'
Для меня проблема заключалась в том, что внутри объекта соединения SQL pass: 'mypassword'
password: 'mypassword'
pass: 'mypassword'
вместо password: 'mypassword'
.
удалить mysql и удалить связанную с mysql службу (например, mysqld.exe xampp). then, переустановить mysql.