Veel voorkomende fouten tijdens of na de migratie naar Azure Database for MySQL

VAN TOEPASSING OP: Azure Database for MySQL - Single Server Azure Database for MySQL - Flexible Server

Azure Database for MySQL is een volledig beheerde service die wordt ondersteund door de communityversie van MySQL. De MySQL-ervaring in een beheerde service-omgeving kan afwijken van het uitvoeren van MySQL in uw eigen omgeving. In dit artikel ziet u enkele veelvoorkomende fouten die gebruikers kunnen tegenkomen tijdens het migreren naar of ontwikkelen op Azure Database for MySQL voor de eerste keer.

Veelvoorkomende verbindingsfouten

FOUT 1184 (08S01): Verbinding 22 met db afgebroken: 'db-name'-gebruiker: 'user'host: 'hostIP' (init_connect-opdracht mislukt)

De bovenstaande fout treedt op na een geslaagde aanmelding, maar voordat een opdracht wordt uitgevoerd wanneer de sessie tot stand is gebracht. Het bovenstaande bericht geeft aan dat u een onjuiste waarde van de serverparameter hebt ingesteld, waardoor de init_connect initialisatie van de sessie mislukt.

Er zijn enkele serverparameters zoals die niet worden ondersteund op sessieniveau. Als u probeert de waarden van deze parameters te wijzigen met behulp van, kan dit resulteren in fout 1184 tijdens het maken van verbinding met de require_secure_transport init_connect MySQL-server, zoals hieronder wordt weergegeven:

mysql> databases; FOUT 2006 (HY000): MySQL-server is verdwenen Geen verbinding. Opnieuw verbinding proberen te maken... Verbindings-id: 64897 Huidige database: *** GEEN *** FOUT 1184 (08S01): Afgebroken verbinding 22 naar db: 'db-name'-gebruiker: 'gebruiker'-host: 'hostIP' (init_connect opdracht mislukt)

Oplossing: stel de waarde opnieuw in op het tabblad Serverparameters in Azure Portal en stel alleen de ondersteunde init_connect serverparameters in init_connect parameter.

Fouten vanwege ontbreken van SUPER-machtiging en DBA-rol

De SUPER-bevoegdheid en DBA-rol worden niet ondersteund in de service. Als gevolg hiervan kunt u een aantal veelvoorkomende fouten tegenkomen die hieronder worden vermeld:

ERROR 1419: You do not have the SUPER privilege and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

De bovenstaande fout kan optreden bij het maken van een functie of trigger als hieronder of het importeren van een schema. DDL-instructies als CREATE FUNCTION en CREATE TRIGGER worden naar het binaire logboek geschreven, zodat de secundaire replica deze kan uitvoeren. De SQL-replicathread heeft volledige bevoegdheid, die kan worden gebruikt om machtigingen uit te breiden. Ter bescherming tegen dit gevaar voor servers waarop binaire logboekregistratie is ingeschakeld, vereist de MySQL-engine dat opgeslagen functiemakers de bevoegdheid SUPER hebben, naast de gebruikelijke bevoegdheid CREATE ROUTINE.

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

Oplossing: als u de fout wilt oplossen, stelt u in op 1 op de blade serverparameters in de portal, voert u de DDL-instructies uit of importeert u het schema om de log_bin_trust_function_creators gewenste objecten te maken. U kunt de server log_bin_trust_function_creators op 1 blijven houden om de fout in de toekomst te voorkomen. Het wordt aanbevolen om in te stellen dat het beveiligingsrisico dat is gemarkeerd in de log_bin_trust_function_creators MySQL-communitydocumentatie minimaal is in Azure Database for MySQL omdat bin-logboeken niet worden blootgesteld aan bedreigingen.

ERROR 1227 (42000) at line 101: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. Operation failed with exitcode 1

De bovenstaande fout kan optreden bij het importeren van een dump-bestand of het maken van een procedure met definities.

Oplossing: Om deze fout op te lossen, kan de gebruiker met beheerdersrechten machtigingen verlenen om procedures te maken of uit te voeren door de opdracht GRANT uit te voeren, zoals in de volgende voorbeelden:

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

U kunt ook de definities vervangen door de naam van de gebruiker met beheerdersrechten die het importproces gebruikt, zoals hieronder wordt weergegeven.

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

/* Modified to */

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

ERROR 1227 (42000) at line 295: Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation

De bovenstaande fout kan optreden tijdens het uitvoeren van CREATE VIEW met DEFINER-instructies, als onderdeel van het importeren van een dumpbestand of het uitvoeren van een script. Azure Database for MySQL geen SUPER-bevoegdheden of de toegangsrechten SET_USER_ID gebruikers toe.

Oplossing:

  • Gebruik, indien mogelijk, de gebruiker van de definities om CREATE VIEW uit te voeren. Waarschijnlijk zijn er veel weergaven met verschillende definities met verschillende machtigingen, dus dit is mogelijk niet haalbaar. OF
  • Bewerk het dumpbestand of CREATE VIEW-script, en verwijder de instructie DEFINER= uit het dumpbestand OF
  • Bewerk het dumpbestand of CREATE VIEW-script en vervang de definitiewaarden door de gebruiker met beheerdersmachtigingen die het scriptbestand importeert of uitvoert.

Tip

Gebruik sed of perl om een dumpbestand of SQL-script te wijzigen, om de instructie DEFINE= te vervangen

FOUT 1227 (42000) op regel 18: Toegang geweigerd; u (ten minste één van) de SUPER-bevoegdheden nodig hebt voor deze bewerking

De bovenstaande fout kan optreden als u probeert het dumpbestand te importeren van mySQL-server met GTID ingeschakeld op de doelserver Azure Database for MySQL server. Mysqldump voegt de instructie SET @ =0 toe aan een dumpbestand van een server waarop GTID's worden gebruikt, waardoor binaire logboekregistratie wordt uitgeschakeld terwijl het dumpbestand opnieuw wordt @SESSION.sql_log_bin geladen.

Oplossing: als u deze fout wilt oplossen tijdens het importeren, verwijdert of maakt u commentaar van de onderstaande regels in uw mysqldump-bestand en moet u opnieuw importeren uitvoeren om te controleren of het importeren is gelukt.

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

Veelvoorkomende verbindingsfouten bij aanmelden van serverbeheerder

Wanneer een Azure Database for MySQL server wordt gemaakt, wordt er tijdens het maken van de server een aanmelding door de serverbeheerder verstrekt door de eindgebruiker. Met de aanmeldingsgegevens van de serverbeheerder kunt u nieuwe databases maken, nieuwe gebruikers toevoegen en machtigingen verlenen. Als de aanmelding van de serverbeheerder wordt verwijderd, de machtigingen worden ingetrokken of het wachtwoord ervan wordt gewijzigd, kunnen er verbindingsfouten in uw toepassing optreden tijdens verbindingen. Hieronder ziet u enkele veelvoorkomende fouten

ERROR 1045 (28000): Access denied for user 'username'@'IP address' (using password: YES)

De bovenstaande fout treedt op als:

  • De gebruikersnaam bestaat niet.
  • De gebruikersnaam van de gebruiker is verwijderd.
  • Het bijbehorende wachtwoord is gewijzigd of opnieuw is ingesteld.

Oplossing:

  • Valideer of 'gebruikersnaam' bestaat als een geldige gebruiker op de server, of dat deze per ongeluk is verwijderd. U kunt de volgende query uitvoeren door u aan te melden bij de Azure Database for MySQL-gebruiker:

    select user from mysql.user;
    
  • Als u zich niet kunt aanmelden bij mySQL om de bovenstaande query zelf uit te voeren, raden we u aan het beheerderswachtwoord opnieuw in te stellen met behulp van Azure Portal. Met de optie Wachtwoord opnieuw instellen van Azure Portal kunt u de gebruiker opnieuw maken, het wachtwoord opnieuw instellen en de beheerdersmachtigingen herstellen, zodat u zich kunt aanmelden met de serverbeheerder en verdere bewerkingen kunt uitvoeren.

Volgende stappen

Als u het antwoord dat u zoekt niet hebt gevonden, kunt u de volgende opties overwegen: