Detaillierte Erklärung der Fallstricke von MySQL 8.0

Detaillierte Erklärung der Fallstricke von MySQL 8.0

Ich habe heute MySQL 8.0 aktualisiert.

Das erste Problem: Navicat kann keine Verbindung zur Datenbank herstellen

Das installierte MySQL ist localhost:3306 und alle Einstellungen sind Standard. Öffnen Sie nach der Installation Navicat 12, um eine neue Verbindung herzustellen und einen Fehler direkt zu melden

Authentifizierungs-Plugin „caching_sha2_password“

Das Authentifizierungs-Plugin konnte nicht geladen werden

Überprüfte das offizielle Dokument 6.5.1.3 Caching SHA-2 Pluggable Authentication

Es stellt sich heraus, dass in MySQL 8.0 caching_sha2_password mysql_native_password als Standardauthentifizierungs-Plugin ersetzt hat. Die offizielle Lösung lautet wie folgt

1. Konfigurieren Sie den Server neu, um zum vorherigen Standard-Authentifizierungs-Plugin (mysql_native_password) zurückzukehren.

[mysqld]
default_authentication_plugin=mysql_native_password

Mit dieser Einstellung können Clients mit einer Version vor 8.0 eine Verbindung zu 8.0-Servern herstellen. Allerdings sollte diese Einstellung eher als temporäre Einstellung denn als langfristige oder dauerhafte Lösung betrachtet werden, da bei neuen Konten, die mit dieser effektiven Einstellung erstellt werden, die verbesserte Authentifizierungssicherheit durch caching_sha2_password nicht mehr zur Verfügung steht.

2. Ändern Sie die Authentifizierungsmethode des Root-Administratorkontos in mysql_native_password.

Bei neuen MySQL 8.0-Installationen wird das Konto „root“@„localhost“ erstellt, wenn das Datenverzeichnis initialisiert wird, und dieses Konto verwendet standardmäßig caching_sha2_password. Stellen Sie eine Verbindung zum Serverstamm her und ändern Sie mit ALTER USER das Kontoauthentifizierungs-Plugin und das Passwort wie folgt:

ALTER USER 'root'@'localhost'
 IDENTIFIZIERT MIT mysql_native_password
 NACH 'Passwort';

An diesem Punkt wurde das Problem des Ersetzens der standardmäßigen Identitätsüberprüfung für MySQL 8.0 behoben.

Zweite Frage: Verursacht durch: java.sql.SQLException: Unbekannter anfänglicher Zeichensatzindex „255“ …

Nachdem ich die Datenbank aktualisiert hatte, startete ich lokal ein kleines Java-Projekt, stellte eine Verbindung zur Datenbank her und führte ein Testprogramm aus, aber es wurde eine Ausnahme ausgelöst. Ich überprüfte das offizielle Dokument „Änderungen in MySQL 8.0.1“ (10.04.2017, Entwicklungsmeilenstein) und stellte fest, dass Version 8.0.1 mehrere wichtige Änderungen an der Unicode-Zeichensatzunterstützung vornahm und der Standardzeichensatz von latin1 auf utf8mb4 geändert wurde. Die Standardsystemvariablen collation_server und collocation_database dieses Systems wurden von latin1_swedish_ci in utf8mb4_0900_ai_ci geändert.

Lösung: Alle diese Änderungen wurden in der neuen Version von MySQL Connector Java berücksichtigt und es ist keine Konfiguration von MySQL erforderlich. Sie müssen also nur die MySQL-Version aktualisieren, 5.1.6 auf 5.1.44 ändern und das Problem ist perfekt gelöst.

<Abhängigkeit>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
  </Abhängigkeit>

Frage 3: Nachdem die Installation abgeschlossen ist, rufen Sie die Datenbank „show databases“ auf oder versuchen Sie, die Berechtigungen zu ändern, und es wird eine Fehlermeldung angezeigt

FEHLER 1449 (HY000): Der als Definierer angegebene Benutzer ('mysql.infoschema'@'localhost') existiert nicht
Tabelle 'mysql.role_edges' existiert nicht

Problemumgehung

mysql_upgrade -u root -p;

Frage 4: Nachdem der Client erfolgreich eine Verbindung zur Datenbank hergestellt hatte, wurde festgestellt, dass die PDO-Verbindung zu MySQL im Projekt erneut einen Fehler meldete.

Nächste PDOException: SQLSTATE[HY000] [2054] Der Server hat eine dem Client unbekannte Authentifizierungsmethode angefordert [caching_sha2_password] in /vendor/yiisoft/yii2/db/Connection.php:687

Dieser Fehler kann dadurch verursacht werden, dass MySQL als Standard-Authentifizierungs-Plugin „caching_sha2_password“ anstelle von „mysql_native_password“ verwendet, der Client dieses Plugin jedoch derzeit nicht unterstützt. Amtliche Dokumentation

In MySQL 8.0 ist caching_sha2_password das Standard-Authentifizierungs-Plugin und nicht mysql_native_password. Informationen zu den Auswirkungen dieser Änderung auf den Serverbetrieb und die Kompatibilität des Servers mit Clients und Konnektoren finden Sie unter caching_sha2_password als bevorzugtes Authentifizierungs-Plugin.

In MySQL 8.0 ist caching_sha2_password anstelle von mysql_native_password das Standardauthentifizierungs-Plugin. Informationen zu den Auswirkungen dieser Änderung auf den Serverbetrieb und die Serverkompatibilität mit Clients und Konnektoren finden Sie unter caching_sha2_password als bevorzugtes Authentifizierungs-Plugin.

Problemumgehung

Bearbeiten Sie die Datei my.cnf und ändern Sie das Standardauthentifizierungs-Plugin.

$ vi /etc/meine.cnf

Fügen Sie den folgenden Code in [mysqld] ein

default_authentication_plugin=mysql_native_password

Starten Sie dann MySQL neu

$ service mysqld neu starten

Die Website wurde schließlich normal geöffnet. . .

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Was bei der Migration von MySQL auf 8.0 zu beachten ist (Zusammenfassung)
  • Eine kurze Diskussion über die Fallstricke und Lösungen der neuen Features von MySQL 8.0 (Zusammenfassung)
  • Wie installiert und verbindet man Navicat in MySQL 8.0.20 und worauf muss man achten?
  • So beheben Sie verschiedene Fehler bei der Verwendung von JDBC zum Herstellen einer Verbindung zu Mysql 8.0.11
  • Hinweise zum passenden MySql 8.0 und entsprechenden Treiberpaketen

<<:  Mehrere Möglichkeiten zum Übergeben von Daten von übergeordneten Komponenten an untergeordnete Komponenten in Vue

>>:  Implementierung der IP-Adresskonfiguration in Centos7.5

Artikel empfehlen

Verwendung des Linux-Befehls usermod

1. Befehlseinführung Der Befehl usermod (user mod...

So vermeiden Sie die Duplizierung von Daten beim Einfügen in einen MySql-Batch

Inhaltsverzeichnis Vorwort 1. Einfügen von ignore...

Grundlegendes zur JavaScript-Prototypenkette

Inhaltsverzeichnis 1. Verständnis der Gleichheits...

Vue implementiert einfache Rechnerfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung, wie Sie den Speicherverbrauch in MySql reduzieren können

Vorwort Standardmäßig initialisiert MySQL einen g...

Einrichten der React-Native-Umgebung und grundlegende Einführung

Umgebungsvorbereitung 1. Umweltkonstruktion React...

Detaillierte Erklärung der API in Vue.js, die leicht zu übersehen ist

Inhaltsverzeichnis nächstesTick Syntaxvereinfachu...

Für die Verwendung des Docker-Befehls ist kein Sudo erforderlich

Da der Docker-Daemon an den Unix-Socket des Hosts...

So fragen Sie Bilder in einem privaten Register ab oder erhalten sie

Docker fragt Bilder in einem privaten Register ab...