Behandeln von Fehlern, die häufig während oder nach der Migration zu Azure-Datenbank für MySQL aufgetreten sind – flexibler Server

GILT FÜR: Azure Database for MySQL – Single Server Azure Database for MySQL – Flexible Server

Wichtig

Azure Database for MySQL single server is on the retirement path. Es wird dringend empfohlen, ein Upgrade auf azure Database for MySQL flexiblen Server durchzuführen. Weitere Informationen zum Migrieren zu Azure Database for MySQL flexible Server finden Sie unter Was geschieht mit Azure Database for MySQL Single Server?

Azure Database for MySQL flexible Server ist ein vollständig verwalteter Dienst, der von der Communityversion von MySQL unterstützt wird. Die MySQL-Umgebung in einer verwalteten Dienstumgebung kann sich von der MySQL-Ausführung in Ihrer eigenen Umgebung unterscheiden. In diesem Artikel werden einige der häufig auftretenden Fehler angezeigt, die benutzer beim erstmaligen Migrieren zu oder entwickeln auf azure Database for MySQL flexiblen Server auftreten können.

Allgemeine Verbindungsfehler

FEHLER 1184 (08S01): Aborted connection 22 to db: 'db-name' user: 'user' host: 'hostIP' (init_connect command failed) (Verbindung 22 mit DB "" abgebrochen. Benutzer: , Host: . (Fehler beim Befehl "init_connect".))

Der obige Fehler tritt nach erfolgreicher Anmeldung, aber vor Ausführung eines Befehls nach Einrichtung der Sitzung auf. Die obige Meldung gibt an, dass ein falscher Wert für den Serverparameter init_connect festgelegt wurde, was dazu führt, dass die Sitzung nicht erfolgreich initialisiert werden kann.

Es gibt einige Serverparameter, z require_secure_transport . B. die auf Sitzungsebene nicht unterstützt werden. Daher kann der Versuch, die Werte dieser Parameter init_connect zu ändern, fehler 1184 beim Herstellen einer Verbindung mit der azure-Datenbank für mySQL flexible Serverinstanz wie unten gezeigt zu ändern:

mysql> zeigt Datenbanken; FEHLER 2006 (HY000): MySQL-Server hat keine Verbindung mehr hergestellt. Versuch, die Verbindung wiederherzustellen ... Verbindungs-ID: 64897 Aktuelle Datenbank: *** KEINE *** FEHLER 1184 (08S01): Verbindung 22 zu Datenbank abgebrochen: 'Datenbankname' Benutzer: 'Benutzer' Host: 'hostIP' (Befehl init_connect fehlgeschlagen)

Lösung: Setzen Sie den Wert von init_connect im Azure-Portal auf der Registerkarte „Serverparameter“ zurück, und legen Sie mit init_connect nur unterstützte Serverparameter fest.

Fehler aufgrund fehlender SUPER-Berechtigung und DBA-Rolle

Die Berechtigung SUPER und die Rolle DBA werden für den Dienst nicht unterstützt. Folglich können allgemeine Fehler wie die folgenden auftreten:

FEHLER 1419: Sie verfügen nicht über die SUPER-Berechtigung, und die binäre Protokollierung ist aktiviert (es kann ratsam sein, die weniger sichere Variable „log_bin_trust_function_creators“ zu verwenden).

Der obige Fehler kann auftreten, wenn Sie eine Funktion erstellen, etwas wie unten beschrieben auslösen oder ein Schema importieren. Die DDL-Anweisungen wie „CREATE FUNCTION“ oder „CREATE TRIGGER“ werden in das binäre Protokoll geschrieben, sodass sie vom sekundären Replikat ausgeführt werden können. Der SQL-Replikatthread verfügt über vollständige Berechtigungen, die ausgenutzt werden können, um Berechtigungen zu erhöhen. Um Server mit aktivierter binärer Protokollierung vor dieser Gefahr zu schützen, erfordert die MySQL-Engine, dass Ersteller gespeicherter Funktionen neben der üblichen erforderlichen Berechtigung CREATE ROUTINE auch über die Berechtigung SUPER verfügen.

