Freigeben über


Problembehandlung von häufig während oder nach der Migration zu Azure Database for MySQL - Flexibler Server auftretenden Fehlern

Azure Database for MySQL - Flexibler Server ist ein vollständig verwalteter Dienst, der auf der Communityversion von MySQL basiert. Die MySQL-Umgebung in einer verwalteten Dienstumgebung unterscheidet sich möglicherweise von der MySQL-Ausführung in Ihrer eigenen Umgebung. In diesem Artikel finden Sie einige der häufigsten Fehler, auf die Benutzern bei der erstmaligen Migration zu oder der Entwicklung auf Azure Database for MySQL – Flexibler Server treffen 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 wie etwa require_secure_transport, die auf Sitzungsebene nicht unterstützt werden. Daher kann der Versuch, die Werte dieser Parameter mithilfe von init_connect zu ändern, bei der Verbindungsherstellung mit der Azure Database for MySQL - Flexible Serverinstanz zum Fehler 1184 führen:

mysql> zeigt Datenbanken; FEHLER 2006 (HY000): MySQL-Server hat keine Verbindung mehr hergestellt. Trying to reconnect... Verbindungs-ID: 64897 Aktuelle Datenbank: ** KEINE ** FEHLER 1184 (08S01): Verbindung 22 zur Datenbank: „db-name“ Benutzer: „user“ Host: „hostIP“ abgebrochen (Fehler beim Befehl „init_connect“)

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. Infolgedessen können allgemeine Fehler wie die unten aufgeführten auftreten:

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

Der obige Fehler kann unter Umständen 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 zum Beheben des Fehlers log_bin_trust_function_creators 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. Wir empfehlen, log_bin_trust_function_creators festzulegen. Das in der Dokumentation der MySQL Community angegebene Sicherheitsrisiko in Azure DB for MySQL - Flexibler Server ist minimal, da das binäre Protokoll keinen 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 tritt möglicherweise auf, wenn Sie eine Speicherabbilddatei 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) auf Zeile 295: Zugriff verweigert. Für diesen Vorgang benötigen Sie (mindestens eine der) SUPER- oder SET_USER_ID-Berechtigungen

Der obige Fehler kann während der Ausführung von CREATE VIEW mit DEFINER-Anweisungen im Rahmen des Imports einer Speicherabbilddatei oder der Ausführung eines Skripts auftreten. Azure Database for MySQL - Flexibler Server lässt für Benutzer weder nicht die Berechtigungen SUPER und SET_USER_ID zu.

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 eventuell 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 Instanz von Azure Database for MySQL – Flexibler Server zu importieren, wobei GTID für die Azure-Zieldatenbank für die Instanz von Azure Database for MySQL – Flexibler Server 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

Beim Erstellen einer Azure Database for MySQL - Flexibler Serverinstanz wird vom Endbenutzer bei der Servererstellung eine Serveradministratoranmeldung 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, dann werden beim Herstellen von Verbindungen möglicherweise Verbindungsfehler in Ihrer Anwendung angezeigt. Im Folgenden finden Sie einige häufige 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 beim Azure Database for MySQL - Flexibler Serverbenutzer anmelden:

    select user from mysql.user;