Ich kann aus irgendeinem Grund keine einfache Verbindung zum Server herstellen. Ich installiere die neueste MySQL Community 8.0-Datenbank zusammen mit Node.JS mit Standardeinstellungen.
Dies ist mein node.js Code
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!");
});
Unten ist der Fehler in der Eingabeaufforderung gefunden:
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)
Ich habe einige Dinge nachgelesen, wie zum Beispiel: https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507
Aber ich bin mir immer noch nicht sicher, wie ich mein Problem beheben soll. Jede Hilfe wäre dankbar: D.
Antworten:
Führen Sie die folgende Abfrage in MYSQL Workbench aus
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
Wo
root
als Ihr Benutzerlocalhost
als Ihre URL undpassword
als Ihr PasswortFühren Sie dann diese Abfrage aus, um die Berechtigungen zu aktualisieren:
flush privileges;
Versuchen Sie anschließend, eine Verbindung über den Knoten herzustellen.
Wenn das nicht funktioniert, versuchen Sie es ohne
@'localhost'
Teil.quelle
flush privileges;
danach.caching_sha2_password
es in MySQL 8.0 eingeführt wurde, aber die Node.js-Version noch nicht implementiert ist.Lassen Sie uns zunächst klarstellen, was los ist.
MySQL 8 unterstützt steckbare Authentifizierungsmethoden. Standardmäßig wird einer von ihnen
caching_sha2_password
anstelle unseres guten altenmysql_native_password
( Quelle ) verwendet. Es sollte offensichtlich sein, dass die Verwendung eines Krypto-Algorithmus mit mehreren Handshakes sicherer ist als die einfache Passwortübergabe, die es seit 24 Jahren gibt !Das Problem liegt nun
mysqljs
in Node (das Paket, mit dem Sie es installierennpm i mysql
und in Ihrem Node-Code verwenden), unterstützt diese neue Standardauthentifizierungsmethode von MySQL 8 noch nicht. Das Problem ist hier zu finden: https://github.com/mysqljs/mysql/issues/1507 und ist nach 3 Jahren ab Juli 2019 noch offen.(UPDATE Juni 2019: Es gibt jetzt eine neue PR in mysqljs , um dies zu beheben! ) (UPDATE Februar 2020: Anscheinend ist die Veröffentlichung in Version 3 von mysqljs geplant . )
Deine Optionen
Option 1) Downgrade von "MySQL" zur Authentifizierung mit dem guten alten "native_password"
Das schlagen hier alle vor (zB Top-Antwort oben ). Sie müssen nur
mysql
eine Abfrage starten und ausführen, die besagt, dass dieroot
Verwendung der altennative_password
Methode zur automatischen Authentifizierung in Ordnung ist:Das Gute ist, das Leben wird einfach und Sie können immer noch gute alte Tools wie Sequel Pro ohne Probleme verwenden . Das Problem ist jedoch, dass Sie nicht die sichereren (und cooleren, siehe unten) Dinge nutzen, die Ihnen zur Verfügung stehen.
Option 2) Ersetzen Sie das "Node" -Paket durch MySQL Connecter X DevAPI
MySQL X DevAPI für Node ist ein Ersatz für das Mysqljs-Paket von Node , das von offiziellen Mitarbeitern von http://dev.mysql.com bereitgestellt wird .
Es funktioniert wie ein Zauber, der die
caching_sha2_password
Authentifizierung unterstützt . ( Stellen Sie einfach sicher, dass Sie den Port33060
für die X-Protokoll-Kommunikation verwenden .)Das Schlimme ist, dass Sie unser altes
mysql
Paket verlassen haben, an das sich alle so gewöhnt haben.Das Gute ist, Ihre App ist jetzt sicherer und Sie können eine Menge neuer Dinge nutzen, die unsere guten alten Freunde nicht zur Verfügung gestellt haben! Schauen Sie sich einfach das Tutorial von X DevAPI an und Sie werden sehen, dass es eine Menge neuer sexy Funktionen hat, die nützlich sein können. Sie müssen nur den Preis für eine Lernkurve bezahlen, die voraussichtlich mit jedem Technologie-Upgrade einhergeht. :) :)
PS. Leider hat dieses XDevAPI-Paket noch keine Typdefinition (für TypeScript verständlich). Wenn Sie also Typoskript verwenden, treten Probleme auf. Ich habe versucht, .d.ts mit
dts-gen
und zu generierendtsmake
, aber keinen Erfolg. Denken Sie also daran.Prost!
quelle
Verwendung der alten
mysql_native_password
Werke:Dies liegt daran, dass
caching_sha2_password
es in MySQL 8.0 eingeführt wurde, die Node.js-Version jedoch noch nicht implementiert ist. Weitere Informationen finden Sie in dieser Pull-Anforderung und in diesem Problem . Wahrscheinlich wird bald ein Fix kommen!quelle
Vollständige Schritte für MySQL 8
Stellen Sie eine Verbindung zu MySQL her
Setze dein Passwort zurück
(Ersetzen Sie
your_new_password
durch das Passwort, das Sie verwenden möchten)Versuchen Sie dann, eine Verbindung über den Knoten herzustellen
quelle
Obwohl die akzeptierte Antwort korrekt ist, würde ich es vorziehen, einen neuen Benutzer zu erstellen und diesen Benutzer dann für den Zugriff auf die Datenbank zu verwenden.
quelle
Wenn Sie auf diesen Fehler gestoßen sind, aber dennoch
MySQL
Version 8 verwenden möchten, können Sie dies erreichen, indem Sie MySQL Server anweisen, das Legacy-Authentifizierungs-Plugin zu verwenden, wenn Sie die Datenbank mit erstellenDocker
.Ihre
compose
Datei sieht also folgendermaßen aus:quelle
command
,mysql
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
In MySQL Neuester Docker-Container
quelle
Wenn die Befehlszeile ALTER USER ... für Sie nicht funktioniert UND Sie Windows 10 verwenden, versuchen Sie, die folgenden Schritte auszuführen:
1) Geben Sie MySQL in die Windows-Suchleiste ein
2) Öffnen Sie die MySQL Windows Installer - Community
3) Suchen Sie nach "MySQL Server" und klicken Sie auf Reconfigure
4) Klicken Sie auf "Weiter", bis Sie die Phase "Authentifizierungsmethode" erreichen
5) Aktivieren Sie in der Phase "Authentifizierungsmethode" die zweite Option "Legacy-Authentifizierungsmethode verwenden".
6) Befolgen Sie dann die vom Windows-Installationsprogramm angegebenen Schritte bis zum Ende
7) Wenn es fertig ist, gehen Sie in der Windows-Suchleiste zu "Dienste" und klicken Sie auf "MySql81 starten".
Versuchen Sie es jetzt noch einmal, die Verbindung zwischen MySQL und Node.js sollte funktionieren!
quelle
Die meisten Antworten in dieser Frage führen zu einem Downgrade des Authentifizierungsmechanismus von
caching_sha2_password
aufmysql_native_password
. Aus sicherheitstechnischer Sicht ist dies ziemlich enttäuschend.In diesem Dokument wird ausführlich erläutert,
caching_sha2_password
warum es NICHT die erste Wahl sein sollte, die Authentifizierungsmethode herunterzustufen.Damit glaube ich, dass Aidins Antwort die akzeptierte Antwort sein sollte. Verwenden Sie statt eines Downgrades der Authentifizierungsmethode einen Connector, der der Serverversion entspricht.
quelle
Die Originaldokumentation finden Sie hier: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
quelle
Ich habe MYSQL auf dem Server und NodeJS-Anwendung auf einem anderen Server
Führen Sie die folgende Abfrage in MYSQL Workbench aus
ALTER USER 'root' @ '%' IDENTIFIZIERT MIT mysql_native_password BY 'password'
quelle
Für vorhandene MySQL 8.0-Installationen unter Windows 10 MySQL,
(1) Installer starten,
(2) Klicken Sie dann unter QuickAction (links von MySQL Server) auf "Neu konfigurieren"
(3) Klicken Sie auf Weiter, um bis zur Ankunft durch die nächsten 2 Bildschirme zu blättern
(4) Wählen Sie unter "Authentifizierungsmethode" die Option "Legacy-Authentifizierungsmethode verwenden (MySQL 5.x-Kompatibilität beibehalten").
(5) Klicken Sie weiter, bis die Installation abgeschlossen ist
quelle
Bei MySQL 8+ ist die neue Standardauthentifizierung
caching_sha2_password
anstelle vonmysql_native_password
. Die neue und sicherere Authentifizierungsmethode wird vom nativenmysql
Paket noch nicht unterstützt. Sie sollten jedoch in Betracht ziehen, stattdessen das Paket zu@mysql/xdevapi
verwenden, das von Oracle offiziell unterstützt und verwaltet wird.Führen Sie Folgendes aus, um das neue Paket zu installieren:
So stellen Sie eine Verbindung zur Datenbank her und fügen einige Werte ein:
Die offizielle Paketdokumentation finden Sie hier: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
quelle
Wenn Sie Docker verwenden, hat es bei mir funktioniert!
in der
docker-compose.yml
die folgenden Zeilen:danach
down
der Container undup
wieder.quelle
Zusätzlich zu den obigen Antworten; Nach dem Ausführen des folgenden Befehls
Wenn Sie eine Fehlermeldung erhalten als:
Versuchen Sie es dann im cmd als admin; Legen Sie den Pfad zum Ordner "MySQL Server bin" im cmd fest
Führen Sie dann den folgenden Befehl aus:
Dies sollte den Server und die Systemtabellen aktualisieren.
Dann sollten Sie in der Lage sein, die folgenden Befehle in einer Abfrage in der Workbench erfolgreich auszuführen:
Denken Sie dann daran, den folgenden Befehl auszuführen:
Nach all diesen Schritten sollte es möglich sein, eine Verbindung zu Ihrer MySQL-Datenbank herzustellen. Hoffe das hilft...
quelle
Führen Sie einfach MySQL Server Installer aus und konfigurieren Sie My SQL Server neu ... Dies hat bei mir funktioniert.
quelle
Überprüfen Sie die Berechtigungen und den Benutzernamen / das Kennwort für Ihren MySQL-Benutzer.
Zum Abfangen von Fehlern ist es immer nützlich, eine überschriebene
_delegateError
Methode zu verwenden. In Ihrem Fall muss dies so aussehen:Diese Konstruktion hilft Ihnen, schwerwiegende Fehler zu verfolgen.
quelle
Ich habe das gerade herausgefunden, nachdem ich zahlreiche Dinge ausprobiert hatte. Was es schließlich für mich getan hat, war das Hinzufügen
require('dotenv').config()
zu meiner.sequelizerc
Datei. Anscheinend liest sequelize-cli keine env-Variablen.quelle
Down Grading ist möglicherweise keine gute Option, da:
Sie können das
mysql2
Paket anstelle von verwendenmysql
. Es ist größtenteils API-kompatibel mit mysqljs. Auch verspricht es Unterstützung.Verwenden Sie es wie:
const mysql = require('mysql2/promise')
Weitere Informationen finden Sie
mysql2
hier: https://www.npmjs.com/package/mysql2Ich hoffe es hilft. :) :)
quelle
Sie können ORM, Builder usw. überspringen und Ihre DB / SQL-Verwaltung mit
sqler
und vereinfachensqler-mdb
.quelle
Ich habe das gleiche Problem mit MySQL und löse es, indem ich XAMPP verwende, um eine Verbindung mit MySQL herzustellen und die Dienste in Windows für MySQL (Systemsteuerung - Verwaltung - Dienste) und im Ordner db.js (der für die Datenbank verantwortlich ist) I zu stoppen mach das Passwort leer (hier siehst du :)
quelle