CREATE FUNCTION f1(i INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
  RETURN i;
END;

Lösung: Legen Sie log_bin_trust_function_creators auf dem Blatt Serverparameter des Portals auf 1 fest, führen Sie die DDL-Anweisungen aus, oder importieren Sie das Schema, um die gewünschten Objekte zu erstellen. Sie können log_bin_trust_function_creators für Ihren Server auf 1 festgelegt lassen, um den Fehler in Zukunft zu vermeiden. Unsere Empfehlung besteht darin, das in der MySQL-Communitydokumentation hervorgehobene Sicherheitsrisiko in der Azure-Datenbank für MySQL flexiblen Server minimal festzulegenlog_bin_trust_function_creators, da das Bin-Protokoll keine Bedrohungen ausgesetzt ist.

FEHLER 1227 (42000) in Zeile 101: Zugriff verweigert. Für diesen Vorgang benötigen Sie (mindestens) eine SUPER-Berechtigung. Fehler für Vorgang mit Exitcode 1

Der obige Fehler kann auftreten, wenn Sie eine Dumpdatei importieren oder eine Prozedur erstellen, die Elemente vom Typ DEFINER enthält.

Lösung: Zur Behebung dieses Fehlers kann der Administratorbenutzer durch Ausführen eines GRANT-Befehls Berechtigungen zum Erstellen oder Ausführen von Prozeduren erteilen, wie in den folgenden Beispielen gezeigt:

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

Alternativ können Sie die DEFINER-Elemente durch den Namen des Administratorbenutzers ersetzen, der den Importvorgang ausführt, wie hier zu sehen.

DELIMITER;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`127.0.0.1`*/ /*!50003
DELIMITER;;

/* Modified to */

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`AdminUserName`@`ServerName`*/ /*!50003
DELIMITER ;

FEHLER 1227 (42000) in Zeile 295: Zugriff verweigert. Für diesen Vorgang benötigen Sie (mindestens) eine SUPER- oder SET_USER_ID-Berechtigung.

Der obige Fehler kann beim Ausführen von CREATE VIEW mit DEFINER-Anweisungen im Rahmen des Imports einer Dumpdatei oder der Ausführung eines Skripts auftreten. Azure Database for MySQL flexible Server erlaubt keine SUPER-Berechtigungen oder die SET_USER_ID Berechtigungen für jeden Benutzer.

Lösung:

  • Verwenden Sie, sofern möglich, den DEFINER-Benutzer, um CREATE VIEW auszuführen. Wahrscheinlich gibt es viele Ansichten mit unterschiedlichen DEFINER-Elementen und unterschiedlichen Berechtigungen, sodass dieser Vorgang ggf. nicht möglich ist. oder
  • Bearbeiten Sie die Dumpdatei oder das CREATE VIEW-Skript, und entfernen Sie die DEFINER=-Anweisung aus der Dumpdatei. oder
  • Bearbeiten Sie die Dumpdatei oder das CREATE VIEW-Skript, und ersetzen Sie die DEFINER-Werte durch einen Benutzer mit Administratorberechtigungen, der den Import vornimmt oder die Skriptdatei ausführt.

Tipp

Verwenden Sie „sed“ oder „perl“ zum Ändern einer Dumpdatei oder eines SQL-Skripts und zum Ersetzen der DEFINER=-Anweisung.

FEHLER 1227 (42000) in Zeile 18: Zugriff verweigert. Für diesen Vorgang benötigen Sie (mindestens) eine SUPER-Berechtigung.

Der obige Fehler kann auftreten, wenn Sie versuchen, die Speicherabbilddatei aus einer flexiblen Azure-Serverinstanz für MySQL zu importieren, wobei GTID für die Azure-Zieldatenbank für die flexible Serverinstanz von MySQL aktiviert ist. Mysqldump fügt einer Dumpdatei von einem Server, auf dem GTIDs verwendet werden, die Anweisung „SET @@SESSION.sql_log_bin=0“ hinzu. Dadurch wird beim erneuten Laden der Dumpdatei die binäre Protokollierung deaktiviert.

Lösung: Um diesen Fehler beim Importieren zu beheben, entfernen Sie die unten aufgeführten Zeilen in der mysqldump-Datei, oder kommentieren Sie sie aus. Führen Sie anschließend den Import erneut aus, um sicherzustellen, dass er erfolgreich war.

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

Häufige Verbindungsfehler bei der Serveradministratoranmeldung

Wenn eine flexible Serverinstanz von Azure Database für MySQL erstellt wird, wird während der Servererstellung eine Serveradministratoranmeldung vom Endbenutzer bereitgestellt. Mit der Serveradministratoranmeldung können Sie neue Datenbanken erstellen, neue Benutzer hinzufügen und Berechtigungen erteilen. Werden die Serveradministratoranmeldung gelöscht, die zugehörigen Berechtigungen widerrufen oder das Kennwort geändert, werden beim Herstellen von Verbindungen möglicherweise Verbindungsfehler in Ihrer Anwendung angezeigt. Im Folgenden finden Sie einige der häufig auftretenden Fehler.

FEHLER 1045 (28000): Der Zugriff auf den Benutzer „Benutzername“@„IP-Adresse“ (mit Kennwort: JA) wurde verweigert

Der obige Fehler tritt bei folgenden Bedingungen auf:

  • Der Benutzername ist nicht vorhanden.
  • Der Benutzername wurde gelöscht.
  • Das Kennwort wurde geändert oder zurückgesetzt

Lösung:

  • Überprüfen Sie, ob „Benutzername“ als gültiger Benutzer auf dem Server vorhanden ist oder versehentlich gelöscht wurde. Sie können die folgende Abfrage ausführen, indem Sie sich bei der Azure-Datenbank für den flexiblen MySQL-Serverbenutzer anmelden:

    select user from mysql.user;
    
  • Wenn Sie sich nicht bei der flexiblen Azure-Datenbank für MySQL-Serverinstanz anmelden können, um die oben genannte Abfrage selbst auszuführen, empfehlen wir Ihnen, das Administratorkennwort mithilfe von Azure-Portal zurückzusetzen. Mithilfe der Option „Kennwort zurücksetzen“ im Azure-Portal können Sie den Benutzer erneut erstellen, das Kennwort zurücksetzen und die Administratorberechtigungen wiederherstellen. Dadurch können Sie sich als Serveradministrator anmelden und weitere Vorgänge ausführen.

Nächste Schritte

Wenn Sie die gesuchte Antwort nicht gefunden haben, ziehen Sie die folgenden Optionen in Betracht: