Résoudre les erreurs couramment rencontrées pendant ou après la migration vers Azure Database pour MySQL - Serveur flexible

S’APPLIQUE À : Azure Database pour MySQL - Serveur unique Azure Database pour MySQL - Serveur flexible

Important

Azure Database pour MySQL serveur unique se trouve sur le chemin de mise hors service. Nous vous recommandons vivement de procéder à la mise à niveau vers Azure Database pour MySQL serveur flexible. Pour plus d’informations sur la migration vers Azure Database pour MySQL serveur flexible, consultez Ce qui se passe pour Azure Database pour MySQL serveur unique ?

Azure Database pour MySQL serveur flexible est un service entièrement géré alimenté par la version de la communauté de MySQL. L’expérience MySQL dans un environnement de service managé peut différer de l’exécution de MySQL dans votre environnement spécifique. Dans cet article, vous verrez quelques-unes des erreurs courantes que les utilisateurs peuvent rencontrer lors de la migration vers ou du développement sur Azure Database pour MySQL serveur flexible pour la première fois.

Erreurs de connexion courantes

ERREUR 1184 (08S01) : La connexion 22 à la base de connaissances a été abandonnée : 'db-name' user: 'user' host: 'hostIP' (échec de la commande init_connect)

L’erreur ci-dessus se produit après la réussite de la connexion mais avant l’exécution de toute commande quand la session est établie. Le message ci-dessus indique que vous avez affecté une valeur incorrecte au paramètre de serveur init_connect, qui provoque l’échec de l’initialisation de la session.

Il existe certains paramètres de serveur comme require_secure_transport ceux qui ne sont pas pris en charge au niveau de la session. Par conséquent, si vous essayez de modifier les valeurs de ces paramètresinit_connect, l’erreur 1184 peut entraîner l’erreur 1184 lors de la connexion à l’instance de serveur flexible Azure Database pour MySQL, comme indiqué ci-dessous :

mysql> show databases; ERREUR 2006 (HY000) : Le serveur MySQL a disparu. Aucune connexion. Tentative de reconnexion... ID de connexion : 64897 Base de données active : *** AUCUNE**_ ERREUR 1184 (08S01) : La connexion 22 à la base de connaissances a été abandonnée : 'db-name' user: 'user' host: 'hostIP' (échec de la commande init_connect)

Résolution : Réinitialisez la valeur init_connect sous l’onglet Paramètres du serveur dans le portail Azure, et définissez uniquement les paramètres de serveur pris en charge à l’aide du paramètre init_connect.

Erreurs dues à l’absence du SUPER privilège et au rôle DBA

Le SUPER privilège et le rôle DBA ne sont pas pris en charge sur ce service. Par conséquent, vous pouvez rencontrer certaines erreurs courantes listées ci-dessous :

ERREUR 1419 : Vous n’avez pas le SUPER privilège et la journalisation binaire est activée (vous pouvez utiliser la variable log_bin_trust_function_creators moins sécurisée)

L’erreur ci-dessus peut se produire lors de la création d’une fonction, d’un déclencheur comme ci-dessous ou de l’importation d’un schéma. Les instructions DDL telles que CREATE FUNCTION ou CREATE TRIGGER sont écrites dans le journal binaire, de sorte que le réplica secondaire peut les exécuter. Le thread SQL de réplica a des privilèges complets, qui peuvent être exploités pour élever les privilèges. Pour vous protéger contre ce danger sur les serveurs où la journalisation binaire est activée, le moteur MySQL exige que les créateurs de fonction stockée aient le privilège SUPER en plus du privilège CREATE ROUTINE habituel.

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

Résolution : Pour résoudre cette erreur, affectez la valeur 1 à log_bin_trust_function_creators dans le panneau des paramètres du serveur du portail, exécutez les instructions DDL ou importez le schéma pour créer les objets souhaités. Vous pouvez continuer à maintenir log_bin_trust_function_creators sur 1 pour votre serveur afin d’éviter l’erreur à l’avenir. Notre recommandation est de définir log_bin_trust_function_creators le risque de sécurité mis en évidence dans la documentation de la communauté MySQL est minimale dans Azure Database pour MySQL serveur flexible, car le journal bin n’est pas exposé à des menaces.

ERREUR 1227 (42000) à la ligne 101 : Accès refusé ; vous avez au minimum besoin d’un des SUPER privilèges pour cette opération. Échec de l’opération avec code de sortie 1

L’erreur ci-dessus peut se produire lors de l’importation d’un fichier dump ou de la création d’une procédure contenant des éléments definer.

Résolution : Pour résoudre cette erreur, l’utilisateur administrateur peut accorder des privilèges permettant de créer ou d’exécuter des procédures en exécutant la commande GRANT, comme dans les exemples suivants :

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

Vous pouvez également remplacer les éléments definer par le nom de l’utilisateur administrateur qui exécute le processus d’importation, comme indiqué ci-dessous.

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

/* Modified to */

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

ERREUR 1227 (42000) à la ligne 295 : Accès refusé ; vous avez au minimum besoin d’un des privilèges SUPER ou SET_USER_ID pour cette opération.

L’erreur ci-dessus peut se produire lors de l’exécution de CREATE VIEW avec des instructions DEFINER dans le cadre de l’importation d’un fichier dump ou de l’exécution d’un script. Azure Database pour MySQL serveur flexible n’autorise pas les privilèges SUPER ni le privilège SET_USER_ID à n’importe quel utilisateur.

Résolution :

  • Utilisez l’utilisateur definer pour exécuter CREATE VIEW, si possible. Il est probable qu’il existe beaucoup de vues avec des utilisateurs definer différents, dotés d’autres autorisations, ce qui peut rendre l’opération irréalisable. OR
  • Modifiez le fichier dump ou le script CREATE VIEW, puis supprimez l’instruction DEFINER= du fichier dump. OR
  • Modifiez le fichier dump ou le script CREATE VIEW et remplacez les valeurs de definer par celles de l’utilisateur disposant des autorisations d’administrateur et effectuant l’importation ou l’exécution du fichier de script.

Conseil

Utilisez sed ou perl pour modifier un fichier dump ou un script SQL et remplacer l’instruction DEFINER= statement

ERREUR 1227 (42000) à la ligne 18 : Accès refusé ; vous avez au minimum besoin d’un des SUPER privilèges pour cette opération

L’erreur ci-dessus peut se produire si vous essayez d’importer le fichier de vidage à partir d’une instance de serveur flexible Azure Database pour MySQL avec GTID activé pour l’instance cible Azure Database pour MySQL serveur flexible. Mysqldump ajoute l’instruction SET @@SESSION.sql_log_bin=0 à un fichier dump à partir d’un serveur sur lequel des GTID sont en cours d’utilisation, ce qui désactive la journalisation binaire pendant le rechargement du fichier dump.

Résolution : Pour résoudre cette erreur lors de l’importation, supprimez ou commentez les lignes ci-dessous dans votre fichier mysqldump, puis réexécutez l’importation pour vérifier qu’elle est correcte.

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;

Erreurs de connexion courantes liées à la connexion de l’administrateur du serveur

Lorsqu’une instance de serveur flexible Azure Database pour MySQL est créée, une connexion d’administrateur de serveur est fournie par l’utilisateur final lors de la création du serveur. La connexion d’administrateur du serveur vous permet de créer des bases de données, d’ajouter de nouveaux utilisateurs et d’accorder des autorisations. Si la connexion d’administrateur du serveur est supprimée, ses autorisations sont révoquées ou son mot de passe est changé, vous pouvez commencer à voir des erreurs de connexion dans votre application pendant les connexions. Voici quelques-unes des erreurs courantes.

ERREUR 1045 (28000) : Accès refusé pour l’utilisateur 'nom_utilisateur'@'adresse IP' (utilisant le mot de passe : OUI)

L’erreur ci-dessus se produit dans les cas suivants :

  • Le nom d’utilisateur n’existe pas.
  • Le nom d’utilisateur de l’utilisateur a été supprimé.
  • Le mot de passe associé a été changé ou réinitialisé

Résolution :

  • Vérifiez que le « nom_utilisateur » existe en tant qu’utilisateur valide sur le serveur, ou qu’il a été supprimé par inadvertance. Vous pouvez exécuter la requête suivante en vous connectant à l’utilisateur du serveur flexible Azure Database pour MySQL :

    select user from mysql.user;
    
  • Si vous ne pouvez pas vous connecter à l’instance de serveur flexible Azure Database pour MySQL pour exécuter la requête ci-dessus elle-même, nous vous recommandons de réinitialiser le mot de passe administrateur à l’aide de Portail Azure. L’option de réinitialisation du mot de passe à partir du portail Azure permet de recréer l’utilisateur, de réinitialiser le mot de passe et de restaurer les autorisations d’administrateur, ce qui vous permet de vous connecter par l’intermédiaire de l’administrateur de serveur et d’effectuer d’autres opérations.

Étapes suivantes

Si vous n’avez pas trouvé la réponse que vous recherchez, envisagez les options suivantes :