Я не могу установить простое соединение с сервером по какой-то причине. Я устанавливаю новейшую базу данных MySQL Community 8.0 вместе с Node.JS с настройками по умолчанию.
Это мой код node.js
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",
insecureAuth : true
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
Ниже приведена ошибка в командной строке:
C:\Users\mysql-test>node app.js
C:\Users\mysql-test\node_modules\mysql\lib\protocol\Parse
r.js:80
throw err; // Rethrow non-MySQL errors
^
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Handshake.Sequence._packetToError (C:\Users\mysql-
test\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
at Handshake.ErrorPacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\sequences\Handshake.js:130:18)
at Protocol._parsePacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\Protocol.js:279:23)
at Parser.write (C:\Users\mysql-test\node_modules\mys
ql\lib\protocol\Parser.js:76:12)
at Protocol.write (C:\Users\mysql-test\node_modules\m
ysql\lib\protocol\Protocol.js:39:16)
at Socket.<anonymous> (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:103:28)
at Socket.emit (events.js:159:13)
at addChunk (_stream_readable.js:265:12)
at readableAddChunk (_stream_readable.js:252:11)
at Socket.Readable.push (_stream_readable.js:209:10)
--------------------
at Protocol._enqueue (C:\Users\mysql-test\node_module
s\mysql\lib\protocol\Protocol.js:145:48)
at Protocol.handshake (C:\Users\mysql-test\node_modul
es\mysql\lib\protocol\Protocol.js:52:23)
at Connection.connect (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:130:18)
at Object.<anonymous> (C:\Users\mysql-test\server.js:
11:5)
at Module._compile (module.js:660:30)
at Object.Module._extensions..js (module.js:671:10)
at Module.load (module.js:573:32)
at tryModuleLoad (module.js:513:12)
at Function.Module._load (module.js:505:3)
at Function.Module.runMain (module.js:701:10)
Я читал о некоторых вещах, таких как: https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507
Но я все еще не уверен, как решить мою проблему. Любая помощь будет оценена: D
Ответы:
Выполните следующий запрос в MYSQL Workbench
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
Где в
root
качестве вашего пользователя,localhost
как ваш URL иpassword
как ваш парольЗатем выполните этот запрос, чтобы обновить привилегии:
flush privileges;
Попробуйте подключиться с помощью узла после этого.
Если это не работает, попробуйте это без
@'localhost'
части.источник
flush privileges;
после.caching_sha2_password
введено в MySQL 8.0, но версия Node.js еще не реализована.Давайте сначала проясним, что происходит.
MySQL 8 поддерживает подключаемые методы аутентификации. По умолчанию, один из них по имени
caching_sha2_password
используется , а не наш старый добрыйmysql_native_password
( источник ). Должно быть очевидно, что использование криптоалгоритма с несколькими рукопожатиями является более безопасным, чем простая передача пароля, которая была там в течение 24 лет !Теперь проблема
mysqljs
в Node (пакет, который вы устанавливаетеnpm i mysql
и используете в своем коде Node), пока не поддерживает этот новый метод аутентификации по умолчанию в MySQL 8. Вопрос находится здесь: https://github.com/mysqljs/mysql/issues/1507 и по-прежнему открыт, через 3 года, по состоянию на июль 2019 года.(ОБНОВЛЕНИЕ, июнь 2019 года. В mysqljs теперь есть новый PR, чтобы исправить это! ) (ОБНОВЛЕНИЕ, февраль 2020 года: по- видимому, он должен появиться в версии 3 mysqljs . )
Ваши варианты
Вариант 1) Понизьте версию «MySQL» для аутентификации, используя старый добрый «native_password»
Это то, что все предлагают здесь (например, верхний ответ выше ). Вы просто входите
mysql
и запускаете запрос, говоряroot
хорошо, используя старыйnative_password
метод для аутентификации:Хорошо, что жизнь будет простой, и вы все равно сможете без проблем использовать старые добрые инструменты, такие как Sequel Pro . Но проблема в том, что вы не используете более безопасные (и крутые, читайте ниже) материалы, доступные вам.
Вариант 2) Замените пакет "Node" на MySQL Connecter X DevAPI
MySQL X DevAPI для Node является заменой пакета Node's Mysqljs , предоставленного официальными парнями http://dev.mysql.com .
Это работает как
caching_sha2_password
проверка подлинности с поддержкой шарма . (Просто убедитесь, что вы используете порт33060
для обмена данными по протоколу X ).Плохо то, что вы оставили наш старый
mysql
пакет, к которому все так привыкли и на который полагаются.Хорошо, что ваше приложение теперь более защищено, и вы можете воспользоваться кучей новых вещей, которые не давали наши старые добрые друзья! Просто ознакомьтесь с руководством по X DevAPI, и вы увидите, что в нем есть масса новых сексуальных функций, которые могут пригодиться. Вам просто нужно заплатить цену обучения, которая, как ожидается, идет с любым обновлением технологии. :)
PS. К сожалению, в этом пакете XDevAPI еще нет определения типов (что понятно с помощью TypeScript), поэтому, если вы набираете текст , у вас будут проблемы. Я попытался сгенерировать .d.ts используя
dts-gen
иdtsmake
, но безуспешно. Так что имейте это в виду.Ура!
источник
Используя старые
mysql_native_password
работы:Это потому, что
caching_sha2_password
введено в MySQL 8.0, но версия Node.js еще не реализована. Вы можете увидеть этот запрос и эту проблему для получения дополнительной информации. Вероятно, исправление придет в ближайшее время!источник
Полные шаги для MySQL 8
Подключиться к MySQL
Сбросить пароль
(Замените
your_new_password
на пароль, который вы хотите использовать)Затем попробуйте подключиться с помощью узла
источник
Хотя принятый ответ правильный, я бы предпочел создать нового пользователя и затем использовать его для доступа к базе данных.
источник
Если вы столкнулись с этой ошибкой, но все еще хотели использовать
MySQL
версию 8. Вы можете добиться этого, сказав MySQL Server использовать устаревший плагин аутентификации при создании базы данных с использованиемDocker
.Итак, ваш
compose
файл будет выглядеть так:источник
command
, но все еще получаю сообщение об ошибке неподдерживаемой аутентификации при использованииmysql
в Node.jsError: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
В Mysql Последний докер контейнер
источник
Если командная строка ALTER USER ... не работает для вас И если вы используете Windows 10, попробуйте выполнить следующие действия:
1) Введите MySQL в строке поиска Windows
2) Откройте установщик MySQL для Windows - сообщество
3) Найдите «MySQL server» и нажмите «Reconfigure».
4) Нажимайте «Далее», пока не дойдете до фазы «Метод аутентификации».
5) На этапе «Метод аутентификации» проверьте второй параметр «Использовать устаревший метод аутентификации»
6) Затем следуйте инструкциям установщика Windows до конца
7) Когда это будет сделано, перейдите в «Службы» в строке поиска Windows, нажмите «Пуск» MySql81 ».
Теперь попробуйте еще раз, соединение между MySQL и Node.js должно работать!
источник
Большинство ответов на этот вопрос приводят к переходу на механизм аутентификации с по
caching_sha2_password
кmysql_native_password
. С точки зрения безопасности это весьма разочаровывает.В этом документе подробно обсуждается
caching_sha2_password
и, конечно, почему он НЕ должен быть первым выбором для понижения метода аутентификации.При этом я считаю, что ответ Айдина должен быть принятым ответом. Вместо понижения метода аутентификации используйте соединитель, который соответствует версии сервера.
источник
Оригинальную документацию вы можете найти здесь: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
источник
У меня MYSQL на сервере и приложение nodejs на другом сервере
Выполните следующий запрос в MYSQL Workbench
ALTER USER 'root' @ '%' ИДЕНТИФИЦИРОВАНО С mysql_native_password BY 'password'
источник
С MySQL 8+ новая аутентификация по умолчанию
caching_sha2_password
вместоmysql_native_password
. Новый и более безопасный метод аутентификации еще не поддерживается собственнымmysql
пакетом, но вы должны рассмотреть возможность использования пакета@mysql/xdevapi
, который официально поддерживается и поддерживается Oracle.Чтобы установить новый пакет, запустите:
Чтобы подключиться к базе данных и вставить некоторые значения:
Официальную документацию по пакету можно найти здесь: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
источник
Если вы используете докер, он работает для меня!
в
docker-compose.yml
добавьте следующие строки:после этого
down
контейнер иup
снова.источник
Для существующих MySQL 8.0 устанавливается на Windows 10 MySQL,
запустить установщик,
нажмите «Переконфигурировать» под QuickAction (слева от MySQL Server), затем
нажмите рядом, чтобы пройти через следующие 2 экрана до прибытия
в разделе «Метод проверки подлинности» выберите «Использовать устаревший метод проверки подлинности (сохранить совместимость с MySQL 5.x»).
Продолжайте нажимать, пока установка не будет завершена
источник
В дополнение к ответам выше; После выполнения команды ниже
Если вы получаете ошибку как:
Затем попробуйте в cmd как администратор; установить путь к папке bin сервера MySQL в cmd
и затем выполните команду:
Это должно обновить сервер и системные таблицы.
Тогда вы сможете успешно выполнить приведенные ниже команды в Запросе в Workbench:
затем не забудьте выполнить следующую команду:
После всех этих шагов вы сможете успешно подключиться к базе данных MySQL. Надеюсь это поможет...
источник
Просто запустите MySQL Server Installer и перенастройте My SQL Server ... Это сработало для меня.
источник
Проверьте привилегии и имя пользователя / пароль для вашего пользователя MySQL.
Для отлова ошибок всегда полезно использовать переопределенный
_delegateError
метод. В вашем случае это должно выглядеть так:Эта конструкция поможет вам отследить фатальные ошибки.
источник
Просто понял это, попробовав множество вещей. То, что наконец-то сделало это для меня, было добавлением
require('dotenv').config()
в мой.sequelizerc
файл. Очевидно, sequelize-cli не читает переменные env.источник
Вы можете пропустить ORM, сборщики и т. Д. И упростить управление БД / SQL с помощью
sqler
иsqler-mdb
.источник
Понижение рейтинга не может быть хорошим вариантом, так как:
Вы можете использовать
mysql2
пакет вместоmysql
. В основном это API, совместимый с mysqljs. Также есть поддержка обещаний.Используйте это как:
const mysql = require('mysql2/promise')
Вы можете прочитать больше о
mysql2
здесь: https://www.npmjs.com/package/mysql2Надеюсь, поможет. :)
источник
У меня та же проблема с MySQL, и я решаю с помощью XAMPP для соединения с MySQL и остановки служб в Windows для MySQL (панель управления - Администрирование - Службы) и в папке db.js (которая отвечает за базу данных). сделать пароль пустым (здесь видно :)
источник