Partage via


Résoudre les erreurs courantes rencontrées pendant ou après la migration vers le serveur flexible Azure Database pour MySQL

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

Important

Le serveur unique Azure Database pour MySQL est en voie de mise hors service. Nous vous conseillons vivement de procéder à une mise à niveau vers Azure Database pour MySQL – Serveur flexible. Pour obtenir plus d’informations sur la migration vers Azure Database pour MySQL – Serveur flexible, consultez Qu’en est-il du Serveur unique Azure Database pour MySQL ?

Le serveur flexible Azure Database pour MySQL est un service complètement managé, reposant sur MySQL Community Edition. L’expérience MySQL dans un environnement de service managé risque de différer de l’exécution de MySQL dans votre environnement spécifique. Dans cet article, vous verrez certaines des erreurs courantes que les utilisateurs risquent de rencontrer en migrant vers le serveur flexible Azure Database pour MySQL ou en y développant 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.

Certains paramètres de serveur comme require_secure_transport n’étant pas pris en charge au niveau de la session, toute tentative de changement des valeurs de ces paramètres avec init_connect peut provoquer l’erreur 1184 lors de la connexion à l’instance du 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 risquez de 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 risque de 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. Nous vous recommandons de définir log_bin_trust_function_creators, car le risque de sécurité mis en évidence dans la documentation de la communauté MySQL est minimal dans le serveur flexible Azure Database pour MySQL puisque le journal des emplacements n’est exposé à aucune menace.

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 risque de se produire lors de l’importation d’un fichier dump ou de la création d’une procédure contenant des définisseurs.

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 risque de 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. Le serveur flexible Azure Database pour MySQL n’autorise ni les privilèges SUPER ni le privilège SET_USER_ID pour un utilisateur.

Résolution :

  • Utilisez l’utilisateur definer pour exécuter CREATE VIEW, si possible. Il est probable qu’il existe de nombreuses vues avec des définisseurs différents, dotés d’autorisations différentes, ce qui risque de rendre la chose 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 risque de se produire si vous tentez d’importer le fichier dump à partir de l’instance du serveur flexible Azure Database pour MySQL avec GTID activé sur l’instance du serveur flexible Azure Database pour MySQL cible. 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

Quand une instance du 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 risquez de commencer à voir des erreurs de connexion dans votre application pendant les connexions. Voici quelques erreurs parmi les plus 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 du serveur flexible Azure Database pour MySQL pour exécuter la requête elle-même ci-dessus, nous vous recommandons de réinitialiser le mot de passe d’administrateur avec le 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.