Auf dieser Seite werden bekannte Probleme und Inkompatibilitäten beschrieben, die nach einem Upgrade der Hauptversion von Cloud SQL for MySQL 5.7 auf Cloud SQL for MySQL 8.0 auftreten können.
Weitere Informationen zum Upgrade der Hauptversion finden Sie unter Direkte Datenbankaktualisierung durchführen. Weitere Informationen zu Fehlerlogs finden Sie unter Fehlerlogs ansehen.
Leistungsprobleme
In den folgenden Abschnitten werden bekannte Leistungsprobleme behandelt.
Probleme mit der Anfrage SELECT DISTINCT
Wenn Sie die SELECT DISTINCT-Abfrage in MySQL 8.0.18 bis MySQL 8.0.20 verwenden, kann es zu Leistungseinbußen kommen. Die Ausführungszeiten von Abfragen können im Vergleich zu MySQL 5.7 dreimal so lange dauern.
Weitere Informationen finden Sie unter MySQL-Fehler 99593.
Führen Sie die folgenden Empfehlungen zur Problembehebung aus, um das Problem zu beheben:
- Aktualisieren Sie auf MySQL 8.0.21, eine beliebige Nebenversion danach oder die neueste Version.
- Wenn Sie MySQL 8.0.18 bis MySQL 8.0.20 verwenden, aktualisieren Sie den Wert für das Datenbankflag
internal_tmp_mem_storage_engineaufmemory:SET SESSION internal_tmp_mem_storage_engine='memory' ;
Probleme mit GROUP BY-Anfragen
Wenn Sie SELECT... GROUP BY-Abfragen in MySQL 8.0.36 oder früher verwenden, kann es zu einer geringeren Leistung und längeren Abfrageausführungszeiten kommen.
Dies kann passieren, wenn in der Abfrage die TempTable-Engine verwendet wird.
Weitere Informationen finden Sie unter MySQL-Fehler 107700.
Führen Sie die folgenden Empfehlungen zur Problembehebung aus, um das Problem zu beheben:
- Aktualisieren Sie auf MySQL 8.0.37, eine beliebige Nebenversion danach oder die neueste Version.
- Wenn Sie MySQL 8.0.36 oder früher verwenden, aktualisieren Sie das Datenbankflag
internal_tmp_mem_storage_engine, damit die Memory-Engine anstelle der temporären Tabellen-Engine verwendet wird:SET SESSION internal_tmp_mem_storage_engine='memory' ;
Probleme bei Threads mit geringer Nebenläufigkeit
Bei Instanzen, die in MySQL 8.0.22 oder höher erstellt wurden und Clientanwendungen mit Threads mit geringer Parallelität unterstützen, kann es zu Leistungsproblemen und längeren Ausführungszeiten für Abfragen kommen.
In MySQL 8.0.22 wurde das Flag innodb_log_writer_threads eingeführt, um die Leistung in Systemen mit hoher Parallelität zu verbessern. Dieses Flag ist standardmäßig aktiviert. Wenn Sie Instanzen in MySQL 8.0.22 oder höher haben, die Clientanwendungen mit Threads mit niedriger Nebenläufigkeit unterstützen, empfehlen wir, das innodb_log_writer_threads-Flag zu deaktivieren.
Weitere Informationen finden Sie unter MySQL-Fehler 93734.
Probleme mit JOINS
Wenn Sie JOIN-Abfragen mit der Ansicht eq_ref in Instanzen mit MySQL 8.0.29 bis MySQL 8.0.32 verwenden, kann es zu erheblichen Leistungsproblemen kommen.
Weitere Informationen finden Sie unter MySQL-Fehler 109361.
Aktualisieren Sie auf MySQL 8.0.33, eine beliebige Nebenversion danach oder die aktuelle Version, um dieses Problem zu beheben.
Probleme mit der Klausel LIMIT und ORDER BY
Wenn Sie eine Abfrage mit den Klauseln LIMIT und ORDER BY in MySQL 8.0.32 oder früher ausführen, kann es zu Leistungsproblemen kommen. In einigen Fällen wird in MySQL 8.0 im Vergleich zu MySQL 5.7 für dieselbe Abfrage ein anderer Abfrageplan verwendet.
Weitere Informationen finden Sie unter Änderungen in MySQL 8.0.33.
Aktualisieren Sie auf MySQL 8.0.33, eine beliebige Nebenversion danach oder die aktuelle Version, um dieses Problem zu beheben.
Probleme mit Speicherlecks in MySQL 8.0
In den folgenden Abschnitten werden bekannte Probleme mit Speicherlecks in MySQL 8.0 oder höher behandelt. Diese Probleme wirken sich wahrscheinlich auch auf die Instanzleistung aus.
Speicherleck durch Bereichsabfragen
Wenn Sie den Bereichsoptimierer in Instanzen mit MySQL 8.0.16 bis MySQL 8.0.28 verwenden, kann es zu einem hohen Arbeitsspeicherverbrauch durch die Codedatei und Funktion memory/sql/THD::main_mem_root kommen. Dies kann dazu führen, dass der Arbeitsspeicher der Instanz nicht mehr ausreicht.
Weitere Informationen finden Sie unter MySQL-Fehler 105331.
Aktualisieren Sie zur Behebung dieses Problems auf MySQL 8.0.29, eine beliebige Nebenversion danach oder die aktuelle Version.
Arbeitsspeicherleck im Zusammenhang mit gespeicherten Prozeduren
Wenn Sie eine Abfrage in einem gespeicherten Verfahren in Instanzen mit MySQL 8.0.27 bis 8.0.31 ausführen, kann die Abfrage unter der Codedatei und Funktion memory/sql/sp_head::execute_mem_root sehr viel Arbeitsspeicher belegen.
Weitere Informationen finden Sie unter MySQL-Fehler 107327.
Aktualisieren Sie auf MySQL 8.0.32, eine beliebige Nebenversion danach oder die aktuelle Version, um dieses Problem zu beheben.
Speicherleck durch Zugriff auf eine Ansicht mit SELECT
Wenn Sie die SELECT-Abfrage in MySQL 8.0.35 oder früher verwenden und Ihre Anwendung zahlreiche Ansichtsaufrufe nutzt, kann es zu einem erheblichen Speicherleck kommen.
Wenn die DEFINER-Ansicht auf root@'%' festgelegt ist oder ein Nutzer, der von der Rolle cloudsqlsuperuser abgeleitet wurde, die App verwendet, kann es zu einem Speicherleck kommen. Das liegt daran, dass die Rolle cloudsqlsuperuser teilweise Widerrufsberechtigungen hat.
Weitere Informationen finden Sie unter MySQL-Fehler 103133.
Führen Sie die folgenden Empfehlungen zur Problembehebung aus, um das Problem zu beheben:
- Aktualisieren Sie auf MySQL 8.0.36, eine beliebige Nebenversion danach oder die neueste Version.
- Wenn Sie MySQL 8.0.35 oder eine frühere Version verwenden, sollten Sie einen separaten Nutzer für die
DEFINER-Ansicht verwenden, insbesondere einen Nutzer, der keine Berechtigungen zum teilweisen Aufheben hat. Wenn Sie den Nutzerroot@'%'oder die Rollecloudsqlsuperuserverwenden müssen, achten Sie darauf, dass Sie diese nur für administrative Prozesse und nicht für Anwendungsanfragen verwenden. Wenn das Speicherleck weiterhin besteht, müssen Sie ein Upgrade auf MySQL 8.0.36, eine beliebige Nebenversion danach oder die aktuelle Version durchführen.
Probleme bei der Replikation
Im folgenden Abschnitt werden bekannte Probleme im Zusammenhang mit der Replikation behandelt.
Probleme mit der parallelen Replikation
Wenn Sie die parallele Replikation in einem Multithread-Replikat verwenden, in dem die slave_preserve_commit_order-Komponente aktiviert ist und die Instanz für Arbeitslasten mit vielen Schreibvorgängen verwendet wird, können Instanzvorgänge aufgrund eines Deadlocks und einer sich ansammelnden Replikationsverzögerung auf unbestimmte Zeit pausieren.
Dieses Problem tritt in MySQL 8.0.27 bis MySQL 8.0.32 auf.
Weitere Informationen finden Sie unter MySQL-Fehler 95863 und MySQL-Fehler 103636.
Führen Sie die folgenden Empfehlungen zur Problembehebung aus, um das Problem zu beheben:
- Aktualisieren Sie auf MySQL 8.0.33, eine beliebige Nebenversion danach oder die neueste Version.
- Deaktivieren Sie die parallele Replikation, um die Ursache des Problems zu ermitteln, und planen Sie dann ein geeignetes Upgrade. Das Deaktivieren der parallelen Replikation kann das Problem zwar vorübergehend beheben, wird aber nicht als langfristige Lösung empfohlen.
Probleme mit Berechtigungen
In den folgenden Abschnitten werden bekannte Probleme im Zusammenhang mit Berechtigungen behandelt.
Änderungen an Berechtigungen
MySQL hat die Sicherheits- und Kontoverwaltungssysteme in MySQL 8.0 geändert.
Nach dem Upgrade auf MySQL 8.0 haben Nutzer, die in MySQL 5.7 erstellt wurden, möglicherweise nicht dieselben Berechtigungen und denselben Zugriff wie Nutzer, die in MySQL 8.0 erstellt wurden. Daher erhalten Nutzer, die in MySQL 5.7 erstellt wurden, in den folgenden Szenarien möglicherweise eine Fehlermeldung „Zugriff verweigert“:
- Nutzer, die von MySQL 5.7 aktualisiert wurden, haben möglicherweise nicht die Berechtigungen
CREATE ROLEundDROP ROLE, da diese Berechtigungen in MySQL 5.7 nicht vorhanden waren. - Nutzer, die von MySQL 5.7 aktualisiert wurden, können möglicherweise den Befehl
KILLnicht ausführen, da dafür in MySQL 8.0 die BerechtigungCONNECTION_ADMINerforderlich ist.
Weitere Informationen finden Sie unter In MySQL 8.0 verfügbare Berechtigungen.
Eine Beispiel-Fehlermeldung sieht etwa so aus:
ERROR 1227 (42000): Access denied; you need (at least one of) the GRANT OPTION privilege(s) for this operation
Sie können einem vorhandenen Nutzer keine dieser aktualisierten Berechtigungen direkt zuweisen.
Zur Behebung dieses Problems sollte ein Administrator mit den Berechtigungen GRANT OPTION die Nutzerberechtigungen nach dem Upgrade zurücksetzen, um das Upgrade der Hauptversion abzuschließen.
Weitere Informationen finden Sie unter Direkte Datenbankaktualisierung durchführen.
Änderungen an Berechtigungen führen zu Fehler „Zugriff verweigert“
Nutzer, die in MySQL 5.7 erstellt und auf MySQL 8.0 aktualisiert wurden, können sich möglicherweise aufgrund eines Berechtigungsproblems nicht mit der Datenbank verbinden. In solchen Fällen erhalten Nutzer möglicherweise die folgende Fehlermeldung:
Access denied for user 'USER_NAME'@'%' to database 'MY_DATABASE_NAME' ;
In MySQL 8.0.16 wurde das Datenbank-Flag partial_revokes eingeführt und standardmäßig aktiviert. Dadurch ist es möglich, Nutzerberechtigungen teilweise zu entziehen.
Wenn Nutzer, die in MySQL 5.7 erstellt wurden, mit Platzhalterzeichen definiert wurden, können sie möglicherweise keine Verbindung zur Datenbank herstellen. Platzhalterzeichen werden in MySQL 8.0.16 oder höher nicht mehr unterstützt. Das bedeutet, dass MySQL keine genaue Übereinstimmung für die Datenbank und den Nutzer finden kann. Dadurch werden möglicherweise einige vorhandene Berechtigungszuweisungen beim Upgrade nicht berücksichtigt.
Dieses Problem betrifft MySQL 8.0.16 oder höher.
Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren und Sicherheit und Kontoverwaltung.
Um dieses Problem zu beheben, muss ein Administrator Nutzern in MySQL 8.0 Berechtigungen manuell zuweisen.
Änderungen bei Flag-Werten zwischen MySQL 5.7 und MySQL 8.0
Wenn Sie ein Upgrade von MySQL 5.7 auf MySQL 8.0 durchführen, können sich einige Datenbankflag-Werte aufgrund einer Änderung der Standardwerte zwischen den Versionen ändern. Dieses Verhalten kann zu Leistungsproblemen führen.
Weitere Informationen finden Sie unter Neue Standardwerte in MySQL 8.0.
Prüfen Sie zur Behebung dieses Problems, ob manuell zugewiesene Datenbankflag-Werte, die in MySQL 5.7 festgelegt wurden, auch nach dem Upgrade auf MySQL 8.0 oder höher angewendet werden. Wir empfehlen, die Standardwerte für die System-Flags beizubehalten.
Nächste Schritte
- Upgrade der Datenbankhauptversion durch Migration von Daten ausführen
- Upgrade der Datenbanknebenversion ausführen