Ошибка при подключении к базе MySQL через сервер на NodeJS
База открыта локально на сервере XAMPP. Пытаюсь подключится к базе при помощи данного NodeJS кода:
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
port: 8080,
path: 'phpmyadmin',
user: 'root',
password: '',
database: 'users'
});
connection.connect(err => {
if (err) {
console.log('NOT CONNECTED');
console.log(err);
return err;
} else {
console.log('Connected');
}
});
connection.end();
Но возникает такая ошибка:
Error: Connection lost: The server closed the connection.
fatal: true,
code: 'PROTOCOL_CONNECTION_LOST'
Как решить данную проблему?
Ответы (1 шт):
Думаю, если Вы еще не настраивали Ваш MySQL - потому что изначально он не даёт руту право удаленного подключения.
Эту проблему можно решить двояко:
или даём руту право удаленного подключения из консоли mysql, примерно так:
mysql -u root
GRANT ALL ON *.* to root@'192.168.0.103' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
GRANT ALL ON *.* to root@'%' WITH GRANT OPTION;
GRANT ALL ON *.* to root@'0.0.0.0' IDENTIFIED BY 'password';
Но это - ОЧЕНЬ ПЛОХОЙ СПОСОБ, не рекомендуемый на практике.
Лучше сделать отдельного пользователя и ему дать право удаленного подключения, примерно так:
/* Посмотреть список пользователей: */
SELECT Host, USER, plugin from mysql.user;
/* Создание нового newuser с паролем password */
CREATE USER 'newuser'@'109.252.65.30' IDENTIFIED BY 'password';
grant all privileges on *.* to 'newuser'@'109.252.65.30';
ALTER USER 'newuser'@'109.252.65.30' IDENTIFIED WITH mysql_native_password BY 'password';
Там в скрипте еще IP остался 109.252.65.30, замените его на тот, с которого будет подключаться нода. Возможно, проканает 0.0.0.0 или % в качестве "любого IP" - но тут уже не уверен, попробуйте. Начать лучше с одного конкретного IP.
Надеюсь, поможет