

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Mise à niveau de la version majeure d’un cluster de bases de données Amazon Aurora MySQL
<a name="AuroraMySQL.Updates.MajorVersionUpgrade"></a><a name="mvu"></a>

Dans un numéro de version d'Aurora MySQL tel que 3.04.1, le 3 représente la version majeure. Aurora MySQL version 2 est déjà compatible avec MySQL 5.7. Aurora MySQL version 3 est déjà compatible avec MySQL 8.0.

La mise à niveau entre les versions majeures nécessite une planification et des tests plus étendus que pour une version mineure. Le processus peut prendre beaucoup de temps. Une fois la mise à niveau terminée, il se peut que vous ayez également un travail de suivi à faire, Par exemple, cela peut se produire en raison des différences de compatibilité SQL ou du fonctionnement de certaines fonctions liées à MySQL. Cela peut également se produire en raison de paramètres différents entre l’ancienne et la nouvelle version.

**Contents**
+ [Mise à niveau d’Aurora MySQL version 2 vers la version 3](#AuroraMySQL.Updates.MajorVersionUpgrade.2to3)
+ [Chemins de mise à niveau d’une version majeure Aurora MySQL](#AuroraMySQL.Upgrading.Compatibility)
+ [Fonctionnement de la mise à niveau sur place d’une version majeure de Aurora MySQL](#AuroraMySQL.Upgrading.Sequence)
+ [Planification d’une mise à niveau de version majeure d’un cluster Aurora MySQL](#AuroraMySQL.Upgrading.Planning)
  + [Simulation de la mise à niveau en clonant votre cluster de bases de données](#AuroraMySQL.Upgrading.Planning.clone)
  + [Déploiements bleu/vert](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [Vérifications préalables aux mises à niveau de version majeure pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.md)
  + [Processus de vérification préalable pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.process)
  + [Format du journal des vérifications préalables pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-format)
  + [Exemples de sorties du journal de vérification préalable pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-examples)
  + [Vérification préalable des performances pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.performance)
  + [Résumé des vérifications préalables de mise à niveau de Community MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.community)
  + [Résumé des vérifications préalables de mise à niveau d’Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.ams)
  + [Référence des vérifications préalables avec description pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md)
    + [Erreurs](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
      + [Vérifications préalables de MySQL qui signalent des erreurs](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
      + [Vérifications préalables d’Aurora MySQL qui signalent des erreurs](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
    + [Avertissements](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
      + [Vérifications préalables de MySQL qui signalent des avertissements](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
      + [Vérifications préalables d’Aurora MySQL qui signalent des avertissements](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
    + [Notifications](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
    + [Erreurs, avertissements ou notifications](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)
+ [Comment effectuer une mise à niveau sur place](AuroraMySQL.Upgrading.Procedure.md)
  + [Comment les mises à niveau sur place affectent les groupes de paramètres d’un cluster](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups)
  + [Modifications apportées aux propriétés du cluster entre les versions d’Aurora MySQL](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs)
  + [Mises à niveau majeures sur place des bases de données globales](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.GlobalDB)
  + [Mises à niveau sur place pour les clusters de bases de données ayant des réplicas en lecture entre régions](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.XRRR)
+ [Tutoriel de mise à niveau sur place d’Aurora MySQL](AuroraMySQL.Upgrading.Tutorial.md)
+ [Identification de la cause des échecs de mise à niveau de version majeure Aurora MySQL](AuroraMySQL.Upgrading.failure-events.md)
+ [Dépannage de la mise à niveau sur place d’Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md)
+ [Nettoyage postérieur à la mise à niveau pour Aurora MySQL version 3](AuroraMySQL.mysql80-post-upgrade.md)
  + [Index spatiaux](AuroraMySQL.mysql80-post-upgrade.md#AuroraMySQL.mysql80-spatial)

## Mise à niveau d’Aurora MySQL version 2 vers la version 3
<a name="AuroraMySQL.Updates.MajorVersionUpgrade.2to3"></a>

Si vous avez un cluster compatible MySQL 5.7 et souhaitez le mettre à niveau vers un cluster compatible MySQL 8.0, vous pouvez le faire en exécutant un processus de mise à niveau sur le cluster lui-même. Ce type de mise à niveau est appelé *mise à niveau sur place*, en opposition aux mises à niveau que vous effectuez en créant un nouveau cluster. Cette technique conserve le point de terminaison et d’autres caractéristiques du cluster. La mise à niveau est relativement rapide car elle ne nécessite pas la copie de toutes vos données vers un nouveau volume de cluster. Cette stabilité permet de réduire au minimum les modifications de configuration de vos applications. Elle aide également à réduire la quantité de tests du cluster mis à niveau. En effet, le nombre d’instances de base de données et leurs classes d’instance restent les mêmes.

Le mécanisme de mise à niveau sur place implique l’arrêt de votre cluster de bases de données pendant que l’opération. Aurora effectue un arrêt propre et termine les opérations en suspens telles que la restauration des transactions et la purge des annulations. Pour plus d’informations, consultez [Fonctionnement de la mise à niveau sur place d’une version majeure de Aurora MySQL](#AuroraMySQL.Upgrading.Sequence).

La méthode de mise à niveau sur place est pratique, car elle est simple à effectuer et réduit au minimum les modifications de configuration des applications associées. Par exemple, une mise à niveau sur place conserve les points de terminaison et l’ensemble d’instances de base de données de votre cluster. Toutefois, le temps nécessaire pour une mise à niveau sur place peut varier en fonction des propriétés de votre schéma et du niveau d’activité de votre cluster. Ainsi, en fonction des besoins de votre cluster, vous pouvez choisir parmi les techniques de mise à niveau :
+ [Mises à niveau sur place](AuroraMySQL.Upgrading.Procedure.md)
+ [Déploiement bleu/vert](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [Restauration d’instantané](aurora-restore-snapshot.md)
**Note**  
Si vous utilisez l'API AWS CLI ou RDS pour la méthode de mise à niveau de la restauration instantanée, vous devez exécuter une opération suivante pour créer une instance de base de données d'écriture dans le cluster de base de données restauré.

Pour obtenir des informations générales sur Aurora MySQL version 3, ainsi que ses nouvelles fonctions, consultez [Aurora MySQL version 3 compatible avec MySQL 8.0](AuroraMySQL.MySQL80.md).

Pour plus de détails sur la planification d’une mise à niveau, consultez [Planification d’une mise à niveau de version majeure d’un cluster Aurora MySQL](#AuroraMySQL.Upgrading.Planning) et [Comment effectuer une mise à niveau sur place](AuroraMySQL.Upgrading.Procedure.md).

## Chemins de mise à niveau d’une version majeure Aurora MySQL
<a name="AuroraMySQL.Upgrading.Compatibility"></a>

Tous les types ou versions de clusters Aurora MySQL ne peuvent pas utiliser le mécanisme de mise à niveau sur place. Consultez le tableau suivant pour connaître le chemin de mise à niveau approprié pour chaque cluster Aurora MySQL.


|  Type de cluster de bases de données Aurora MySQL  | Peut-il utiliser la mise à niveau sur place ?  |  Action  | 
| --- | --- | --- | 
|   Cluster Aurora MySQL provisionné, version 2  |  Oui  |  La mise à niveau sur place est prise en charge pour les clusters Aurora MySQL compatibles avec MySQL 5.7. Pour en savoir plus sur la mise à niveau vers Aurora MySQL version 3, consultez [Planification d’une mise à niveau de version majeure d’un cluster Aurora MySQL](#AuroraMySQL.Upgrading.Planning) et [Comment effectuer une mise à niveau sur place](AuroraMySQL.Upgrading.Procedure.md).  | 
|   Cluster Aurora MySQL provisionné, version 3  |  Non applicable  |  Utilisez une procédure de mise à niveau de version mineure pour passer aux versions Aurora MySQL version 3.  | 
|  Aurora Serverless v1Cluster   |  Non applicable  |  Aurora Serverless v1 est pris en charge uniquement pour Aurora MySQL version 2.  | 
|  Aurora Serverless v2Cluster   |  Non applicable  | Aurora Serverless v2 est pris en charge uniquement pour Aurora MySQL version 3. | 
|  Cluster d’une base de données Aurora globale  |  Oui  |  Pour mettre à niveau Aurora MySQL de la version 2 vers la version 3, suivez la [procédure de mise à niveau sur place](AuroraMySQL.Upgrading.Procedure.md) pour les clusters d’une base de données Aurora globale. Effectuez la mise à niveau sur le cluster global. Aurora met à niveau le cluster principal et tous les clusters secondaires dans la base de données globale en même temps. Si vous utilisez l'API AWS CLI ou RDS, appelez la `modify-global-cluster` commande ou l'`ModifyGlobalCluster`opération au lieu de `modify-db-cluster` ou`ModifyDBCluster`. Vous ne pouvez effectuer une mise à niveau sur place d’Aurora MySQL version 2 vers la version 3 que si le paramètre `lower_case_table_names` est défini par défaut et que vous redémarrez votre base de données globale. Pour plus d’informations, consultez [Mises à niveau de version majeure.](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major).  | 
|  Cluster compatible avec les requêtes parallèles  |  Oui  |  Vous pouvez effectuer une mise à niveau sur place.  | 
|  Cluster cible de la réplication de journaux binaires  |  Peut-être  |  Si la réplication de journaux binaires provient d’un cluster Aurora MySQL, vous pouvez effectuer une mise à niveau sur place. Vous ne pouvez pas effectuer la mise à niveau si la réplication de journaux binaires provient d’une instance de RDS for MySQL ou d’une instance de base de données MySQL sur site. Dans ce cas, vous pouvez effectuer la mise à niveau à l’aide du mécanisme de restauration d’instantané.  | 
|  Cluster sans instances de base de données  |  Non  |  À l'aide de l'API AWS CLI ou de l'API RDS, vous pouvez créer un cluster Aurora MySQL sans aucune instance de base de données attachée. De la même manière, vous pouvez supprimer toutes les instances de base de données d’un cluster Aurora MySQL tout en laissant les données du volume de cluster intactes. Lorsqu’un cluster ne comporte aucune instance de base de données, vous ne pouvez pas effectuer une mise à niveau sur place. Le mécanisme de mise à niveau nécessite une instance de scripteur dans le cluster pour effectuer des conversions sur les tables système, les fichiers de données, etc. Dans ce cas, utilisez l'API AWS CLI ou l'API RDS pour créer une instance d'écriture pour le cluster. Ensuite, vous pouvez effectuer une mise à niveau sur place.  | 
|  Cluster avec retour en arrière activé  |  Oui  |  Vous pouvez effectuer une mise à niveau sur place pour un cluster Aurora MySQL utilisant la fonctionnalité de retour en arrière. Toutefois, après la mise à niveau, vous ne pouvez pas effectuer de retour en arrière du cluster à un moment antérieur à la mise à niveau.  | 

## Fonctionnement de la mise à niveau sur place d’une version majeure de Aurora MySQL
<a name="AuroraMySQL.Upgrading.Sequence"></a>

 Aurora MySQL effectue les mises à niveau de version majeure en tant que processus en plusieurs étapes. Vous pouvez vérifier l’état actuel d’une mise à niveau. Certaines étapes de la mise à niveau fournissent également des informations sur l’état d’avancement. Au début de chaque étape, Aurora MySQL enregistre un événement. Vous pouvez examiner les événements lorsqu’ils ont lieu sur la page **Events (Événements)** de la console RDS. Pour en savoir plus sur l’utilisation des événements, consultez [Utiliser la notification d’événements d’Amazon RDS](USER_Events.md). 

**Important**  
 Une fois que le processus a démarré, il se poursuit jusqu’à ce que la mise à niveau réussisse ou échoue. Vous ne pouvez pas annuler la mise à niveau tant qu’elle est en cours. Si la mise à niveau échoue, Aurora annule toutes les modifications et votre cluster garde la même version du moteur, ainsi que les mêmes métadonnées et autres éléments qu’auparavant. 

 Le processus de mise à niveau comporte les étapes suivantes : 

1.  Aurora effectue une série de [vérifications préalables](AuroraMySQL.upgrade-prechecks.md) avant de lancer le processus de mise à niveau. Votre cluster continue de fonctionner pendant que Aurora effectue ces vérifications. Par exemple, le cluster ne peut pas avoir de transactions XA à l’état préparé ou être en train de traiter des instructions en langage de définition de données (DDL). Par exemple, il se peut que vous deviez arrêter les applications qui soumettent certains types d’instructions SQL. Vous pouvez également attendre simplement que certaines instructions à longue exécution soient terminées. Ensuite, tentez de relancer la mise à niveau. Certaines vérifications consistent à examiner les conditions n’empêchant pas la mise à niveau, mais peuvent prendre beaucoup de temps. 

    Si Aurora détecte que les conditions requises ne sont pas réunies, modifiez les conditions identifiées dans les détails de l’événement. Suivez les instructions dans [Dépannage de la mise à niveau sur place d’Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md). Si Aurora détecte des conditions susceptibles de ralentir la mise à niveau, prévoyez de surveiller la mise à niveau sur une longue période. 

1.  Aurora met votre cluster hors ligne. Aurora effectue ensuite un ensemble de tests similaire à celui de l’étape précédente pour confirmer qu’aucun problème n’est apparu pendant le processus d’arrêt. Si Aurora détecte à ce stade des conditions pouvant empêcher la mise à niveau, Aurora annule la mise à niveau et remet le cluster en ligne. Dans ce cas, indiquez quand les conditions ne s’appliquent plus et relancez la mise à niveau. 

1.  Aurora crée un instantané de votre volume de cluster. Supposons que vous découvriez la compatibilité ou d’autres types de problèmes une fois la mise à niveau terminée. Ou supposons que vous souhaitiez effectuer des tests à l’aide des clusters d’origine et des clusters mis à niveau. Dans ce cas, vous pouvez effectuer une restauration à partir de cet instantané pour créer un nouveau cluster avec la version du moteur d’origine et les données d’origine. 
**Astuce**  
Cet instantané est un instantané manuel. Cependant, Aurora peut le créer et poursuivre le processus de mise à niveau, même si vous avez atteint votre quota d’instantanés manuels. Cet instantané sera conservé définitivement (si nécessaire) jusqu’à ce que vous le supprimiez. Une fois tous les tests postérieurs à la mise à niveau terminés, vous pouvez supprimer cet instantané pour réduire les frais de stockage.

1.  Aurora clone votre volume de cluster. Le clonage est une opération rapide qui n’implique pas la copie des données de la table elles-mêmes. Si Aurora rencontre un problème lors de la mise à niveau, les données d’origine du volume de cluster cloné sont restaurées et le cluster est remis en ligne. Le volume cloné temporairement pendant la mise à niveau n’est pas soumis à la limite habituelle du nombre de clones pour un seul volume de cluster. 

1.  Aurora effectue un arrêt propre de l’instance de base de données du scripteur. Pendant l’arrêt propre, les événements de progression sont enregistrés toutes les 15 minutes pour les opérations suivantes. Vous pouvez examiner les événements lorsqu’ils ont lieu sur la page **Events (Événements)** de la console RDS. 
   +  Aurora purge les enregistrements d’annulation des anciennes versions des lignes. 
   +  Aurora restaure toutes les transactions non validées. 

1.  Aurora met à niveau la version du moteur de l’instance de base de données du scripteur : 
   +  Aurora installe le fichier binaire de la nouvelle version du moteur de l’instance de base de données du scripteur. 
   +  Aurora utilise l’instance de base de données du scripteur pour mettre à niveau vos données au format compatible MySQL 5.7. Lors de cette étape, Aurora modifie les tables système et effectue d’autres conversions qui affectent les données de votre volume de cluster. En particulier, Aurora met à niveau les métadonnées de partition dans les tables système pour qu’elles soient compatibles avec le format de partition MySQL 5.7. Cette étape peut prendre beaucoup de temps si les tables de votre cluster ont de nombreuses partitions. 

      Si des erreurs se produisent au cours de cette étape, vous pouvez trouver les détails dans les journaux d’erreurs MySQL. Une fois cette étape démarrée, si le processus de mise à niveau échoue pour une raison quelconque, Aurora restaure les données d’origine du volume de cluster cloné. 

1.  Aurora met à niveau la version du moteur des instances de base de données du scripteur. 

1.  Le processus de mise à niveau est terminé. Aurora enregistre un événement final pour indiquer que le processus de mise à niveau s’est terminé avec succès. Votre cluster de bases de données exécute désormais la nouvelle version majeure. 

## Planification d’une mise à niveau de version majeure d’un cluster Aurora MySQL
<a name="AuroraMySQL.Upgrading.Planning"></a>

Pour vous aider à choisir le bon moment et la bonne approche pour la mise à niveau, découvrez les différences entre Aurora MySQL version 3 et votre environnement actuel :
+ Si vous effectuez une conversion à partir de RDS for MySQL 8.0 ou MySQL 8.0 Community Edition, consultez [Comparaison d’Aurora MySQL version 3 et de MySQL 8.0 Community Edition](AuroraMySQL.Compare-80-v3.md).
+ Si vous effectuez une mise à niveau depuis Aurora MySQL version 2, RDS for MySQL 5.7 ou MySQL 5.7 Community Edition, consultez [Comparaison d’Aurora MySQL version 2 et Aurora MySQL version 3](AuroraMySQL.Compare-v2-v3.md). 
+ Créez de nouvelles versions compatibles avec MySQL 8.0 de tous les groupes de paramètres personnalisés. Appliquez toutes les valeurs de paramètres personnalisés nécessaires aux nouveaux groupes de paramètres. Consultez [Modifications des paramètres d’Aurora MySQL version 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.mysql80-parameter-changes) pour en savoir plus sur les changements de paramètres.
+ Vérifiez le schéma de votre base de données Aurora MySQL version 2 et les définitions d’objets pour vous assurer de l’utilisation des nouveaux mots-clés réservés introduits dans MySQL 8.0 Community Edition. Faites-le avant la mise à niveau. Pour en savoir plus, consultez [MySQL 8.0 New Keywords and Reserved Words](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0) (MySQL 8.0 : nouveaux mots-clés et mots réservés) dans la documentation MySQL.

Vous trouverez également d’autres considérations et astuces de mise à niveau spécifiques à MySQL dans [Changements dans MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html) dans le *manuel de référence MySQL*. Par exemple, vous pouvez utiliser la commande `mysqlcheck --check-upgrade` pour analyser les bases de données Aurora MySQL existantes et identifier les problèmes potentiels de mise à niveau.

**Note**  
Nous recommandons d’utiliser des classes d’instance de base de données plus importantes lors de la mise à niveau vers Aurora MySQL version 3 en utilisant la technique de mise à niveau sur place ou de restauration des instantanés. Exemples : db.r5.24xlarge et db.r6g.16xlarge. Cela permet au processus de mise à niveau de se terminer plus rapidement en utilisant la majorité de la capacité CPU disponible sur l’instance de base de données. Vous pouvez passer à la classe d’instance de base de données de votre choix une fois la mise à niveau de la version majeure terminée.

Une fois la mise à niveau terminée, vous pouvez suivre les procédures post-mise à niveau dans [Nettoyage postérieur à la mise à niveau pour Aurora MySQL version 3](AuroraMySQL.mysql80-post-upgrade.md). Enfin, testez les fonctionnalités et les performances de votre application. 

Si vous effectuez une conversion à partir de RDS for MySQL ou de la version communautaire de MySQL, suivez la procédure de migration expliquée dans [Migration de données vers un cluster de bases de données Amazon Aurora MySQL](AuroraMySQL.Migrating.md). Dans certains cas, vous pouvez utiliser la réplication des journaux binaires pour synchroniser vos données avec un cluster Aurora MySQL version 3 dans le cadre de la migration. Le cas échéant, le système source doit exécuter une version compatible avec votre cluster de bases de données cible.

Pour vous assurer que vos applications et procédures d’administration fonctionnent correctement après la mise à niveau d’un cluster entre les versions majeures, effectuez une planification et une préparation anticipées. Pour connaître les types de code de gestion à mettre à jour pour vos AWS CLI scripts ou applications basées sur l'API RDS, consultez. [Comment les mises à niveau sur place affectent les groupes de paramètres d’un cluster](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups) Voir aussi [Modifications apportées aux propriétés du cluster entre les versions d’Aurora MySQL](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs).

Pour découvrir les problèmes que vous pourriez rencontrer lors de la mise à niveau, consultez [Dépannage de la mise à niveau sur place d’Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md). Pour les problèmes pouvant entraîner une mise à niveau longue, vous pouvez tester ces conditions au préalable et les corriger.

**Note**  
Un mécanisme de mise à niveau sur place implique l’arrêt de votre cluster de bases de données pendant que l’opération a lieu. Aurora effectue un arrêt complet et termine les opérations en cours telles que la purge des annulations. Une mise à niveau peut prendre beaucoup de temps s’il y a de nombreux enregistrements d’annulation à purger. Nous vous recommandons de n’effectuer la mise à niveau qu’une fois que la longueur de la liste d’historique (HLL) sera faible. Une valeur généralement acceptable pour la liste HLL est de 100 000 ou moins. Pour plus d’informations, lisez ce [billet de blog](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2).

### Simulation de la mise à niveau en clonant votre cluster de bases de données
<a name="AuroraMySQL.Upgrading.Planning.clone"></a>

Vous pouvez vérifier la compatibilité des applications, les performances, les procédures de maintenance et d’autres considérations pour le cluster mis à niveau. Pour ce faire, vous pouvez effectuer une simulation de la mise à niveau avant de procéder à la mise à niveau elle-même. Cette technique peut être particulièrement utile pour les clusters de production. Ici, il est important de limiter la durée d’indisponibilité et de s’assurer que le cluster mis à niveau soit opérationnel dès la fin de la mise à niveau.

Procédez comme suit :

1. Créez un clone du cluster d’origine. Suivez la procédure décrite dans [Clonage d’un volume pour un cluster de bases de données Amazon Aurora](Aurora.Managing.Clone.md).

1. Configurez un ensemble d’instances de base de données d’écriture et de lecture similaire à celui du cluster d’origine.

1. Effectuez une mise à niveau sur place du cluster cloné. Suivez la procédure décrite dans [Comment effectuer une mise à niveau sur place](AuroraMySQL.Upgrading.Procedure.md).

   Démarrez la mise à niveau immédiatement après avoir créé le clone. Ainsi, le volume de cluster reste identique à l’état du cluster d’origine. Si le clone est inactif avant la mise à niveau, Aurora effectue des processus de nettoyage de base de données en arrière-plan. Dans ce cas, la mise à niveau du clone n’est pas une simulation précise de la mise à niveau du cluster d’origine.

1. Testez la compatibilité des applications, les performances, les procédures d’administration, etc., à l’aide du cluster cloné.

1. Si vous rencontrez des problèmes, modifiez vos plans de mise à niveau de manière à en tenir compte. Par exemple, adaptez n’importe quel code d’application pour qu’il soit compatible avec le jeu de fonctions de la version ultérieure. Estimez la durée de la mise à niveau en fonction de la quantité de données dans votre cluster. Vous pouvez également choisir de planifier la mise à niveau à un moment où le cluster n’est pas occupé.

1. Après avoir vérifié le bon fonctionnement de vos applications et de votre charge de travail avec le cluster de test, vous pouvez effectuer la mise à niveau sur place de votre cluster de production.

1. Essayez de limiter la durée d’indisponibilité totale de votre cluster pendant une mise à niveau de version majeure. Pour ce faire, assurez-vous que la charge de travail sur le cluster est faible ou nulle au moment de la mise à niveau. En particulier, assurez-vous qu’aucune transaction longue n’est en cours lorsque vous lancez la mise à niveau.

### Déploiements bleu/vert
<a name="AuroraMySQL.UpgradingMajor.BlueGreen"></a>

Dans certains cas, votre priorité absolue est d’effectuer une bascule immédiate de l’ancien cluster vers un cluster mis à niveau. Dans de telles situations, vous pouvez utiliser un processus en plusieurs étapes qui exécute les anciens et les nouveaux clusters side-by-side. Dans ce cas, répliquez les données de l’ancien cluster au nouveau jusqu’à ce que ce dernier soit prêt à prendre le relais. Pour en savoir plus, consultez [Utilisation d' (Amazon Aurora Blue/Green Deployments) pour les mises à jour de bases de données](blue-green-deployments.md).

# Vérifications préalables aux mises à niveau de version majeure pour Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks"></a>

Les mises à niveau de version majeure de MySQL (lorsque vous passez de MySQL 5.7 à MySQL 8.0, par exemple) impliquent des modifications architecturales significatives qui nécessitent une planification et une préparation minutieuses. Contrairement aux mises à niveau de version mineure qui se concentrent principalement sur la mise à jour du logiciel du moteur de base de données et, dans certains cas, des tables système, les mises à niveau majeures de MySQL impliquent souvent des changements fondamentaux dans la façon dont la base de données stocke et gère ses métadonnées.

Pour vous aider à identifier ces incompatibilités, lors de la mise à niveau d’Aurora MySQL version 2 vers la version 3, Aurora exécute automatiquement des vérifications de la compatibilité de la mise à niveau (vérifications préalables) pour examiner les objets de votre cluster de bases de données et identifier les incompatibilités connues susceptibles d’empêcher la mise à niveau d’avoir lieu. Pour plus d’informations sur les vérifications préalables d’Aurora MySQL, consultez [Référence des vérifications préalables avec description pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md). Les vérifications préalables d’Aurora s’exécutent en plus de celles effectuées par l’[utilitaire de vérification de mise à niveau](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-upgrade.html) de Community MySQL.

Ces vérifications préalables sont obligatoires. Vous ne pouvez pas choisir de les ignorer. Elles offrent les avantages suivants :
+ Elles limitent le risque d’échecs de mise à niveau susceptibles d’entraîner une durée d’indisponibilité prolongée.
+ En cas d’incompatibilités, Amazon Aurora empêche la mise à niveau d’avoir lieu et vous fournit un journal vous permettant d’en savoir plus. Vous pouvez ensuite utiliser ce journal pour préparer votre base de données pour la mise à niveau vers la version 3 de MySQL en résolvant ces incompatibilités. Pour obtenir des informations détaillées sur la résolution des incompatibilités, consultez [Préparation de votre installation pour la mise à niveau](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html) dans la documentation MySQL et [Mise à niveau vers MySQL 8.0 ? Ce que vous devez savoir…](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/) (langue française non garantie) sur le blog MySQL Server.

  Pour plus d’informations sur la mise à niveau vers MySQL 8.0, consultez [Mise à niveau de MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) dans la documentation MySQL.

Les vérifications préalables s’exécutent avant que votre cluster de bases de données ne soit mis hors ligne pour la mise à niveau de la version majeure. Si les vérifications préalables identifient une incompatibilité, Aurora annule automatiquement la mise à niveau avant que l’instance de base de données soit arrêtée. Aurora génère également un événement pour cette incompatibilité. Pour plus d’informations sur les événements Amazon Aurora, consultez [Utiliser la notification d’événements d’Amazon RDS](USER_Events.md).

Une fois les vérifications préalables terminées, Aurora enregistre des informations détaillées sur chaque incompatibilité dans le fichier `upgrade-prechecks.log`. Dans la plupart des cas, l’entrée de journal inclut un lien vers la documentation MySQL permettant de corriger l’incompatibilité. Pour plus d’informations sur l’affichage des fichiers journaux, consultez [Liste et affichage des fichiers journaux de base de données](USER_LogAccess.Procedural.Viewing.md).

**Note**  
En raison de la nature des vérifications préalables, elles analysent les objets dans votre base de données. L’analyse entraîne la consommation de ressources et augmente le temps nécessaire pour la mise à niveau. Pour plus d’informations sur les considérations relatives aux performances de la vérification préalable, consultez [Processus de vérification préalable pour Aurora MySQL](#AuroraMySQL.upgrade-prechecks.process).

**Contents**
+ [Processus de vérification préalable pour Aurora MySQL](#AuroraMySQL.upgrade-prechecks.process)
+ [Format du journal des vérifications préalables pour Aurora MySQL](#AuroraMySQL.upgrade-prechecks.log-format)
+ [Exemples de sorties du journal de vérification préalable pour Aurora MySQL](#AuroraMySQL.upgrade-prechecks.log-examples)
+ [Vérification préalable des performances pour Aurora MySQL](#AuroraMySQL.upgrade-prechecks.performance)
+ [Résumé des vérifications préalables de mise à niveau de Community MySQL](#AuroraMySQL.upgrade-prechecks.community)
+ [Résumé des vérifications préalables de mise à niveau d’Aurora MySQL](#AuroraMySQL.upgrade-prechecks.ams)
+ [Référence des vérifications préalables avec description pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md)
  + [Erreurs](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
    + [Vérifications préalables de MySQL qui signalent des erreurs](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
    + [Vérifications préalables d’Aurora MySQL qui signalent des erreurs](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
  + [Avertissements](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
    + [Vérifications préalables de MySQL qui signalent des avertissements](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
    + [Vérifications préalables d’Aurora MySQL qui signalent des avertissements](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
  + [Notifications](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
  + [Erreurs, avertissements ou notifications](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)

## Processus de vérification préalable pour Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.process"></a>

Comme décrit précédemment, le processus de mise à niveau d’Aurora MySQL implique l’exécution de vérifications de la compatibilité (vérifications préalables) sur votre base de données avant de procéder à la mise à niveau de la version majeure.

Pour les mises à niveau sur place, les vérifications préalables s’exécutent sur votre instance de base de données d’enregistreur lorsqu’elle est en ligne. Si la vérification préalable aboutit, la mise à niveau a lieu. Si des erreurs sont détectées, elles sont journalisées dans le fichier `upgrade-prechecks.log`, et la mise à niveau est annulée. Avant de tenter une nouvelle mise à niveau, corrigez les erreurs renvoyées dans le fichier `upgrade-prechecks.log`.

Pour les mises à niveau basées sur la restauration d’un instantané, la vérification préalable s’exécute pendant le processus de restauration. En cas de succès, votre base de données sera mise à niveau vers la nouvelle version d’Aurora MySQL. Si des erreurs sont détectées, elles sont journalisées dans le fichier `upgrade-prechecks.log`, et la mise à niveau est annulée. Avant de tenter une nouvelle mise à niveau, corrigez les erreurs renvoyées dans le fichier `upgrade-prechecks.log`.

Pour plus d’informations, consultez [Identification de la cause des échecs de mise à niveau de version majeure Aurora MySQL](AuroraMySQL.Upgrading.failure-events.md) et [Référence des vérifications préalables avec description pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

Pour surveiller l’état de la vérification préalable, vous pouvez consulter les événements suivants sur votre cluster de bases de données.


| État de la vérification préalable | Message d’événement | Action | 
| --- | --- | --- | 
|  Démarré(e)  |  Préparation de la mise à niveau en cours : lancement des vérifications préalables à la mise à niveau en ligne.  | Aucune | 
|  Échec  |  Le cluster de bases de données est dans un état qui ne permet pas la mise à niveau : les vérifications préalables à la mise à niveau ont échoué. Pour plus de détails, consultez le fichier upgrade-prechecks.log. Pour plus d’informations sur le dépannage de la cause de l’échec de la mise à niveau, consultez [https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.upgrading.Troubleshooting.html](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  |  Recherchez les erreurs dans `upgrade-prechecks.log`.  Corrigez les erreurs. Réessayez la mise à niveau.  | 
|  Réussi(e)  |  Préparation de la mise à niveau en cours : vérifications préalables à la mise à niveau en ligne terminées.  |  La vérification préalable a abouti et aucune erreur n’a été renvoyée. Recherchez les avertissements et les notifications dans `upgrade-prechecks.log`.  | 

Pour plus d’informations sur l’affichage des événements, consultez [Affichage d’événements Amazon RDS](USER_ListEvents.md).

## Format du journal des vérifications préalables pour Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.log-format"></a>

Une fois que les vérifications de la compatibilité de la mise à niveau (vérifications préalables) sont terminées, vous pouvez consulter le fichier `upgrade-prechecks.log`. Ce fichier journal contient les résultats, les objets concernés et les informations de correction de chaque vérification préalable.

Toute erreur bloque la mise à niveau. Vous devez les résoudre avant de réessayer la mise à niveau.

Les avertissements et les notifications sont moins critiques, mais nous vous recommandons tout de même de les examiner attentivement pour vous assurer qu’il n’y a aucun problème de compatibilité avec la charge de travail de l’application. Résolvez rapidement tous les problèmes identifiés.

Le fichier journal a le format suivant :
+ `targetVersion` : version compatible avec MySQL de la mise à niveau d’Aurora MySQL.
+ `auroraServerVersion` : version d’Aurora MySQL sur laquelle la vérification préalable a été exécutée.
+ `auroraTargetVersion` : version d’Aurora MySQL vers laquelle vous effectuez la mise à niveau.
+ `checksPerformed` : contient la liste des vérifications préalables effectuées.
+ `id` : nom de la vérification préalable en cours d’exécution.
+ `title` : description de la vérification préalable en cours d’exécution.
+ `status` : n’indique pas si la vérification préalable a réussi ou échoué, mais indique l’état de la requête correspondante :
  + `OK` : la requête de vérification préalable a été exécutée et s’est terminée avec succès.
  + `ERROR` : la requête de vérification préalable n’a pas pu être exécutée. Cela peut être dû à des problèmes tels que des contraintes de ressources, des redémarrages inattendus d’instances ou l’interruption de la requête de vérification préalable de la compatibilité.

    Pour plus d’informations, consultez [cet exemple](#precheck-query-failed).
+ `description` : description générale de l’incompatibilité et de la procédure à suivre pour remédier au problème.
+ `documentationLink` : le cas échéant, un lien vers la documentation pertinente d’Aurora MySQL ou de MySQL est indiqué ici. Pour plus d’informations, consultez [Référence des vérifications préalables avec description pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).
+ `detectedProblems` : si la vérification préalable renvoie une erreur, un avertissement ou une notification, cela indique les détails de l’incompatibilité et les objets incompatibles le cas échéant :
  + `level` : niveau d’incompatibilité détecté par la vérification préalable. Les niveaux valides sont les suivants :
    + `Error` : la mise à niveau ne peut pas être effectuée tant que vous n’avez pas résolu l’incompatibilité.
    + `Warning` : la mise à niveau peut avoir lieu, mais un objet, une syntaxe ou une configuration obsolète a été détecté. Lisez attentivement les avertissements et résolvez-les rapidement afin d’éviter des problèmes dans les futures versions. 
    + `Notice` : la mise à niveau peut avoir lieu, mais un objet, une syntaxe ou une configuration obsolète a été détecté. Lisez attentivement les notifications et résolvez-les rapidement afin d’éviter des problèmes dans les futures versions. 
  + `dbObject` : nom de l’objet de base de données dans lequel l’incompatibilité a été détectée.
  + `description` : description détaillée de l’incompatibilité et de la procédure à suivre pour remédier au problème.
+ `errorCount` : nombre d’erreurs d’incompatibilité détectées. Ces erreurs bloquent la mise à niveau.
+ `warningCount` : nombre d’avertissements d’incompatibilité détectés. Ils ne bloquent pas la mise à niveau, mais traitez-les rapidement afin d’éviter des problèmes dans les futures versions.
+ `noticeCount` : nombre de notifications d’incompatibilité détectées. Elles ne bloquent pas la mise à niveau, mais traitez-les rapidement afin d’éviter des problèmes dans les futures versions.
+ `Summary` : résumé du nombre d’erreurs, d’avertissements et de notifications de compatibilité générés par la vérification préalable.

## Exemples de sorties du journal de vérification préalable pour Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.log-examples"></a>

Les exemples suivants montrent la sortie du journal de vérification préalable que vous pourriez voir. Pour plus de détails sur les vérifications préalables exécutées, consultez [Référence des vérifications préalables avec description pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

**État de la vérification préalable OK, aucune incompatibilité détectée**  
La requête de vérification préalable s’est terminée avec succès. Aucune incompatibilité n’a été détectée.  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinytext",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny text columns",
  "status": "OK",
  "detectedProblems": []
},
```

**État de la vérification préalable OK, erreur détectée**  
La requête de vérification préalable s’est terminée avec succès. Une erreur a été détectée.  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexes",
  "status": "OK",
  "description": "Consider dropping the prefix indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test25.sbtest1",
        "description": "Table `test25`.`sbtest1` has an index `idx_t1` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `idx_t1` ON `test25`.`sbtest1`;"
      },
 }
```

**État de la vérification préalable OK, avertissement détecté**  
Des avertissements peuvent être renvoyés en cas de réussite ou d’échec d’une vérification préalable.  
Ici, la requête de vérification préalable s’est terminée avec succès. Deux avertissements ont été détectés.  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
    ]
}
```

**État de la vérification préalable ERROR, aucune incompatibilité signalée**  
La requête de vérification préalable a échoué avec une erreur. Les incompatibilités n’ont donc pas pu être vérifiées.  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "ERROR",
  "description": "Can't connect to MySQL server on 'localhost:3306' (111) at 13/08/2024 12:22:20 UTC. This failure can occur due to low memory available on the instance for executing upgrade prechecks. Please check 'FreeableMemory' Cloudwatch metric to verify the available memory on the instance while executing prechecks. If instance ran out of memory, we recommend to retry the upgrade on a higher instance class."
}
```
Cet échec peut être dû à un redémarrage inattendu de l’instance ou à l’interruption d’une requête de vérification préalable de la compatibilité sur la base de données pendant l’exécution. Par exemple, sur des classes d’instance de base de données de petite taille, vous pouvez rencontrer ce problème lorsque la mémoire disponible sur l’instance est insuffisante.  
Vous pouvez utiliser la CloudWatch métrique `FreeableMemory` Amazon pour vérifier la mémoire disponible sur l'instance lors de l'exécution des prévérifications. Si l’instance n’a pas suffisamment de mémoire, nous vous recommandons de réessayer la mise à niveau sur une classe d’instance de base de données plus grande. Dans certains cas, vous pouvez utiliser un [déploiement bleu/vert](blue-green-deployments-overview.md). Cela permet aux vérifications préalables et aux mises à niveau de s’exécuter sur le cluster de bases de données « vert » indépendamment de la charge de travail de production, qui consomme également des ressources système.  
Pour plus d’informations, consultez [Résolution des problèmes d’utilisation de la mémoire pour les bases de données Aurora MySQL](ams-workload-memory.md).

**Résumé d’une vérification préalable : une erreur et trois avertissements détectés**  
Les vérifications préalables de la compatibilité contiennent également des informations sur les versions source et cible d’Aurora MySQL, ainsi qu’un résumé du nombre d’erreurs, d’avertissements et de notifications à l’issue de la vérification préalable.  
Par exemple, la sortie suivante indique qu’une tentative de mise à niveau d’Aurora MySQL 2.11.6 vers Aurora MySQL 3.07.1 a été effectuée. Cette mise à niveau a renvoyé une erreur, trois avertissements et aucune notification. Comme les mises à niveau ne peuvent pas être effectuées lorsqu'une erreur est renvoyée, vous devez résoudre le problème de [routineSyntaxCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#routineSyntaxCheck)compatibilité et réessayer la mise à niveau.  

```
{
  "serverAddress": "/tmp%2Fmysql.sock",
  "serverVersion": "5.7.12 - MySQL Community Server (GPL)",
  "targetVersion": "8.0.36",
  "auroraServerVersion": "2.11.6",
  "auroraTargetVersion": "3.07.1",
  "outfilePath": "/rdsdbdata/tmp/PreChecker.log",
  "checksPerformed": [{
      ... output for each individual precheck ...
      .
      .
      {
        "id": "oldTemporalCheck",
        "title": "Usage of old temporal type",
        "status": "OK",
          "detectedProblems": []
      },
      {
        "id": "routinesSyntaxCheck",
        "title": "MySQL 8.0 syntax check for routine-like objects",
        "status": "OK",
        "description": "The following objects did not pass a syntax check with the latest MySQL 8.0 grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
        "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
        "detectedProblems": [{
            "level": "Error",
            "dbObject": "test.select_res_word",
            "description": "at line 2,18: unexpected token 'except'"
        }]
      },
      .
      .
      .
      {
        "id": "zeroDatesCheck",
        "title": "Zero Date, Datetime, and Timestamp values",
        "status": "OK",
        "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
        "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
        "detectedProblems": [{
            "level": "Warning",
            "dbObject": "global.sql_mode",
            "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            },
            {
            "level": "Warning",
            "dbObject": "session.sql_mode",
            "description": " of 8 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            }
          ]
       },
       .
       .
       .
  }],
  "errorCount": 1,
  "warningCount": 3,
  "noticeCount": 0,
  "Summary": "1 errors were found. Please correct these issues before upgrading to avoid compatibility issues."
}
```

## Vérification préalable des performances pour Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.performance"></a>

Les vérifications préalables de la compatibilité s’exécutent avant que l’instance de base de données soit mise hors ligne pour la mise à niveau. Leur exécution n’implique donc aucune durée d’indisponibilité. Cependant, elles peuvent avoir un impact sur la charge de travail de l’application exécutée sur l’instance de base de données d’enregistreur. Les vérifications préalables accèdent au dictionnaire de données via les tables [information\$1schema](https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/information-schema-introduction.html), un processus qui peut être lent si le nombre d’objets de base de données est élevé. Prenez en compte les facteurs suivants :
+ La durée de la vérification préalable varie en fonction du nombre d’objets de base de données tels que les tables, les colonnes, les routines et les contraintes. L’exécution des clusters de bases de données contenant un grand nombre d’objets peut prendre plus de temps.

  Par exemple, cela [removedFunctionsCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#removedFunctionsCheck)peut prendre plus de temps et utiliser plus de ressources en fonction du nombre d'[objets stockés](https://dev.mysql.com/doc/refman/5.7/en/stored-objects.html).
+ Pour les mises à niveau sur place, l’utilisation d’une classe d’instance de base de données de grande taille (par exemple, db.r5.24xlarge ou db.r6g.16xlarge) peut accélérer la mise à niveau grâce à davantage de processeur. Vous pourrez réduire la taille de la classe d’instance de base de données après la mise à niveau.
+ Les requêtes portant sur `information_schema` entre plusieurs bases de données peuvent être lentes, notamment si le nombre d’objets est élevé et si les instances de base de données sont de petite taille. Dans ce cas, envisagez d’utiliser le clonage, la restauration d’instantané ou un [déploiement bleu/vert](blue-green-deployments-overview.md) pour les mises à niveau.
+ L’utilisation des ressources (processeur, mémoire) par la vérification préalable peut augmenter avec la hausse du nombre d’objets, ce qui entraîne des durées d’exécution plus longues sur les instances de base de données de petite taille. Dans de tels cas, pensez à effectuer des tests à l'aide du clonage, de la restauration de snapshots ou d'un Blue/Green déploiement pour les mises à niveau.

  Si les vérifications préalables échouent en raison de ressources insuffisantes, vous pouvez détecter ce problème dans le journal de vérification préalable à l’aide de la sortie d’état :

  ```
  "status": "ERROR",
  ```

Pour plus d’informations, consultez [Fonctionnement de la mise à niveau sur place d’une version majeure de Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence) et [Planification d’une mise à niveau de version majeure d’un cluster Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning).

## Résumé des vérifications préalables de mise à niveau de Community MySQL
<a name="AuroraMySQL.upgrade-prechecks.community"></a>

Voici une liste générale des incompatibilités entre MySQL 5.7 et 8.0 :
+ Votre cluster de bases de données compatible avec MySQL 5.7 ne doit pas utiliser de fonctionnalités non prises en charge par MySQL 8.0.

  Pour plus d’informations, consultez [Fonctionnalités supprimées dans MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals) dans la documentation MySQL.
+ Il ne doit y avoir aucune violation de mot clé ou de mot réservé. Certains mots clés doivent être réservés dans MySQL 8.0 alors qu’ils ne l’étaient pas par le passé.

  Pour en savoir plus, consultez [Mots clés et mots réservés](https://dev.mysql.com/doc/refman/8.0/en/keywords.html) dans la documentation MySQL.
+ Pour une meilleure prise en charge d’Unicode, envisagez de convertir les objets qui utilisent le jeu de caractères `utf8mb3` pour utiliser le jeu de caractères `utf8mb4`. Le jeu de caractères `utf8mb3` est obsolète. Envisagez également d’utiliser `utf8mb4` pour référencer les jeux de caractères au lieu de `utf8`. Actuellement, `utf8` est un alias du jeu de caractères `utf8mb3`.

  Pour en savoir plus, consultez [ Le jeu de caractères utf8mb3 (encodage Unicode 3 octets en UTF-8)](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html) dans la documentation MySQL.
+ Il ne doit y avoir aucune table InnoDB avec un format de ligne autre que celui par défaut.
+ Il ne doit y avoir aucun attribut de type longueur `ZEROFILL` ou `display`.
+ Aucune table partitionnée ne doit utiliser de moteur de stockage dépourvu de prise en charge native du partitionnement.
+ Aucune table de la base de données du système `mysql`dans MySQL 5.7 ne doit avoir le même nom que la table utilisée dans le dictionnaire de données MySQL 8.0.
+ Les tables ne doivent pas utiliser de fonctions ou de types de données obsolètes.
+ Aucun nom de contrainte de clé étrangère ne doit dépasser 64 caractères.
+ Aucun mode SQL obsolète ne doit être défini dans la configuration variable de votre système `sql_mode`.
+ Aucune table ni procédure stockée avec des éléments de colonne `ENUM` ou `SET` individuels ne doit dépasser 255 caractères de longueur.
+ Aucune partition de table ne doit se trouver dans les espaces de table InnoDB partagés.
+ Il ne doit pas y avoir aucune référence circulaire dans les chemins des fichiers de données des espaces de table.
+ Aucune requête ni définition de programme stockée ne doit utiliser de qualificateur `ASC` ou `DESC` pour les clauses `GROUP BY`.
+ Aucune variable système ne doit être supprimée, et les variables système doivent utiliser les nouvelles valeurs par défaut pour MySQL 8.0.
+ Aucune valeur de date, de date/heure ou d’horodatage ne doit correspondre à zéro (`0`).
+ Il ne doit y avoir aucune incohérence de schéma résultant de la suppression ou de la corruption de fichiers.
+ Aucun nom de table ne doit contenir la chaîne de caractères `FTS`.
+ Aucune table InnoDB ne doit appartenir à un autre moteur.
+ Tous les noms de table ou de schéma doivent être valides pour MySQL 5.7.

Pour plus de détails sur les vérifications préalables exécutées, consultez [Référence des vérifications préalables avec description pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

Pour plus d’informations sur la mise à niveau vers MySQL 8.0, consultez [Mise à niveau de MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) dans la documentation MySQL. Pour une description générale des modifications apportées dans MySQL 8.0, consultez [Nouveautés de MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) dans la documentation MySQL.

## Résumé des vérifications préalables de mise à niveau d’Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.ams"></a>

Aurora MySQL a des exigences spécifiques lors de la mise à niveau de la version 2 vers la version 3, notamment les suivantes :
+ Il ne doit pas y avoir de syntaxe SQL obsolète, telle que `SQL_CACHE`, `SQL_NO_CACHE` et `QUERY_CACHE`, dans les vues, les routines, les déclencheurs et les événements.
+ Aucune colonne `FTS_DOC_ID` ne peut se trouver dans une table sans l’index `FTS`.
+ Il ne doit y avoir aucune incompatibilité de définition de colonne entre le dictionnaire de données InnoDB et la définition réelle de la table.
+ Tous les noms de bases de données et de tables doivent être en minuscules lorsque le paramètre `lower_case_table_names` est défini sur `1`.
+ Les déclencheurs ne doivent pas avoir de definer manquant ou vide, ni de contexte de création non valide.
+ Tous les noms de déclencheurs d’une base de données doivent être uniques.
+ Les restaurations DDL et Fast DDL ne sont pas prises en charge dans Aurora MySQL version 3. Les bases de données ne doivent contenir aucun artefact lié à ces fonctionnalités.
+ Les tables au format de ligne `REDUNDANT` ou `COMPACT` ne peuvent pas avoir d’index supérieurs à 767 octets.
+ La longueur du préfixe des index définis sur les colonnes de texte `tiny` ne peut pas dépasser 255 octets. Avec le jeu de caractères `utf8mb4`, cela limite la longueur de préfixe prise en charge à 63 caractères.

  Une longueur de préfixe plus grande était autorisée dans MySQL 5.7 en utilisant le paramètre `innodb_large_prefix`. Ce paramètre est obsolète dans MySQL 8.0.
+ Il ne doit y avoir aucune incohérence des métadonnées InnoDB dans la table `mysql.host`.
+ Il ne doit pas y avoir de différence de type de données de colonne dans les tables système.
+ Il ne doit y avoir aucune transaction XA à l’état `prepared`.
+ Les noms de colonne dans les vues ne peuvent pas dépasser 64 caractères.
+ Les caractères spéciaux des procédures stockées ne peuvent pas être incohérents.
+ Les tables ne peuvent pas avoir d’incohérences entre les chemins des fichiers de données.

Pour plus de détails sur les vérifications préalables exécutées, consultez [Référence des vérifications préalables avec description pour Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

# Référence des vérifications préalables avec description pour Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.descriptions"></a>

Les vérifications préalables de mise à niveau pour Aurora MySQL sont décrites ici en détail.

**Contents**
+ [Erreurs](#precheck-descriptions-errors)
  + [Vérifications préalables de MySQL qui signalent des erreurs](#precheck-descriptions-errors.mysql)
  + [Vérifications préalables d’Aurora MySQL qui signalent des erreurs](#precheck-descriptions-errors.aurora)
+ [Avertissements](#precheck-descriptions-warnings)
  + [Vérifications préalables de MySQL qui signalent des avertissements](#precheck-descriptions-warnings.mysql)
  + [Vérifications préalables d’Aurora MySQL qui signalent des avertissements](#precheck-descriptions-warnings.aurora)
+ [Notifications](#precheck-descriptions-notices)
+ [Erreurs, avertissements ou notifications](#precheck-descriptions-all)

## Erreurs
<a name="precheck-descriptions-errors"></a>

Les vérifications préalables suivantes génèrent des erreurs lorsque la vérification préalable échoue et que la mise à niveau ne peut pas avoir lieu.

**Topics**
+ [Vérifications préalables de MySQL qui signalent des erreurs](#precheck-descriptions-errors.mysql)
+ [Vérifications préalables d’Aurora MySQL qui signalent des erreurs](#precheck-descriptions-errors.aurora)

### Vérifications préalables de MySQL qui signalent des erreurs
<a name="precheck-descriptions-errors.mysql"></a>

Les vérifications préalables suivantes sont tirées de Community MySQL :
+ [checkTableMysqlSchema](#checkTableMysqlSchema)
+ [circularDirectoryCheck](#circularDirectoryCheck)
+ [columnsWhichCannotHaveDefaultsCheck](#columnsWhichCannotHaveDefaultsCheck)
+ [depreciatedSyntaxCheck](#depreciatedSyntaxCheck)
+ [engineMixupCheck](#engineMixupCheck)
+ [enumSetElementLengthCheck](#enumSetElementLengthCheck)
+ [foreignKeyLengthCheck](#foreignKeyLengthCheck)
+ [getDuplicateTriggers](#getDuplicateTriggers)
+ [getEventsWithNullDefiner](#getEventsWithNullDefiner)
+ [getMismatchedMetadata](#getMismatchedMetadata)
+ [getTriggersWithNullDefiner](#getTriggersWithNullDefiner)
+ [getValueOfVariablelower\$1case\$1table\$1names](#getValueOfVariable)
+ [groupByAscSyntaxCheck](#groupByAscSyntaxCheck)
+ [mysqlEmptyDotTableSyntaxCheck](#mysqlEmptyDotTableSyntaxCheck)
+ [mysqlIndexTooLargeCheck](#mysqlIndexTooLargeCheck)
+ [mysqlInvalid57NamesCheck](#mysqlInvalid57NamesCheck)
+ [mysqlOrphanedRoutinesCheck](#mysqlOrphanedRoutinesCheck)
+ [mysqlSchemaCheck](#mysqlSchemaCheck)
+ [nonNativePartitioningCheck](#nonNativePartitioningCheck)
+ [oldTemporalCheck](#oldTemporalCheck)
+ [partitionedTablesInSharedTablespaceCheck](#partitionedTablesInSharedTablespace)
+ [removedFunctionsCheck](#removedFunctionsCheck)
+ [routineSyntaxCheck](#routineSyntaxCheck)
+ [schemaInconsistencyCheck](#schemaInconsistencyCheck)

**checkTableMysqlSchema**  
**Niveau de vérification préalable : erreur**  
**Problèmes signalés par la commande `check table x for upgrade` pour le schéma `mysql`**  
Avant de démarrer la mise à niveau vers Aurora MySQL version 3, `check table for upgrade` est exécuté sur chaque table du schéma `mysql` de l’instance de base de données. La commande `check table for upgrade` examine les tables pour détecter tout problème potentiel pouvant survenir lors d’une mise à niveau vers une version plus récente de MySQL. L’exécution de cette commande avant de tenter une mise à niveau contribue à identifier et à résoudre les incompatibilités à l’avance, ce qui facilite le processus de mise à niveau réel.  
Cette commande effectue différentes vérifications sur chaque table, telles que les suivantes :  
+ Vérification de la compatibilité de la structure et des métadonnées de la table avec la version MySQL cible
+ Identification des fonctionnalités obsolètes ou supprimées qui sont utilisées par la table
+ Confirmation de la possibilité de mettre à niveau la table sans perte de données
Pour plus d’informations, consultez [Instruction CHECK TABLE](https://dev.mysql.com/doc/refman/5.7/en/check-table.html) dans la documentation MySQL.  
**Exemple de sortie :**  

```
{
  "id": "checkTableMysqlSchema",
  "title": "Issues reported by 'check table x for upgrade' command for mysql schema.",
  "status": "OK",
  "detectedProblems": []
}
```
Le résultat de cette vérification préalable dépend de l’erreur rencontrée et du moment où elle est détectée, car `check table for upgrade` effectue plusieurs vérifications.  
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’[AWS Support](https://aws.amazon.com/support) pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3.

**circularDirectoryCheck**  
**Niveau de vérification préalable : erreur**  
**Références circulaires à des répertoires dans les chemins de fichiers de données des espaces de table**  
Depuis [MySQL 8.0.17](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html), la clause `CREATE TABLESPACE ... ADD DATAFILE` n’autorise plus les références circulaires à des répertoires. Pour éviter les problèmes de mise à niveau, supprimez toutes les références circulaires à des répertoires dans les chemins de fichiers de données des espaces de table avant de passer à Aurora MySQL version 3.  
**Exemple de sortie :**  

```
{
  "id": "circularDirectory",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "description": "Error: Following tablespaces contain circular directory references (e.g. the reference '/../') in data file paths which as of MySQL 8.0.17 are not permitted by the CREATE TABLESPACE ... ADD DATAFILE clause. An exception to the restriction exists on Linux, where a circular directory reference is permitted if the preceding directory is a symbolic link. To avoid upgrade issues, remove any circular directory references from tablespace data file paths before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-innodb-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "ts2",
        "description": "circular reference in datafile path: '/home/ec2-user/dbdata/mysql_5_7_44/../ts2.ibd'",
        "dbObjectType": "Tablespace"
      }
  ]
}
```
Si vous recevez cette erreur, reconstruisez vos tables à l’aide d’un [espace de table de fichier par table](https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html). Utilisez les chemins de fichier par défaut pour tous les espaces de table et toutes les définitions de tables.  
Aurora MySQL ne prend pas en charge les espaces de table généraux ni les commandes `CREATE TABLESPACE`.  
Avant de reconstruire les espaces de table, consultez [Online DDL operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan.
Après la reconstruction, la vérification préalable aboutit, ce qui permet à la mise à niveau d’avoir lieu.  

```
{
  "id": "circularDirectoryCheck",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "detectedProblems": []
},
```

**columnsWhichCannotHaveDefaultsCheck**  
**Niveau de vérification préalable : erreur**  
**Colonnes ne pouvant pas avoir de valeur par défaut**  
Avant MySQL 8.0.13, les colonnes `BLOB`, `TEXT`, `GEOMETRY` et `JSON` ne pouvaient pas avoir de [valeur par défaut](https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html). Supprimez toutes les clauses par défaut sur ces colonnes avant de procéder à la mise à niveau vers Aurora MySQL version 3. Pour plus d’informations sur les modifications apportées à la gestion par défaut de ces types de données, consultez [Valeurs par défaut des types de données](https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html) dans la documentation MySQL.  
**Exemple de sortie :**  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "description": "Error: The following columns are defined as either BLOB, TEXT, GEOMETRY or JSON and have a default value set. These data types cannot have default values in MySQL versions prior to 8.0.13, while starting with 8.0.13, the default value must be specified as an expression. In order to fix this issue, please use the ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT statement.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html#data-type-defaults-explicit",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test_blob_default.geo_col",
        "description": "geometry"
      }
  ]
},
```
La vérification préalable renvoie une erreur, car la colonne `geo_col` de la table `test.test_blob_default` utilise un type de données `BLOB`, `TEXT`, `GEOMETRY` ou `JSON` avec une valeur par défaut spécifiée.  
En regardant la définition de la table, nous pouvons voir que la colonne `geo_col` est définie comme `geo_col geometry NOT NULL default ''`.  

```
mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1
```
Supprimez cette clause par défaut pour permettre à la vérification préalable d’aboutir.  
Avant d’exécuter des instructions `ALTER TABLE` ou de reconstruire des espaces de table, consultez [Opérations DDL en ligne](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan.

```
mysql> ALTER TABLE test_blob_default modify COLUMN geo_col geometry NOT NULL;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
```
La vérification préalable aboutit. Vous pouvez donc réessayer la mise à niveau.  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "detectedProblems": []
},
```

**depreciatedSyntaxCheck**  
**Niveau de vérification préalable : erreur**  
**Utilisation de mots clés dépréciés dans la définition**  
MySQL 8.0 a supprimé le [cache de requêtes](https://dev.mysql.com/doc/refman/5.7/en/query-cache.html). Par conséquent, certaines syntaxes SQL spécifiques au cache de requêtes ont été supprimées. Si l’un des objets de votre base de données contient les mots clés `QUERY CACHE`, `SQL_CACHE` ou `SQL_NO_CACHE`, une erreur de vérification préalable est renvoyée. Pour résoudre ce problème, recréez ces objets en supprimant les mots clés mentionnés.  
**Exemple de sortie :**  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "description": "Error: The following DB objects contain keywords like 'QUERY CACHE', 'SQL_CACHE', 'SQL_NO_CACHE' which are not supported in major version 8.0. It is recommended to drop these DB objects or rebuild without any of the above keywords before upgrade.",
  "detectedProblems": [
      {
"level": "Error",
"dbObject": "test.no_query_cache_check",
"description": "PROCEDURE uses depreciated words in definition"
      }
  ]
}
```
La vérification préalable indique que la procédure stockée `test.no_query_cache_check` utilise l’un des mots clés supprimés. En regardant la définition de la procédure, nous pouvons voir qu’elle utilise `SQL_NO_CACHE`.  

```
mysql> show create procedure test.no_query_cache_check\G
*************************** 1. row ***************************
           Procedure: no_query_cache_check
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`()
BEGIN
    SELECT SQL_NO_CACHE k from sbtest1 where id > 10 and id < 20 group by k asc;
END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Supprimez le mot clé.  

```
mysql> drop procedure test.no_query_cache_check;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter //

mysql> CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`() BEGIN     SELECT k from sbtest1 where id > 10 and id < 20 group by k asc; END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
```
Une fois le mot clé supprimé, la vérification préalable aboutit.  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "detectedProblems": []
}
```

**engineMixupCheck**  
**Niveau de vérification préalable : erreur**  
**Tables reconnues par InnoDB et qui appartiennent à un autre moteur**  
Semblable à [schemaInconsistencyCheck](#schemaInconsistencyCheck), cette vérification préalable s’assure que les métadonnées des tables dans MySQL sont cohérentes avant de procéder à la mise à niveau.   
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’[AWS Support](https://aws.amazon.com/support) pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3.  
**Exemple de sortie :**  

```
{
  "id": "engineMixupCheck",
  "title": "Tables recognized by InnoDB that belong to a different engine",
  "status": "OK",
  "description": "Error: Following tables are recognized by InnoDB engine while the SQL layer believes they belong to a different engine. Such situation may happen when one removes InnoDB table files manually from the disk and creates e.g. a MyISAM table with the same name.\n\nA possible way to solve this situation is to e.g. in case of MyISAM table:\n\n1. Rename the MyISAM table to a temporary name (RENAME TABLE).\n2. Create some dummy InnoDB table (its definition does not need to match), then copy (copy, not move) and rename the dummy .frm and .ibd files to the orphan name using OS file commands.\n3. The orphan table can be then dropped (DROP TABLE), as well as the dummy table.\n4. Finally the MyISAM table can be renamed back to its original name.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.general_log_backup",
        "description": "recognized by the InnoDB engine but belongs to CSV"
      }
  ]
}
```

**enumSetElementLengthCheck**  
**Niveau de vérification préalable : erreur**  
**Définitions de colonnes `ENUM` et `SET` contenant des éléments de plus de 255 caractères**  
Les tables et les procédures stockées ne doivent pas comporter d’éléments de colonne `ENUM` ou `SET` de plus de 255 caractères ou 1 020 octets. Avant MySQL 8.0, la longueur combinée maximale était de 64K, mais la version 8.0 limite les éléments individuels à 255 caractères ou 1 020 octets (en prenant en charge les multioctets). En cas d’échec de la vérification préalable pour `enumSetElementLengthCheck`, modifiez tous les éléments dépassant ces nouvelles limites avant de réessayer la mise à niveau.  
**Exemple de sortie :**  

```
{
  "id": "enumSetElementLengthCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "description": "Error: The following columns are defined as either ENUM or SET and contain at least one element longer that 255 characters. They need to be altered so that all elements fit into the 255 characters limit.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.large_set.s",
        "description": "SET contains element longer than 255 characters"
      }
  ]
},
```
La vérification préalable signale une erreur, car la colonne `s` dans la table `test.large_set` contient un élément `SET` de plus de 255 caractères.  
Après avoir réduit la taille `SET` de cette colonne, la vérification préalable aboutit, ce qui permet à la mise à niveau d’avoir lieu.  

```
{
  "id": "enumSetElementLenghtCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "detectedProblems": []
},
```

**foreignKeyLengthCheck**  
**Niveau de vérification préalable : erreur**  
**Noms de contrainte de clé étrangère dépassant 64 caractères**  
Dans MySQL, la longueur des identifiants est limitée à 64 caractères, comme indiqué dans la [documentation MySQL](https://dev.mysql.com/doc/refman/8.0/en/identifier-length.html). En raison de [problèmes](https://bugs.mysql.com/bug.php?id=88118) identifiés où la longueur des clés étrangères pouvait être égale ou supérieure à cette valeur, entraînant des échecs de mise à niveau, cette vérification préalable a été mise en œuvre. Si vous rencontrez des erreurs lors de cette vérification préalable, vous devez [modifier ou renommer](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html) votre contrainte afin qu’elle comporte moins de 64 caractères avant de réessayer la mise à niveau.  
**Exemple de sortie :**  

```
{
  "id": "foreignKeyLength",
  "title": "Foreign key constraint names longer than 64 characters",
  "status": "OK",
  "detectedProblems": []
}
```

**getDuplicateTriggers**  
**Niveau de vérification préalable : erreur**  
**Tous les noms de déclencheurs d’une base de données doivent être uniques.**  
En raison des modifications apportées à l’implémentation du dictionnaire de données, MySQL 8.0 ne prend pas en charge les déclencheurs sensibles à la casse dans une base de données. Cette vérification préalable s’assure que votre cluster de bases de données ne possède pas de bases de données contenant des déclencheurs dupliqués. Pour plus d’informations, consultez [Sensibilité à la casse des identifiants](https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html) dans la documentation MySQL.  
**Exemple de sortie :**  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "description": "Error: You have one or more database containing duplicate triggers. Mysql 8.0 does not support case sensitive triggers within a database https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html. To upgrade to MySQL 8.0, drop the triggers with case-insensitive duplicate names and recreate with distinct names.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_product"
      },
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_PRODUCT"
      }
  ]
}
```
La vérification préalable signale une erreur indiquant que le cluster de bases de données a deux déclencheurs portant le même nom, mais dans avec une casse différente : `test.before_insert_product` et `test.before_insert_PRODUCT`.  
Avant la mise à niveau, renommez les déclencheurs, ou supprimez-les et recréez-les sous un nouveau nom.  
Une fois que le nom `test.before_insert_PRODUCT` est remplacé par `test.before_insert_product_2`, la vérification préalable aboutit.  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "detectedProblems": []
}
```

**getEventsWithNullDefiner**  
**Niveau de vérification préalable : erreur**  
**La colonne DEFINER pour `mysql.event` ne peut pas être nulle ou vide.**  
L’attribut `DEFINER` indique le compte MySQL qui possède une définition d’objet stockée, telle qu’un déclencheur, une procédure stockée ou un événement. Cet attribut est particulièrement utile dans les situations où vous souhaitez contrôler le contexte de sécurité dans lequel s’exécute l’objet stocké. Lorsque vous créez un objet stocké, si `DEFINER` n’est pas spécifié, sa valeur par défaut est l’utilisateur qui a créé l’objet.  
Lors de la mise à niveau vers MySQL 8.0, vous ne pouvez stocker aucun objet contenant un attribut DEFINER `null` ou vide dans le dictionnaire de données MySQL. Si vous avez des objets stockés de ce type, une erreur de vérification préalable sera générée. Vous devrez la corriger avant de pouvoir procéder à la mise à niveau.  
Exemple d’erreur :  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "description": "Error: Set definer column in mysql.event to a valid non-null definer.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.get_version",
        "description": "Set definer for event get_version in Schema test"
      }
  ]
}
```
La vérification préalable renvoie une erreur pour l’[événement](https://dev.mysql.com/doc/refman/5.7/en/events-overview.html) `test.get_version`, car celui-ci possède un attribut DEFINER `null`.  
Pour résoudre ce problème, vous pouvez vérifier la définition de l’événement. Comme vous pouvez le constater, l’attribut DEFINER est `null` ou vide.  

```
mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+---------+
| db   | name        | definer |
+------+-------------+---------+
| test | get_version |         |
+------+-------------+---------+
1 row in set (0.00 sec)
```
Supprimez ou recréez l’événement avec un attribut DEFINER valide.  
Avant de supprimer ou de redéfinir un `DEFINER`, examinez attentivement votre demande et vérifiez les exigences en matière de privilèges. Pour plus d’informations, consultez [Stored object access control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html) dans la documentation MySQL.

```
mysql> drop event test.get_version;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> delimiter $$
mysql> CREATE EVENT get_version
    ->     ON SCHEDULE
    ->       EVERY 1 DAY
    ->     DO
    ->      ///DO SOMETHING //
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+------------+
| db   | name        | definer    |
+------+-------------+------------+
| test | get_version | reinvent@% |
+------+-------------+------------+
1 row in set (0.00 sec)
```
Maintenant, la vérification préalable aboutit.  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "detectedProblems": []},
```

**getMismatchedMetadata**  
**Niveau de vérification préalable : erreur**  
**Incompatibilité de définition de colonne entre le dictionnaire de données InnoDB et la définition réelle de la table**  
Semblable à [schemaInconsistencyCheck](#schemaInconsistencyCheck), cette vérification préalable s’assure que les métadonnées des tables dans MySQL sont cohérentes avant de procéder à la mise à niveau. Dans ce cas, la vérification préalable s’assure que les définitions de colonnes correspondent entre le dictionnaire de données InnoDB et la définition de table MySQL. Si une incompatibilité est détectée, la mise à niveau n’a pas lieu.  
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’[AWS Support](https://aws.amazon.com/support) pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3.  
**Exemple de sortie :**  

```
{
  "id": "getMismatchedMetadata",
  "title": "Column definition mismatch between InnoDB Data Dictionary and actual table definition.",
  "status": "OK",
  "description": "Error: Your database has mismatched metadata. The upgrade to mysql 8.0 will not succeed until this is fixed.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.mismatchTable",
        "description": "Table `test/mismatchTable` column names mismatch with InnoDb dictionary column names: iD <> id"
      }
  ]
}
```
La vérification préalable signale une incohérence des métadonnées dans la colonne `id` de la table `test.mismatchTable`. Plus précisément, les métadonnées MySQL utilisent le nom de colonne `iD`, tandis qu’InnoDB utilise le nom de colonne `id`.

**getTriggersWithNullDefiner**  
**Niveau de vérification préalable : erreur**  
**La colonne DEFINER pour `information_schema.triggers` ne peut pas être `null` ou vide.**  
La vérification préalable s’assure que votre base de données ne possède aucun déclencheur défini avec un attribut DEFINER `null` ou vide. Pour plus d’informations sur les exigences relatives à l’attribut DEFINER pour les objets stockés, consultez [getEventsWithNullDefiner](#getEventsWithNullDefiner).  
**Exemple de sortie :**  

```
{
  "id": "getTriggersWithNullDefiner",
  "title": "The definer column for information_schema.triggers cannot be null or blank.",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.example_trigger",
        "description": "Set definer for trigger example_trigger in Schema test"
      }
  ]
}
```
La vérification préalable renvoie une erreur, car l’attribut DEFINER du déclencheur `example_trigger` du schéma `test` est `null`. Pour corriger ce problème, corrigez cet attribut en recréant le déclencheur avec un utilisateur valide, ou supprimez le déclencheur. Pour plus d’informations, consultez l’exemple dans [getEventsWithNullDefiner](#getEventsWithNullDefiner).  
Avant de supprimer ou de redéfinir un `DEFINER`, examinez attentivement votre demande et vérifiez les exigences en matière de privilèges. Pour plus d’informations, consultez [Stored object access control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html) dans la documentation MySQL.

**getValueOfVariablelower\$1case\$1table\$1names**  
**Niveau de vérification préalable : erreur**  
**Tous les noms de base de données ou de table doivent être en minuscules lorsque le paramètre `lower_case_table_names` est défini sur `1`.**  
Avant MySQL 8.0, les noms de base de données, les noms de table et les autres objets correspondaient à des fichiers du répertoire de données, tels que des métadonnées basées sur des fichiers (.frm). La variable système [lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html) permet aux utilisateurs de contrôler la façon dont le serveur gère la sensibilité à la casse des identifiants pour les objets de base de données et le stockage de ces objets de métadonnées. Ce paramètre pouvait être modifié sur un serveur déjà initialisé après un redémarrage.  
Cependant, dans MySQL 8.0, bien que ce paramètre contrôle toujours la façon dont le serveur gère la sensibilité à la casse, il ne peut pas être modifié une fois le dictionnaire de données initialisé. Lors de la mise à niveau ou de la création d’une base de données MySQL 8.0, la valeur définie pour `lower_case_table_names` lors du premier démarrage du dictionnaire de données sur MySQL est utilisée pendant toute la durée de vie de cette base de données. Cette restriction a été mise en place dans le cadre de l’implémentation de l’[Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html), où les objets de base de données sont migrés à partir de métadonnées basées sur des fichiers vers des tables InnoDB internes du schéma `mysql`.  
Pour plus d’informations, consultez [Modifications du dictionnaire de données](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-data-dictionary-changes) dans la documentation MySQL.  
Pour éviter les problèmes lors de la mise à niveau quand les métadonnées basées sur des fichiers sont migrées vers le nouveau dictionnaire Atomic Data Dictionary, cette vérification préalable permet de s’assurer que toutes les tables sont stockées sur le disque en minuscules quand `lower_case_table_names = 1`. Si ce n’est pas le cas, une erreur de vérification préalable est renvoyée et vous devrez corriger les métadonnées avant de procéder à la mise à niveau.  
**Exemple de sortie :**  

```
{
  "id": "getValueOfVariablelower_case_table_names",
  "title": "MySQL pre-checks that all database or table names are lowercase when the lower_case_table_names parameter is set to 1.",
  "status": "OK",
  "description": "Error: You have one or more databases or tables with uppercase letters in the names, but the lower_case_table_names parameter is set to 1. To upgrade to MySQL 8.0, either change all database or table names to lowercase, or set the parameter to 0.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.TEST",
        "description": "Table test.TEST contains one or more capital letters in name while lower_case_table_names = 1"
      }
  ]
}
```
Une erreur est renvoyée, car la table `test.TEST` contient des majuscules alors que `lower_case_table_names` est défini sur `1`.  
Pour résoudre ce problème, vous pouvez modifier le nom de la table pour qu’il soit en minuscules ou modifier le paramètre `lower_case_table_names` sur le cluster de bases de données avant de démarrer la mise à niveau.  
Testez et examinez attentivement la documentation sur la [sensibilité à la casse](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html) dans MySQL et sur la manière dont ce type de changements pourrait affecter votre application.  
Consultez également la documentation de MySQL 8.0 pour déterminer les différences liées à la gestion de [lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names) dans MySQL 8.0.

**groupByAscSyntaxCheck**  
**Niveau de vérification préalable : erreur**  
**Utilisation de la syntaxe `GROUP BY ASC/DESC` supprimée**  
Depuis MySQL 8.0.13, la syntaxe `ASC` ou `DESC` obsolète pour les clauses `GROUP BY` a été supprimée. Les requêtes basées sur le tri `GROUP BY` peuvent désormais générer des résultats différents. Pour obtenir un ordre de tri spécifique, utilisez plutôt une clause `ORDER BY`. Si des objets utilisent cette syntaxe dans votre base de données, vous devrez les recréer à l’aide d’une clause `ORDER BY` avant de réessayer la mise à niveau. Pour plus d’informations, consultez [Modifications SQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-sql-changes) dans la documentation MySQL.  
**Exemple de sortie :**  

```
{
  "id": "groupbyAscSyntaxCheck",
  "title": "Usage of removed GROUP BY ASC/DESC syntax",
  "status": "OK",
  "description": "Error: The following DB objects use removed GROUP BY ASC/DESC syntax. They need to be altered so that ASC/DESC keyword is removed from GROUP BY clause and placed in appropriate ORDER BY clause.",
  "documentationLink": "https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-sql-syntax",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.groupbyasc",
        "description": "PROCEDURE uses removed GROUP BY ASC syntax",
        "dbObjectType": "Routine"
      }
  ]
}
```

**mysqlEmptyDotTableSyntaxCheck**  
**Niveau de vérification préalable : erreur**  
**Rechercher l’utilisation de la syntaxe `.<table>` obsolète dans les routines.**  
Dans MySQL 8.0, les routines ne peuvent plus contenir la syntaxe d’identifiant obsolète (`\".<table>\"`). Si des routines ou des déclencheurs stockés contiennent ce type d’identifiants, la mise à niveau échouera. Par exemple, la référence `.dot_table` suivante n’est plus autorisée :  

```
mysql> show create procedure incorrect_procedure\G
*************************** 1. row ***************************
           Procedure: incorrect_procedure
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `incorrect_procedure`()
BEGIN delete FROM .dot_table; select * from .dot_table where 1=1; END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Une fois que vous avez recréé les routines et les déclencheurs afin d’utiliser la syntaxe d’identifiant et les caractères d’échappement corrects, la vérification préalable aboutit et la mise à niveau peut avoir lieu. Pour plus d’informations, consultez [Noms des objets de schéma](https://dev.mysql.com/doc/refman/8.0/en/identifiers.html) dans la documentation PostgreSQL.  
**Exemple de sortie :**  

```
{
  "id": "mysqlEmptyDotTableSyntaxCheck",
  "title": "Check for deprecated '.<table>' syntax used in routines.",
  "status": "OK",
  "description": "Error: The following routines contain identifiers in deprecated identifier syntax (\".<table>\"), and should be corrected before upgrade:\n",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.incorrect_procedure",
        "description": " routine body contains deprecated identifiers."
      }
  ]
}
```
La vérification préalable renvoie une erreur pour la routine `incorrect_procedure` de la base de données `test`, car elle contient une syntaxe obsolète.  
Une fois que vous avez corrigé la routine, la vérification préalable aboutit et vous pouvez réessayer la mise à niveau.

**mysqlIndexTooLargeCheck**  
**Niveau de vérification préalable : erreur**  
**Rechercher les index qui sont trop volumineux pour fonctionner sur les versions de MySQL supérieures à 5.7**  
Pour les formats de ligne compacts ou redondants, il ne devrait pas être possible de créer un index avec un préfixe supérieur à 767 octets. Cependant, avant la version 5.7.35 de MySQL, cela était possible. Pour plus d’informations, consultez [Notes de mise à jour de MySQL 5.7.35](https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-35.html).  
Tous les index affectés par ce bogue deviendront inaccessibles après la mise à niveau vers MySQL 8.0. Cette vérification préalable identifie les index incriminés qui devront être reconstruits avant que la mise à niveau ne soit autorisée.  

```
 {
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "description": "Error: The following indexes ware made too large for their format in an older version of MySQL (older than 5.7.34). Normally those indexes within tables with compact or redundant row formats shouldn't be larger than 767 bytes. To fix this problem those indexes should be dropped before upgrading or those tables will be inaccessible.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_large_idx",
        "description": "IDX_2"
      }
  ]
}
```
La vérification préalable renvoie une erreur, car la table `test.table_with_large_idx` contient un index sur une table utilisant un format de ligne compact ou redondant de plus de 767 octets. Ces tables deviendraient inaccessibles après la mise à niveau vers MySQL 8.0. Avant de procéder à la mise à niveau, effectuez l’une des actions suivantes :  
+ Supprimez l’index mentionné dans la vérification préalable.
+ Ajoutez un index mentionné dans la vérification préalable.
+ Modifiez le format de ligne utilisé par la table.
Dans ce cas, nous reconstruirons la table pour résoudre l’échec de la vérification préalable. Avant de reconstruire la table, assurez-vous qu’[innodb\$1file\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_format) est défini sur `Barracuda` et qu’[innodb\$1default\$1row\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_default_row_format) est défini sur `dynamic`. Ce sont les valeurs par défaut dans MySQL 5.7. Pour plus d’informations, consultez [Formats de ligne InnoDB](https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format.html) et [Gestion des formats de fichier InnoDB](https://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html) dans la documentation MySQL.  
Avant de reconstruire les espaces de table, consultez [Online DDL operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan.

```
mysql > select @@innodb_file_format,@@innodb_default_row_format;
+----------------------+-----------------------------+
| @@innodb_file_format | @@innodb_default_row_format |
+----------------------+-----------------------------+
| Barracuda            | dynamic                     |
+----------------------+-----------------------------+
1 row in set (0.00 sec)

mysql> optimize table table_with_large_idx;
+---------------------------+----------+----------+-------------------------------------------------------------------+
| Table                     | Op       | Msg_type | Msg_text                                                          |
+---------------------------+----------+----------+-------------------------------------------------------------------+
| test.table_with_large_idx | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.table_with_large_idx | optimize | status   | OK                                                                |
+---------------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.02 sec)

# Verify FILE_FORMAT and ROW_FORMAT
mysql>  select * from information_schema.innodb_sys_tables where name like 'test/table_with_large_idx';
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
| TABLE_ID | NAME                      | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
|       43 | test/table_with_large_idx |   33 |      4 |    26 | Barracuda   | Dynamic    |             0 | Single     |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
1 row in set (0.00 sec)
```
Après avoir reconstruit la table, la vérification préalable aboutit et la mise à niveau peut avoir lieu.  

```
{
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlInvalid57NamesCheck**  
**Niveau de vérification préalable : erreur**  
**Rechercher les noms de table et de schéma non valides utilisés dans MySQL 5.7**  
Après la migration vers le nouveau dictionnaire de données dans MySQL 8.0, votre instance de base de données ne peut plus contenir de schémas ou de tables avec le préfixe `#mysql50#`. Si de tels objets existent, la mise à niveau échouera. Pour résoudre ce problème, exécutez [mysqlcheck](https://dev.mysql.com/doc/refman/8.0/en/mysqlcheck.html) sur les schémas et les tables renvoyés.  
Assurez-vous d’utiliser une [version MySQL 5.7](https://downloads.mysql.com/archives/community/) de `mysqlcheck`, car [--fix-db-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-db-names) et [--fix-table-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-table-names) ont été supprimés de [MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html).
**Exemple de sortie :**  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "description": "The following tables and/or schemas have invalid names. In order to fix them use the mysqlcheck utility as follows:\n\n  $ mysqlcheck --check-upgrade --all-databases\n  $ mysqlcheck --fix-db-names --fix-table-names --all-databases\n\nOR via mysql client, for eg:\n\n  ALTER DATABASE `#mysql50#lost+found` UPGRADE DATA DIRECTORY NAME;",
  "documentationLink": "https://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html https://dev.mysql.com/doc/refman/5.7/en/alter-database.html https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "#mysql50#fix_db_names",
        "description": "Schema name"
      }
  ]
}
```
La vérification préalable indique que le schéma `#mysql50#fix_db_names` n’est pas valide.  
Après avoir corrigé le nom du schéma, la vérification préalable aboutit, ce qui permet à la mise à niveau de se poursuivre.  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlOrphanedRoutinesCheck**  
**Niveau de vérification préalable : erreur**  
**Rechercher les routines orphelines dans la version 5.7**  
Lors de la migration vers le nouveau dictionnaire de données dans MySQL 8.0, s’il existe des procédures stockées dans la base de données où le schéma n’existe plus, la mise à niveau échoue. Cette vérification préalable s’assure que tous les schémas référencés dans les procédures stockées de votre instance de base de données existent toujours. Pour permettre à la mise à niveau de se poursuivre, supprimez ces procédures stockées.  
**Exemple de sortie :**  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "description": "Error: The following routines have been orphaned. Schemas that they are referencing no longer exists.\nThey have to be cleaned up or the upgrade will fail.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "dropped_db.get_version",
        "description": "is orphaned"
      }
  ]
},
```
La vérification préalable indique que la procédure stockée `get_version` dans la base de données `dropped_db` est orpheline.  
Pour nettoyer cette procédure, vous pouvez recréer le schéma manquant.  

```
mysql> create database dropped_db;
Query OK, 1 row affected (0.01 sec)
```
Une fois le schéma recréé, vous pouvez supprimer la procédure pour permettre à la mise à niveau de se poursuivre.  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlSchemaCheck**  
**Niveau de vérification préalable : erreur**  
**Les noms des tables dans le schéma `mysql` sont en conflit avec les nouvelles tables de MySQL 8.0**  
Le nouveau dictionnaire [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) introduit dans MySQL 8.0 stocke toutes les métadonnées dans un ensemble de tables InnoDB internes du schéma `mysql`. Au cours de la mise à niveau, les nouvelles [tables du dictionnaire de données interne](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-schema.html) sont créées dans le schéma `mysql`. Pour éviter les conflits de noms, qui pourraient entraîner des échecs de mise à niveau, la vérification préalable examine tous les noms de table du schéma `mysql` afin de s’assurer qu’aucun des nouveaux noms de table n’est déjà utilisé. Si tel est le cas, une erreur est renvoyée et la mise à niveau n’est pas autorisée à se poursuivre.  
**Exemple de sortie :**  

```
{
  "id": "mysqlSchema",
  "title": "Table names in the mysql schema conflicting with new tables in the latest MySQL.",
  "status": "OK",
  "description": "Error: The following tables in mysql schema have names that will conflict with the ones introduced in the latest version. They must be renamed or removed before upgrading (use RENAME TABLE command). This may also entail changes to applications that use the affected tables.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrade-before-you-begin.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.tablespaces",
        "description": "Table name used in mysql schema.",
        "dbObjectType": "Table"
      }
  ]
}
```
Une erreur est renvoyée, car une table est nommée `tablespaces` dans le schéma `mysql`. Il s’agit de l’un des nouveaux noms de tables du dictionnaire de données interne de MySQL 8.0. Vous devrez renommer ou supprimer ces tables avant de procéder à la mise à niveau, à l’aide de la commande `RENAME TABLE`.

**nonNativePartitioningCheck**  
**Niveau de vérification préalable : erreur**  
**Tables partitionnées à l’aide de moteurs avec partitionnement non natif**  
Selon la [documentation MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html), deux moteurs de stockage prennent actuellement en charge le partitionnement natif : [InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html) et [NDB](https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster.html). Parmi eux, seul InnoDB est pris en charge dans Aurora MySQL version 3, compatible avec MySQL 8.0. Toute tentative de création de tables partitionnées dans MySQL 8.0 à l’aide d’un autre moteur de stockage échouera. Cette vérification préalable recherche les tables de votre cluster de bases de données qui utilisent un partitionnement non natif. Le cas échéant, vous devrez supprimer le partitionnement ou remplacer le moteur de stockage par InnoDB.  
**Exemple de sortie :**  

```
{
  "id": "nonNativePartitioning",
  "title": "Partitioned tables using engines with non native partitioning",
  "status": "OK",
  "description": "Error: In the latest MySQL storage engine is responsible for providing its own partitioning handler, and the MySQL server no longer provides generic partitioning support. InnoDB and NDB are the only storage engines that provide a native partitioning handler that is supported in the latest MySQL. A partitioned table using any other storage engine must be altered—either to convert it to InnoDB or NDB, or to remove its partitioning—before upgrading the server, else it cannot be used afterwards.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-configuration-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partMyisamTable",
         "description": "MyISAM engine does not support native partitioning",
         "dbObjectType": "Table"
      }
  ]
}
```
Ici, une table MyISAM utilise le partitionnement. Une action est donc nécessaire avant que la mise à niveau puisse commencer.

**oldTemporalCheck**  
**Niveau de vérification préalable : erreur**  
**Utilisation du type « anciens temporels »**  
Les « anciens temporels » font référence aux colonnes de type temporel (comme `TIMESTAMP` et `DATETIME`) créées dans les versions 5.5 et antérieures de MySQL. Dans MySQL 8.0, la prise en charge de ces types de données « anciens temporels » est supprimée, ce qui signifie que les mises à niveau sur place de MySQL 5.7 à 8.0 ne sont pas possibles si la base de données en contient encore. Pour résoudre ce problème, vous devez [reconstruire](https://dev.mysql.com/doc/refman/5.7/en/rebuilding-tables.html) toutes les tables contenant ces types de données « anciens temporels » avant de procéder à la mise à niveau.  
Pour plus d’informations sur la dépréciation des types de données « anciens temporels » dans MySQL 5.7, consultez ce [blog](https://dev.mysql.com/blog-archive/how-to-easily-identify-tables-with-temporal-types-in-old-format/). Pour plus d’informations sur la suppression des types de données « anciens temporels » dans MySQL 8.0, consultez ce [blog](https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/).  
Avant de reconstruire les espaces de table, consultez [Online DDL operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan.
**Exemple de sortie :**  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "description": "Error: Following table columns use a deprecated and no longer supported temporal disk storage format. They must be converted to the new format before upgrading. It can by done by rebuilding the table using 'ALTER TABLE <table_name> FORCE' command",
  "documentationLink": "https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.55_temporal_table.timestamp_column",
        "description": "timestamp /* 5.5 binary format */",
        "dbObjectType": "Column"
      }
  ]
},
```
Une erreur est signalée pour la colonne `timestamp_column` de la table `test.55_temporal_table`, car elle utilise un format de stockage sur disque ancien temporel qui n’est plus pris en charge.  
Pour résoudre ce problème et permettre la mise à niveau, reconstruisez la table pour convertir le format de stockage sur disque ancien temporel vers le nouveau format introduit dans MySQL 5.6. Pour plus d’informations et pour connaître les conditions préalables, consultez [Conversion entre les jeux de caractères Unicode à 3 octets et à 4 octets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) dans la documentation MySQL.  
L’exécution de la commande suivante pour reconstruire les tables mentionnées dans cette vérification préalable convertit les types de données « anciens temporels » au nouveau format avec une précision d’une fraction de seconde.  

```
ALTER TABLE ... ENGINE=InnoDB;
```
Pour plus d’informations sur la reconstruction des tables, consultez [Instruction ALTER TABLE](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html) dans la documentation MySQL.  
Après avoir reconstruit la table en question et redémarré la mise à niveau, la vérification de la compatibilité aboutit, ce qui permet à la mise à niveau de se poursuivre.  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "detectedProblems": []
}
```

**partitionedTablesInSharedTablespaceCheck**  
**Niveau de vérification préalable : erreur**  
**Utilisation de tables partitionnées dans les espaces de table partagés**  
Depuis [MySQL 8.0.13](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html), la prise en charge du placement des partitions de table dans les espaces de table partagés est supprimée. Avant la mise à niveau, déplacez ces tables des espaces de table partagés vers des espaces de table de fichier par table.  
Avant de reconstruire les espaces de table, consultez [Partitioning operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning) dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan.
**Exemple de sortie :**  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "description": "Error: The following tables have partitions in shared tablespaces. They need to be moved to file-per-table tablespace before upgrading. You can do this by running query like 'ALTER TABLE table_name REORGANIZE PARTITION X INTO (PARTITION X VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table);'",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partInnoDBTable",
        "description": "Partition p1 is in shared tablespace innodb",
        "dbObjectType": "Table"
      }
  ]
}
```
La vérification préalable échoue, car la partition `p1` de la table `test.partInnoDBTable` se trouve dans l’espace de table du système.  
Pour résoudre ce problème, reconstruisez la table `test.partInnodbTable` en plaçant la partition `p1` en cause dans un espace de table de fichier par table.  

```
mysql > ALTER TABLE partInnodbTable REORGANIZE PARTITION p1
    ->   INTO (PARTITION p1 VALUES LESS THAN ('2014-01-01') TABLESPACE=innodb_file_per_table);
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
Après cela, la vérification préalable aboutira.  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "detectedProblems": []
}
```

**removedFunctionsCheck**  
**Niveau de vérification préalable : erreur**  
**Utilisation de fonctions supprimées de la dernière version de MySQL**  
Dans MySQL 8.0, plusieurs fonctions intégrées ont été supprimées. Cette vérification préalable examine votre base de données à la recherche d’objets susceptibles d’utiliser ces fonctions. Si elle en trouve, une erreur est renvoyée. Vous devrez résoudre ces problèmes avant de réessayer la mise à niveau.  
La majorité des fonctions supprimées sont des [fonctions spatiales](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html), qui ont été remplacées par des fonctions `ST_*` équivalentes. Dans ce cas, modifiez les objets de base de données pour qu’ils utilisent le nom de la nouvelle procédure. Pour plus d’informations, consultez [Fonctionnalités supprimées dans MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals) dans la documentation MySQL.  
**Exemple de sortie :**  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "description": "Error: The following DB objects use functions that were removed in the latest MySQL version. Please make sure to update them to use supported alternatives before upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.GetLocationsInPolygon",
        "description": "PROCEDURE uses removed function POLYGONFROMTEXT (consider using ST_POLYGONFROMTEXT instead)",
        "dbObjectType": "Routine"
      },
      {
        "level": "Error",
        "dbObject": "test.InsertLocation",
        "description": "PROCEDURE uses removed function POINTFROMTEXT (consider using ST_POINTFROMTEXT instead)",
        "dbObjectType": "Routine"
      }
  ]
},
```
La vérification préalable indique que la procédure stockée `test.GetLocationsInPolygon` utilise deux fonctions supprimées : [POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_polyfromtext) et [POINTFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_st-mpointfromtext). Elle suggère également d’utiliser les nouvelles fonctions [ST\$1POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-polyfromtext) et [ST\$1POINTFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-mpointfromtext) à la place. Après avoir recréé la procédure à l’aide des suggestions, la vérification préalable aboutit.  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "detectedProblems": []
},
```
Bien que, dans la plupart des cas, les fonctions obsolètes soient directement remplacées, assurez-vous de tester votre application et de consulter la documentation pour détecter tout changement de comportement résultant de ce changement.

**routineSyntaxCheck**  
**Niveau de vérification préalable : erreur**  
**Recherche d’objets de type routine dans la syntaxe MySQL**  
MySQL 8.0 a introduit des [mots clés réservés](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0) qui ne l’étaient pas auparavant. La vérification préalable à la mise à niveau évalue l’utilisation des mots clés réservés dans les noms des objets de base de données, dans leurs définitions et dans leur corps. Si elle détecte des mots clés réservés utilisés dans des objets de base de données, tels que des procédures stockées, des fonctions, des événements et des déclencheurs, la mise à niveau échoue et une erreur est publiée dans le fichier `upgrade-prechecks.log`. Pour résoudre ce problème, vous devez mettre à jour ces définitions d’objets et placer ces références entre guillemets simples (’) avant de procéder à la mise à niveau. Pour plus d’informations sur l’échappement des mots réservés dans MySQL, consultez [Littéraux de chaîne](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html) dans la documentation MySQL.  
Vous pouvez également remplacer le nom par un autre, ce qui peut impliquer des modifications de l’application.  
**Exemple de sortie :**  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "description": "The following objects did not pass a syntax check with the latest MySQL grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
         "level": "Error",
         "dbObject": "test.select_res_word",
         "description": "at line 2,18: unexpected token 'except'",
         "dbObjectType": "Routine"
      }
  ]
}
```
Pour résoudre ce problème, vérifiez la définition de la routine.  

```
SHOW CREATE PROCEDURE test.select_res_word\G

*************************** 1. row ***************************
           Procedure: select_res_word
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE PROCEDURE 'select_res_word'()
BEGIN
    SELECT * FROM except;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
La procédure utilise une table nommée `except`, qui est un nouveau mot clé dans MySQL 8.0. Recréez la procédure en échappant le littéral de la chaîne.  

```
> drop procedure if exists select_res_word;
Query OK, 0 rows affected (0.00 sec)

> DELIMITER $$
 > CREATE PROCEDURE select_res_word()
    -> BEGIN
    ->     SELECT * FROM 'except';
    -> END$$
Query OK, 0 rows affected (0.00 sec)

 > DELIMITER ;
```
Désormais, la vérification préalable aboutit.  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "detectedProblems": []
}
```

**schemaInconsistencyCheck**  
**Niveau de vérification préalable : erreur**  
**Incohérences de schéma résultant de la suppression ou de l’endommagement de fichiers**  
Comme décrit précédemment, MySQL 8.0 a introduit l’[Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html), qui stocke toutes les métadonnées dans un ensemble de tables InnoDB internes du schéma `mysql`. Cette nouvelle architecture fournit une méthode transactionnelle conforme à l’[ACID](https://en.wikipedia.org/wiki/ACID) pour gérer les métadonnées des bases de données, résolvant ainsi le problème de « DDL atomique » rencontré par l’ancienne approche basée sur les fichiers. Avant MySQL 8.0, les objets de schéma pouvaient devenir orphelins en cas d’interruption inattendue d’une opération DDL. La migration des métadonnées basées sur des fichiers vers les nouvelles tables de l’Atomic Data Dictionary lors de la mise à niveau garantit l’absence d’objets de schéma orphelins de ce type dans l’instance de base de données. Si des objets orphelins sont détectés, la mise à niveau échoue.  
Pour aider à détecter ces objets orphelins avant de lancer la mise à niveau, la vérification préalable `schemaInconsistencyCheck` est exécutée pour s’assurer que tous les objets de métadonnées du dictionnaire de données sont synchronisés. Si des objets de métadonnées orphelins sont détectés, la mise à niveau ne se poursuit pas. Pour procéder à la mise à niveau, nettoyez ces objets de métadonnées orphelins.  
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’[AWS Support](https://aws.amazon.com/support) pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3.  
**Exemple de sortie :**  

```
{
  "id": "schemaInconsistencyCheck",
  "title": "Schema inconsistencies resulting from file removal or corruption",
  "status": "OK",
  "description": "Error: Following tables show signs that either table datadir directory or frm file was removed/corrupted. Please check server logs, examine datadir to detect the issue and fix it before upgrade",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.schemaInconsistencyCheck_failure",
        "description": "present in INFORMATION_SCHEMA's INNODB_SYS_TABLES table but missing from TABLES table"
      }
  ]
}
```
La vérification préalable indique que les métadonnées de la table `test.schemaInconsistencyCheck_failure` ne sont pas cohérentes. Dans ce cas, la table existe dans les métadonnées du moteur de stockage InnoDB (`information_schema.INNODB_SYS_TABLES`), mais pas dans les métadonnées MySQL (`information_schema.TABLES`).

### Vérifications préalables d’Aurora MySQL qui signalent des erreurs
<a name="precheck-descriptions-errors.aurora"></a>

Les vérifications préalables suivantes sont spécifiques à Aurora MySQL :
+ [auroraCheckDDLRecovery](#auroraCheckDDLRecovery)
+ [auroraCheckRdsUpgradePrechecksTable](#auroraCheckRdsUpgradePrechecksTable)
+ [auroraFODUpgradeCheck](#auroraFODUpgradeCheck)
+ [auroraGetDanglingFulltextIndex](#auroraGetDanglingFulltextIndex)
+ [auroraUpgradeCheckForDatafilePathInconsistency](#auroraUpgradeCheckForDatafilePathInconsistency)
+ [auroraUpgradeCheckForFtsSpaceIdZero](#auroraUpgradeCheckForFtsSpaceIdZero)
+ [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions)
+ [auroraUpgradeCheckForInstanceLimit](#auroraUpgradeCheckForInstanceLimit)
+ [auroraUpgradeCheckForInternalUsers](#auroraUpgradeCheckForInternalUsers)
+ [auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews](#auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews)
+ [auroraUpgradeCheckForInvalidUtf8mb3ColumnComments](#auroraUpgradeCheckForInvalidUtf8mb3ColumnComments)
+ [auroraUpgradeCheckForInvalidUtf8mb3IndexComments](#auroraUpgradeCheckForInvalidUtf8mb3IndexComments)
+ [auroraUpgradeCheckForInvalidUtf8mb3TableComments](#auroraUpgradeCheckForInvalidUtf8mb3TableComments)
+ [auroraUpgradeCheckForMasterUser](#auroraUpgradeCheckForMasterUser)
+ [auroraUpgradeCheckForPrefixIndexOnGeometryColumns](#auroraUpgradeCheckForPrefixIndexOnGeometryColumns)
+ [auroraUpgradeCheckForSpecialCharactersInProcedures](#auroraUpgradeCheckForSpecialCharactersInProcedures)
+ [auroraUpgradeCheckForSysSchemaObjectTypeMismatch](#auroraUpgradeCheckForSysSchemaObjectTypeMismatch)
+ [auroraUpgradeCheckForViewColumnNameLength](#auroraUpgradeCheckForViewColumnNameLength)
+ [auroraUpgradeCheckIndexLengthLimitOnTinyColumns](#auroraUpgradeCheckIndexLengthLimitOnTinyColumns)
+ [auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable](#auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable)

**auroraCheckDDLRecovery**  
**Niveau de vérification préalable : erreur**  
**Rechercher la présence d’artefacts liés à la fonctionnalité de restauration DDL d’Aurora**  
Dans le cadre de l’implémentation de la restauration DDL (Data Definition Language) dans Aurora MySQL, les métadonnées des instructions DDL en transit sont conservées dans les tables `ddl_log_md_table` et `ddl_log_table` du schéma `mysql`. L’implémentation de la restauration DDL par Aurora n’est pas prise en charge à partir de la version 3, car cette fonctionnalité fait partie de l’implémentation du nouvel [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) dans MySQL 8.0. Si des instructions DDL sont en cours d’exécution pendant les vérifications de la compatibilité, cette vérification préalable risque d’échouer. Nous vous recommandons d’essayer la mise à niveau quand aucune instruction DDL n’est en cours d’exécution.  
Si cette vérification préalable échoue sans qu’aucune instruction DDL ne soit exécutée, ouvrez une demande d’assistance auprès d’[AWS Support](https://aws.amazon.com/support) pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3.  
Si des instructions DDL sont en cours d’exécution, la sortie de la vérification préalable affiche le message suivant :  

```
“There are DDL statements in process. Please allow DDL statements to finish before upgrading.”
```
**Exemple de sortie :**  

```
{
  "id": "auroraCheckDDLRecovery",
  "title": "Check for artifacts related to Aurora DDL recovery feature",
  "status": "OK",
  "description": "Aurora implementation of DDL recovery is not supported from 3.x onwards. This check verifies that the database do not have artifacts realted to the feature",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_md_table",
        "description": "Table mysql.ddl_log_md_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_table",
        "description": "Table mysql.ddl_log_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "information_schema.processlist",
        "description": "There are DDL statements in process. Please allow DDL statements to finish before upgrading."
      }
  ]
}
```
La vérification préalable a renvoyé une erreur en raison d’une instruction DDL en transit exécutée en même temps que les vérifications de la compatibilité. Nous vous recommandons de réessayer la mise à niveau sans qu’aucune instruction DDL ne soit active.

**auroraCheckRdsUpgradePrechecksTable**  
**Niveau de vérification préalable : erreur**  
**Vérifier l’existence de la table `mysql.rds_upgrade_prechecks`**  
Il s’agit d’une vérification préalable interne, qui est effectuée par le service RDS. Toutes les erreurs seront traitées automatiquement lors de la mise à niveau et peuvent être ignorées sans risque.  
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’[AWS Support](https://aws.amazon.com/support) pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3.  

```
{
  "id": "auroraCheckRdsUpgradePrechecksTable",
  "title": "Check existence of mysql.rds_upgrade_prechecks table",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraFODUpgradeCheck**  
**Niveau de vérification préalable : erreur**  
**Rechercher la présence d’artefacts liés à la fonctionnalité DDL rapide d’Aurora**  
L’optimisation [Fast DDL](AuroraMySQL.Managing.FastDDL.md) a été introduite en [mode Lab](AuroraMySQL.Updates.LabMode.md) sur Aurora MySQL version 2 pour améliorer l’efficacité de certaines opérations DDL. Dans la version 3 d’Aurora MySQL, le mode lab a été supprimé, et l’implémentation de Fast DDL a été remplacée par la fonctionnalité de MySQL 8.0 appelée [Instant DDL](https://dev.mysql.com/doc/refman/8.4/en/innodb-online-ddl-operations.html).  
Avant la mise à niveau vers Aurora MySQL version 3, toutes les tables utilisant Fast DDL en mode Lab doivent être reconstruites en exécutant la commande `OPTIMIZE TABLE` ou `ALTER TABLE ... ENGINE=InnoDB` pour assurer la compatibilité avec Aurora MySQL version 3.  
Cette vérification préalable renvoie la liste de ces tables. Une fois que les tables renvoyées ont été reconstruites, vous pouvez réessayer la mise à niveau.  
**Exemple de sortie :**  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "description": "Aurora fast DDL is not supported from 3.x onwards. This check verifies that the database does not have artifacts related to the feature",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.FastDDL.html#AuroraMySQL.Managing.FastDDL-v2",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test",
        "description": "Your table has pending Aurora fast DDL operations. Run 'OPTIMIZE TABLE <table name>' for the table to apply all the pending DDL updates. Then try the upgrade again."
      }
  ]
}
```
La vérification préalable indique que la table `test.test` contient des opérations Fast DDL en attente.  
Pour permettre la mise à niveau, vous pouvez reconstruire la table, puis réessayer la mise à niveau.  
Avant de reconstruire les espaces de table, consultez [Online DDL operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan.

```
mysql> optimize table test.test;
+-----------+----------+----------+-------------------------------------------------------------------+
| Table     | Op       | Msg_type | Msg_text                                                          |
+-----------+----------+----------+-------------------------------------------------------------------+
| test.test | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.test | optimize | status   | OK                                                                |
+-----------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.04 sec)
```
Après avoir reconstruit la table, la vérification préalable aboutit.  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraGetDanglingFulltextIndex**  
**Niveau de vérification préalable : erreur**  
**Tables avec référence d’index `FULLTEXT` suspendue**  
Avant MySQL 5.6.26, il était possible qu’après la suppression d’un index de recherche en texte intégral, les colonnes `FTS_DOC_ID` et `FTS_DOC_ID_INDEX` masquées deviennent orphelines. Pour plus d’informations, consultez le [bogue n° 76 012](https://bugs.mysql.com/bug.php?id=76012).  
Si cela s’est produit dans des tables créées sur des versions antérieures de MySQL, les mises à niveau vers la version 3 d’Aurora MySQL peuvent échouer. Cette vérification préalable s’assure qu’aucun index de texte intégral orphelin ou « suspendu » n’existe sur votre cluster de bases de données avant la mise à niveau vers MySQL 8.0. Si cette vérification préalable échoue, reconstruisez toutes les tables contenant des index de texte intégral suspendus.  
**Exemple de sortie :**  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "description": "Error: The following tables contain dangling FULLTEXT index which is not supported. It is recommended to rebuild the table before upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_fts_index",
        "description": "Table `test.table_with_fts_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
      }
  ]
},
```
La vérification préalable signale une erreur pour la table `test.table_with_fts_index`, car elle contient un index de texte intégral suspendu. Pour permettre la mise à niveau, reconstruisez la table pour nettoyer les tables auxiliaires d’index de texte intégral. Utiliser `OPTIMIZE TABLE test.table_with_fts_index` ou `ALTER TABLE test.table_with_fts_index, ENGINE=INNODB`.  
Après avoir reconstruit la table, la vérification préalable aboutit.  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForDatafilePathInconsistency**  
**Niveau de vérification préalable : erreur**  
**Rechercher les incohérences liées au chemin du fichier `ibd`**  
Cette vérification préalable ne s’applique qu’à Aurora MySQL 3.03.0 ou version antérieure. Si vous rencontrez une erreur lors de cette vérification préalable, procédez à une mise à niveau vers Aurora MySQL 3.04 ou version ultérieure.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForFtsSpaceIdZero**  
**Niveau de vérification préalable : erreur**  
**Rechercher l’index de texte intégral avec un identifiant d’espace égal à zéro**  
Dans MySQL, lorsque vous ajoutez un [index de texte intégral](https://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html) à une table InnoDB, plusieurs espaces de table d’index auxiliaires sont créés. En raison d’un [bogue](https://bugs.mysql.com/bug.php?id=72132) dans les versions antérieures de MySQL, corrigé dans la version 5.6.20, il était possible que ces tables d’index auxiliaires soient créées dans l’[espace de table du système](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_system_tablespace), plutôt que dans leur propre espace de table InnoDB.  
S’il existe de tels espaces de table auxiliaires, la mise à niveau échouera. Recréez les index de texte intégral mentionnés dans l’erreur générée par la vérification préalable, puis réessayez la mise à niveau.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForFtsSpaceIdZero",
  "title": "Check for fulltext index with space id as zero",
  "status": "OK",
  "description": "The auxiliary tables of FTS indexes on the table are created in system table-space. Due to this DDL queries executed on MySQL8.0 shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.fts_space_zero_check",
        "description": " The auxiliary tables of FTS indexes on the table 'test.fts_space_zero_check' are created in system table-space due to https://bugs.mysql.com/bug.php?id=72132. In MySQL8.0, DDL queries executed on this table shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade."
      }
  ]
},
```
La vérification préalable signale une erreur pour la table `test.fts_space_zero_check`, car elle contient des tables auxiliaires de recherche de texte intégral (FTS) dans l’espace de table du système.  
Une fois que vous avez supprimé et recréé les index FTS associés à cette table, la vérification préalable aboutit.  
Avant de reconstruire les espaces de table, consultez [Partitioning operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning) dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan.

```
{
 "id": "auroraUpgradeCheckForFtsSpaceIdZero",
 "title": "Check for fulltext index with space id as zero",
 "status": "OK",
 "detectedProblems": []
}
```

**auroraUpgradeCheckForIncompleteXATransactions**  
**Niveau de vérification préalable : erreur**  
**Rechercher les transactions XA à l’état préparé**  
Lors de l’exécution du processus de mise à niveau de la version majeure, il est essentiel que l’instance de base de données Aurora MySQL version 2 soit [complètement arrêtée](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Cela garantit que toutes les transactions sont validées ou annulées, et qu’InnoDB a purgé tous les enregistrements du journal d’annulation. L’annulation des transactions étant nécessaire, si votre base de données contient des [transactions XA](https://dev.mysql.com/doc/refman/5.7/en/xa.html) à l’état préparé, cela peut empêcher l’arrêt complet d’avoir lieu. Pour cette raison, si des transactions XA préparées sont détectées, la mise à niveau ne pourra pas avoir lieu tant que vous n’aurez pas pris les mesures nécessaires pour les valider ou les annuler.  
Pour plus d’informations sur la recherche des transactions XA à l’état préparé à l’aide de `XA RECOVER`, consultez [Instructions SQL des transactions XA](https://dev.mysql.com/doc/refman/5.7/en/xa-statements.html) dans la documentation MySQL. Pour plus d’informations, consultez [États des transactions XA](https://dev.mysql.com/doc/refman/5.7/en/xa-states.html) dans la documentation MySQL.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions."
      }
  ]
}
```
Cette vérification préalable signale une erreur, car certaines transactions préparées doivent être validées ou annulées.  
Une fois connecté à la base de données, vous pouvez consulter la table [information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html) et la sortie `XA RECOVER` pour plus d’informations.  
Avant de valider ou d’annuler une transaction, nous vous recommandons de vérifier la [documentation MySQL](https://dev.mysql.com/doc/refman/5.7/en/xa-restrictions.html) et les exigences de votre application.

```
mysql> select trx_started,
    trx_mysql_thread_id,
    trx_id,trx_state,
    trx_operation_state,
    trx_rows_modified,
    trx_rows_locked 
from 
    information_schema.innodb_trx;
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| trx_started         | trx_mysql_thread_id | trx_id  | trx_state | trx_operation_state | trx_rows_modified | trx_rows_locked |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| 2024-08-12 01:09:39 |                   0 | 2849470 | RUNNING   | NULL                |                 1 |               0 |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
1 row in set (0.00 sec)

mysql> xa recover;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data   |
+----------+--------------+--------------+--------+
|        1 |            6 |            0 | xatest |
+----------+--------------+--------------+--------+
1 row in set (0.00 sec)
```
Dans ce cas, nous annulons la transaction préparée.  

```
mysql> XA ROLLBACK 'xatest';
Query OK, 0 rows affected (0.00 sec)
v
mysql> xa recover;
Empty set (0.00 sec)
```
Une fois que la transaction XA est annulée, la vérification préalable aboutit.  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForInstanceLimit**  
**Niveau de vérification préalable : erreur**  
**Vérifier si la mise à niveau est prise en charge sur la classe d’instance actuelle**  
L’exécution d’une mise à niveau sur place à partir d’Aurora MySQL version 2.12.0 ou 2.12.1, où la [classe d’instance de base de données](Concepts.DBInstanceClass.md) d’enregistreur est db.r6i.32xlarge, n’est actuellement pas prise en charge. Dans ce cas, la vérification préalable renvoie une erreur. Pour autoriser la mise à niveau, vous pouvez remplacer votre classe d’instance de base de données par db.r6i.24xlarge ou par une classe inférieure. Vous pouvez également effectuer une mise à niveau vers Aurora MySQL version 2.12.2 ou supérieure, où la mise à niveau sur place vers Aurora MySQL version 3 est prise en charge sur db.r6i.32xlarge.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForInstanceLimit",
  "title": "Checks if upgrade is supported on the current instance class",
  "status": "OK",
  "description": "Upgrade from Aurora Version 2.12.0 and 2.12.1 may fail for 32.xl and above instance class.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Upgrade is not supported on this instance size for Aurora MySql Version 2.12.1. Before upgrading to Aurora MySql 3, please consider either: 1. Changing the instance class to 24.xl or lower. -or- 2. Upgrading to patch version 2.12.2 or higher."
      }
  ]
},
```
La vérification préalable renvoie une erreur, car l’instance de base de données d’enregistreur utilise la classe d’instance db.r6i.32xlarge et s’exécute sur Aurora MySQL version 2.12.1.

**auroraUpgradeCheckForInternalUsers**  
**Niveau de vérification préalable : erreur**  
**Rechercher les utilisateurs internes de la version 8.0**  
Cette vérification préalable ne s’applique qu’à Aurora MySQL 3.03.0 ou version antérieure. Si vous rencontrez une erreur lors de cette vérification préalable, procédez à une mise à niveau vers Aurora MySQL 3.04 ou version ultérieure.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForInternalUsers",
  "title": "Check for 8.0 internal users.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews**  
**Niveau de vérification préalable : erreur**  
**Rechercher la présence de caractères utf8mb3 non valides dans la définition de la vue**  
Cette vérification préalable identifie les vues contenant des commentaires dont l’encodage de caractères `utf8mb3` n’est pas valide. Dans MySQL 8.0, une validation plus stricte est appliquée à l’encodage des caractères dans les métadonnées, y compris les commentaires de vue. Si une définition de vue contient des caractères non valides dans le jeu de caractères `utf8mb3`, la mise à niveau échoue.  
Pour résoudre ce problème, modifiez la définition de la vue afin de supprimer ou de remplacer tout caractère non BMP avant de tenter la mise à niveau.  
**Exemple de sortie :**  

```
{
"id": "auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews",
"title": "Check for invalid utf8mb3 character string.",
"status": "OK",
"description": "Definition of following view(s) has/have invalid utf8mb3 character string.",
"detectedProblems": [
        {
            "level": "Error",
            "dbObject": "precheck.utf8mb3_invalid_char_view",
            "description": "Definition of view precheck.utf8mb3_invalid_char_view contains an invalid utf8mb3 character string. This is due to https://bugs.mysql.com/bug.php?id=110177. To fix the inconsistency, we recommend you to modify the view definition to not use non-BMP characters and try the upgrade again."
        }
    ]
},
```
La vérification préalable indique que la définition de la vue `utf8mb3_invalid_char_view` contient des caractères `utf8mb3` non valides dans sa définition.  
Pour résoudre ce problème, identifiez la vue contenant les caractères non pris en charge et mettez à jour les commentaires. Tout d’abord, examinez la structure de la vue et identifiez les commentaires.  

```
MySQL> SHOW CREATE VIEW precheck.utf8mb3_invalid_char_view\G
*************************** 1. row ***************************
                View: utf8mb3_invalid_char_view
        Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`admin`@`%` SQL SECURITY DEFINER VIEW `utf8mb3_invalid_char_view` AS select 'This row contains a dolphin 🐬' AS `message`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set, 1 warning (0.00 sec)
```
Une fois que vous avez identifié la vue contenant l’erreur, remplacez-la par l’instruction `CREATE OR REPLACE VIEW`.  

```
MySQL> CREATE OR REPLACE VIEW precheck.utf8mb3_invalid_char_view AS select 'This view definition to not use non-BMP characters' AS message;
```
Après avoir mis à jour toutes les définitions de vue contenant des caractères non pris en charge, la vérification préalable aboutit et la mise à niveau peut avoir lieu.  

```
{
"id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
"title": "Check for invalid utf8mb3 column comments.",
"status": "OK",
"detectedProblems": []
}
```

**auroraUpgradeCheckForInvalidUtf8mb3ColumnComments**  
**Niveau de vérification préalable : erreur**  
**Rechercher la présence de commentaires de colonne utf8mb3 non valides**  
Cette vérification préalable identifie les tables contenant des commentaires de colonne dont l’encodage de caractères `utf8mb3` n’est pas valide. Dans MySQL 8.0, une validation plus stricte est appliquée à l’encodage des caractères dans les métadonnées, y compris les commentaires de colonne. Si des commentaires de colonne contiennent des caractères non valides dans le jeu de caractères utf8mb3, la mise à niveau échouera.  
Pour résoudre ce problème, vous devez modifier les commentaires de ces colonnes afin de supprimer ou de remplacer tout caractère non BMP avant de tenter la mise à niveau. Vous pouvez utiliser l’instruction `ALTER TABLE` pour mettre à jour les commentaires des colonnes.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "description": "Following table(s) has/have invalid utf8mb3 comments on the column/columns.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.t2",
        "description": "Table test.t2 has invalid utf8mb3 comments in it's column/columns. This is due to non-BMP characters in the comment field. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again."
      }
  ]
}
```
La vérification préalable indique que le tableau `test.t2` contient des caractères `utf8mb3` non valides dans un ou plusieurs commentaires de colonne, notamment en raison de la présence de caractères non BMP.  
Pour résoudre ce problème, vous pouvez identifier les colonnes problématiques et mettre à jour leurs commentaires. Tout d’abord, examinez la structure de la table pour identifier les colonnes contenant des commentaires :  

```
mysql> SHOW CREATE TABLE test.t2\G
```
Une fois que vous avez identifié les colonnes contenant des commentaires problématiques, mettez-les à jour à l’aide de l’instruction `ALTER TABLE`. Exemples :  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT 'Updated comment without non-BMP characters';
```
Vous pouvez également supprimer complètement le commentaire :  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT '';
```
Après que vous avez mis à jour tous les commentaires de colonne problématiques, la vérification préalable aboutit et la mise à niveau peut avoir lieu :  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "detectedProblems": []
}
```
Avant de modifier les commentaires de colonne, assurez-vous que tout code d’application ou toute documentation reposant sur ces commentaires est mis à jour en conséquence. Envisagez d’adopter le jeu de caractères utf8mb4 pour une meilleure prise en charge Unicode si votre application nécessite des caractères non BMP.

**auroraUpgradeCheckForInvalidUtf8mb3IndexComments**  
**Niveau de vérification préalable : erreur**  
**Rechercher la présence de commentaires d’index utf8mb3 non valides**  
Cette vérification préalable identifie les tables contenant des commentaires d’index dont l’encodage de caractères `utf8mb3` n’est pas valide. Dans MySQL 8.0, une validation plus stricte est appliquée à l’encodage des caractères dans les métadonnées, y compris les commentaires d’index. Si des commentaires d’index contiennent des caractères non valides dans le jeu de caractères `utf8mb3`, la mise à niveau échoue.  
Pour résoudre ce problème, vous devez modifier ces commentaires d’index afin de supprimer ou de remplacer tout caractère non BMP avant de tenter la mise à niveau.  
**Exemple de sortie :**  

```
{
    "id": "auroraUpgradeCheckForInvalidUtf8mb3IndexComments",
    "title": "Check for invalid utf8mb3 index comments.",
    "status": "OK",
    "description": "Following table(s) has/have invalid utf8mb3 comments on the index.",
    "detectedProblems": [
        {
            "level": "Error",
            "dbObject": "precheck.utf8mb3_tab_index_comment",
            "description": "Table precheck.utf8mb3_tab_index_comment has invalid utf8mb3 comments in it's index. This is due to https://bugs.mysql.com/bug.php?id=110177. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again."
        }
    ]
},
```
La vérification préalable indique que le tableau `utf8mb3_tab_index_comment` contient des caractères `utf8mb3` non valides dans un ou plusieurs commentaires de colonne, notamment en raison de la présence de caractères non BMP.  
Pour résoudre ce problème, examinez d’abord la structure de la table afin d’identifier l’index contenant des commentaires problématiques.  

```
MySQL> SHOW CREATE TABLE precheck.utf8mb3_tab_index_comment\G
*************************** 1. row ***************************
    Table: utf8mb3_tab_index_comment
Create Table: CREATE TABLE `utf8mb3_tab_index_comment` (
`id` int(11) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
KEY `idx_name` (`name`) COMMENT 'Name index 🐬'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
```
Une fois que vous avez identifié l’index contenant des commentaires utilisant des caractères non pris en charge, supprimez-le et recréez-le.  
La suppression et la recréation d’un index de table peuvent entraîner une durée d’indisponibilité. Nous vous recommandons de planifier cette opération pendant la maintenance.

```
MySQL> ALTER TABLE precheck.utf8mb3_tab_index_comment DROP INDEX idx_name;
MySQL> ALTER TABLE precheck.utf8mb3_tab_index_comment ADD INDEX idx_name(name);
```
L’exemple suivant présente une autre façon de recréer l’index.  

```
MySQL> ALTER TABLE utf8mb3_tab_index_comment DROP INDEX idx_name, ADD INDEX idx_name (name) COMMENT 'Updated comment without non-BMP characters';
```
Une fois que vous avez supprimé ou mis à jour tous les commentaires d’index non pris en charge, la vérification préalable aboutit et la mise à niveau peut avoir lieu.  

```
{
"id": "auroraUpgradeCheckForInvalidUtf8mb3IndexComments",
"title": "Check for invalid utf8mb3 index comments.",
"status": "OK",
"detectedProblems": []
},
```

**auroraUpgradeCheckForInvalidUtf8mb3TableComments**  
**Niveau de vérification préalable : erreur**  
**Rechercher la présence de caractères utf8mb3 non valides dans la définition de la table**  
Cette vérification préalable identifie les tables contenant des commentaires dont l’encodage de caractères `utf8mb3` n’est pas valide. Dans MySQL 8.0, une validation plus stricte est appliquée à l’encodage des caractères dans les métadonnées, y compris les commentaires des tables. Si des commentaires de table contiennent des caractères non valides dans le jeu de caractères `utf8mb3`, la mise à niveau échoue.  
Pour résoudre ce problème, vous devez modifier ces commentaires de table afin de supprimer ou de remplacer tout caractère non BMP avant de tenter la mise à niveau.  
**Exemple de sortie :**  

```
{
    "id": "auroraUpgradeCheckForInvalidUtf8mb3TableComments",
    "title": "Check for invalid utf8mb3 table comments.",
    "status": "OK",
    "description": "Following table(s) has/have invalid utf8mb3 comments.",
    "detectedProblems": [
        {
            "level": "Error",
            "dbObject": "precheck.utf8mb3_table_with_comment",
            "description": "Table precheck.utf8mb3_table_with_comment has invalid utf8mb3 comments. This is due to https://bugs.mysql.com/bug.php?id=110177. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again."
        }
        
    ]
},
```
La vérification préalable signale des commentaires `utf8mb3` non valides définis pour les tables `utf8mb3_table_with_comment` dans la base de données de test.  
Pour résoudre ce problème, identifiez la table contenant les caractères non pris en charge et mettez à jour les commentaires. Tout d’abord, examinez la structure de la table et identifiez les commentaires.  

```
MySQL> SHOW CREATE TABLE precheck.utf8mb3_table_with_comment\G
*************************** 1. row ***************************
    Table: utf8mb3_table_with_comment
Create Table: CREATE TABLE `utf8mb3_table_with_comment` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='This table comment contains flag 🏳️'
1 row in set (0.00 sec)
```
Une fois que vous avez identifié les commentaires de table contenant des caractères non pris en charge, mettez-les à jour avec l’instruction `ALTER TABLE`.  

```
MySQL> ALTER TABLE precheck.utf8mb3_table_with_comment COMMENT='Updated comment without non-BMP characters';
```
Vous pouvez également supprimer le commentaire.  

```
MySQL> ALTER TABLE precheck.utf8mb3_table_with_comment COMMENT='';
```
Une fois que vous avez supprimé tous les caractères non pris en charge de tous les commentaires de table, la vérification préalable aboutit.  

```
{
"id": "auroraUpgradeCheckForInvalidUtf8mb3TableComments",
"title": "Check for invalid utf8mb3 table comments.",
"status": "OK",
"detectedProblems": []
},
```

**auroraUpgradeCheckForMasterUser**  
**Niveau de vérification préalable : erreur**  
**Vérifier si l’utilisateur principal RDS existe**  
MySQL 8 a ajouté un nouveau modèle de privilèges prenant en charge les [rôles](https://dev.mysql.com/doc/refman/8.0/en/roles.html) et les [privilèges dynamiques](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#static-dynamic-privileges) afin de rendre la gestion des privilèges plus facile et plus précise. Dans le cadre de cette modification, Aurora MySQL a introduit le nouveau rôle `rds_superuser_role`, qui est automatiquement accordé à l’utilisateur principal de la base de données lors de la mise à niveau d’Aurora MySQL version 2 vers la version 3.  
Pour plus d’informations sur les rôles et privilèges attribués à l’utilisateur principal dans Aurora MySQL, consultez [Privilèges du compte utilisateur principal](UsingWithRDS.MasterAccounts.md). Pour plus d’informations sur le modèle de privilèges basé sur les rôles dans Aurora MySQL version 3, consultez [Modèle de privilège basé sur les rôles](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model).  
Cette vérification préalable s’assure que l’utilisateur principal se trouve dans la base de données. Si l’utilisateur principal n’y est pas, la vérification préalable échoue. Pour autoriser la mise à niveau, recréez l’utilisateur principal en réinitialisant son mot de passe ou en créant manuellement l’utilisateur. Réessayez ensuite la mise à niveau. Pour plus d’informations sur la réinitialisation du mot de passe de l’utilisateur principal, consultez [Modification du mot de passe de l’utilisateur principal de la base de données.](Aurora.Modifying.md#Aurora.Modifying.Password).  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  "title": "Check if master user exists",
  "status": "OK",
  "description": "Throws error if master user has been dropped!",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.MasterAccounts.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your Master User on host '%' has been dropped. To proceed with the upgrade, recreate the master user `reinvent` on default host '%'"
      }
  ]
}
```
Une fois que vous avez réinitialisé le mot de passe de l’utilisateur principal, la vérification préalable aboutit et vous pouvez réessayer la mise à niveau.  
L’exemple suivant utilise l’AWS CLI pour réinitialiser le mot de passe. Les modifications de mot de passe sont appliquées immédiatement.  

```
aws rds modify-db-cluster \
    --db-cluster-identifier my-db-cluster \
    --master-user-password my-new-password
```
Ensuite, la vérification préalable aboutit.  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  title": "Check if master user exists",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForPrefixIndexOnGeometryColumns**  
**Niveau de vérification préalable : erreur**  
**Recherche la présence de colonnes de géométrie sur les index à préfixe**  
Depuis [MySQL 8.0.12](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html#mysqld-8-0-12-spatial-support), il n’est plus possible de créer un index [avec préfixe](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix) sur une colonne avec le type de données [GEOMETRY](https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html). Pour plus d’informations, consultez [WL\$111808](https://dev.mysql.com/worklog/task/?id=11808).  
Si de tels index existent, la mise à niveau échouera. Pour résoudre le problème, supprimez les index `GEOMETRY` à préfixe dans les tables mentionnées lors de l’échec de la vérification préalable.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "description": "Consider dropping the prefix Indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.geom_index_prefix",
        "description": "Table `test`.`geom_index_prefix` has an index `LatLon` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `LatLon` ON `test`.`geom_index_prefix`;"
      }
  ]
}
```
La vérification préalable signale une erreur, car la table `test.geom_index_prefix` contient un index avec un préfixe dans une colonne `GEOMETRY`.  
Une fois que vous supprimez cet index, la vérification préalable aboutit.  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForSpecialCharactersInProcedures**  
**Niveau de vérification préalable : erreur**  
**Rechercher les incohérences liées aux caractères spéciaux dans les procédures stockées**  
Avant MySQL 8.0, les noms de base de données, les noms de tables et les autres objets correspondaient à des fichiers du répertoire de données, c’est-à-dire à des métadonnées basées sur des fichiers. Dans le cadre de la mise à niveau vers MySQL 8.0, tous les objets de base de données sont migrés vers les nouvelles tables du dictionnaire de données internes qui sont stockées dans le schéma `mysql` afin de prendre en charge l’[Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) récemment implémenté. Dans le cadre de la migration des procédures stockées, la définition et le corps de chaque procédure sont validés lors de leur ingestion dans le nouveau dictionnaire de données.  
Avant MySQL 8, dans certains cas, il était possible de créer des routines stockées ou d’insérer directement dans la table `mysql.proc` des procédures contenant des caractères spéciaux. Par exemple, vous pouviez créer une procédure stockée avec un commentaire contenant un [espace incassable](https://en.wikipedia.org/wiki/Non-breaking_space) non conforme, `\xa0`. Si de telles procédures sont identifiées, la mise à niveau échouera.  
Cette vérification préalable s’assure que les corps et les définitions de vos procédures stockées ne contiennent pas ces caractères. Pour permettre la mise à niveau, recréez ces procédures stockées sans aucun caractère masqué ou spécial.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "description": "Following procedure(s) has special characters inconsistency.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "information_schema.routines",
        "description": "Data Dictionary Metadata is inconsistent for the procedure `get_version_proc` in the database `test` due to usage of special characters in procedure body. To avoid that, drop and recreate the procedure without any special characters before proceeding with the Upgrade."
      }
  ]
}
```
La vérification préalable indique que le cluster de bases de données contient une procédure appelée `get_version_proc` dans la base de données `test` dont le corps de la procédure contient des caractères spéciaux.  
Après avoir supprimé et recréé la procédure stockée, la vérification préalable aboutit, permettant ainsi à la mise à niveau de se poursuivre.  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForSysSchemaObjectTypeMismatch**  
**Niveau de vérification préalable : erreur**  
**Vérifier les incohérences de type d’objet par rapport au schéma `sys`**  
Le [schéma sys](https://dev.mysql.com/doc/refman/8.0/en/sys-schema.html) est un ensemble d’objets et de vues d’une base de données MySQL, qui aident les utilisateurs à dépanner, optimiser et surveiller leurs instances de base de données. Lorsque vous effectuez une mise à niveau d’une version majeure d’Aurora MySQL version 2 vers Aurora MySQL version 3, les vues du schéma `sys` sont recréées et mises à jour selon les nouvelles définitions d’Aurora MySQL version 3.  
Dans le cadre de la mise à niveau, si des objets du schéma `sys` sont définis à l’aide de moteurs de stockage (`sys_config/BASE TABLE` dans [INFORMATION\$1SCHEMA.TABLES](https://dev.mysql.com/doc/refman/5.7/en/information-schema-tables-table.html)) au lieu de vues, la mise à niveau échouera. Ces tables se trouvent dans `information_schema.tables`. Ce comportement n’est pas attendu, mais dans certains cas, il peut se produire en raison d’une erreur de l’utilisateur.  
Cette vérification préalable valide tous les objets de schéma `sys` pour s’assurer qu’ils utilisent les définitions de table correctes et que les vues ne sont pas définies par erreur comme des tables InnoDB ou MyISAM. Pour résoudre le problème, corrigez manuellement les objets renvoyés en les renommant ou en les supprimant. Réessayez ensuite la mise à niveau.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "description": "Database contains objects with type mismatch for sys schema.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "sys.waits_global_by_latency",
        "description": "Your object sys.waits_global_by_latency has a type mismatch. To fix the inconsistency we recommend to rename or remove the object before upgrading (use RENAME TABLE command). "
      }
  ]
}
```
La vérification préalable indique que la vue [sys.waits\$1global\$1by\$1latency](https://dev.mysql.com/doc/refman/5.7/en/sys-waits-global-by-latency.html) du schéma `sys` présente une incompatibilité de type qui empêche la mise à niveau d’avoir lieu.  
Une fois connecté à l’instance de base de données, vous pouvez voir que cet objet est défini comme une table InnoDB, alors qu’il devrait s’agir d’une vue.  

```
mysql> show create table sys.waits_global_by_latency\G
*************************** 1. row ***************************
       Table: waits_global_by_latency
Create Table: CREATE TABLE `waits_global_by_latency` (
  `events` varchar(128) DEFAULT NULL,
  `total` bigint(20) unsigned DEFAULT NULL,
  `total_latency` text,
  `avg_latency` text,
  `max_latency` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
Pour résoudre ce problème, nous pouvons soit supprimer et recréer la vue avec la [définition appropriée](https://github.com/mysql/mysql-server/blob/mysql-5.7.44/scripts/sys_schema/views/p_s/waits_global_by_latency.sql), soit la renommer. Au cours du processus de mise à niveau, l’objet sera automatiquement créé avec la définition de table appropriée.  

```
mysql> RENAME TABLE sys.waits_global_by_latency to sys.waits_global_by_latency_old;
Query OK, 0 rows affected (0.01 sec)
```
Après cela, la vérification préalable aboutira.  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForViewColumnNameLength**  
**Niveau de vérification préalable : erreur**  
**Vérifier la limite supérieure du nom de colonne dans la vue**  
La [longueur maximale autorisée d’un nom de colonne](https://dev.mysql.com/doc/refman/5.7/en/identifier-length.html) dans MySQL est de 64 caractères. Avant MySQL 8.0, dans certains cas, il était possible de créer une vue avec un nom de colonne supérieur à 64 caractères. Si des vues de ce type existent sur votre instance de base de données, une erreur est générée par la vérification préalable et la mise à niveau échoue. Pour permettre la mise à niveau, vous devez recréer les vues en question, en vous assurant que la longueur de leurs colonnes est inférieure à 64 caractères. Réessayez ensuite la mise à niveau.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "description": "Following view(s) has column(s) with length greater than 64.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.colname_view_test.col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad",
        "description": "View `test`.`colname_view_test`has column `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` with invalid column name length. To avoid Upgrade errors, view should be altered by renaming the column name so that its length is not 0 and doesn't exceed 64."
      }
  ]
}
```
La vérification préalable indique que la vue `test.colname_view_test` contient une colonne `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` dont la longueur dépasse la longueur maximale autorisée de 64 caractères.  
En examinant la définition de la vue, nous pouvons voir la colonne incriminée.  

```
mysql> desc `test`.`colname_view_test`;
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| Field                                                            | Type        | Null | Key | Default | Extra |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| col1                                                             | varchar(20) | YES  |     | NULL    |       |
| col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad | int(11)     | YES  |     | NULL    |       |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
Pour permettre la mise à niveau, recréez la vue en vous assurant que la longueur de la colonne ne dépasse pas 64 caractères.  

```
mysql> drop view `test`.`colname_view_test`;
Query OK, 0 rows affected (0.01 sec)

mysql> create view `test`.`colname_view_test`(col1, col2_nopad) as select inf, fodcol from test;
Query OK, 0 rows affected (0.01 sec)

mysql> desc `test`.`colname_view_test`;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| col1       | varchar(20) | YES  |     | NULL    |       |
| col2_nopad | int(11)     | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
Après cela, la vérification préalable aboutira.  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckIndexLengthLimitOnTinyColumns**  
**Niveau de vérification préalable : erreur**  
**Rechercher les tables dont les index sont définis avec une longueur de préfixe supérieure à 255 octets dans les petites colonnes**  
Lorsque vous créez un index dans une colonne à l’aide d’un [type de données binaire](https://dev.mysql.com/doc/refman/5.7/en/binary-varbinary.html) dans MySQL, vous devez ajouter une longueur de [préfixe](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix) dans la définition de l’index. Avant MySQL 8.0, dans certains cas, il était possible de spécifier une longueur de préfixe supérieure à la taille maximale autorisée pour ces types de données. Prenons l’exemple des colonnes `TINYTEXT` et `TINYBLOB`, où la taille de données maximale autorisée est de 255 octets, mais où des préfixes d’index ont une taille supérieure. Pour plus d’informations, consultez [Limites InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html) dans la documentation MySQL.  
Si cette vérification préalable échoue, supprimez l’index incriminé ou réduisez la longueur du préfixe des colonnes `TINYTEXT` et `TINYBLOB` de l’index pour qu’elle ne dépasse pas 255 octets. Réessayez ensuite la mise à niveau.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "description": "Prefix length of the indexes defined on tiny columns cannot exceed 255 bytes. With utf8mb4 char set, this limits the prefix length supported upto 63 characters only. A larger prefix length was allowed in MySQL5.7 using innodb_large_prefix parameter. This parameter is deprecated in MySQL 8.0.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html, https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.tintxt_prefixed_index.col1",
        "description": "Index 'PRIMARY' on tinytext/tinyblob column `col1` of table `test.tintxt_prefixed_index` is defined with prefix length exceeding 255 bytes. Reduce the prefix length to <=255 bytes depending on character set used. For utf8mb4, it should be <=63."
      }
  ]
}
```
La vérification préalable signale une erreur pour la table `test.tintxt_prefixed_index`, car elle contient un index `PRIMARY` dont le préfixe est supérieur à 255 octets sur une colonne TINYTEXT ou TINYBLOB.  
En examinant la définition de cette table, nous pouvons voir que la clé primaire a le préfixe 65 sur la colonne `TINYTEXT` `col1`. Comme la table est définie à l’aide du jeu de caractères `utf8mb4`, qui stocke 4 octets par caractère, le préfixe dépasse la limite de 255 octets.  

```
mysql> show create table `test`.`tintxt_prefixed_index`\G
*************************** 1. row ***************************
       Table: tintxt_prefixed_index
Create Table: CREATE TABLE `tintxt_prefixed_index` (
  `col1` tinytext NOT NULL,
  `col2` tinytext,
  `col_id` tinytext,
  PRIMARY KEY (`col1`(65))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
1 row in set (0.00 sec)
```
Le remplacement du préfixe d’index par 63 lors de l’utilisation du jeu de caractères `utf8mb4` permettra à la mise à niveau d’avoir lieu.  

```
mysql> alter table `test`.`tintxt_prefixed_index` drop PRIMARY KEY, ADD  PRIMARY KEY (`col1`(63));
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
Après cela, la vérification préalable aboutira.  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable**  
**Niveau de vérification préalable : erreur**  
**Rechercher toute incohérence des métadonnées InnoDB pour la table `mysql.host`**  
Il s’agit d’une vérification préalable interne, qui est effectuée par le service RDS. Toutes les erreurs seront traitées automatiquement lors de la mise à niveau et peuvent être ignorées sans risque.  
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’[AWS Support](https://aws.amazon.com/support) pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3.

## Avertissements
<a name="precheck-descriptions-warnings"></a>

Les vérifications préalables suivantes génèrent des avertissements en cas d’échec, mais la mise à niveau peut tout de même avoir lieu.

**Topics**
+ [Vérifications préalables de MySQL qui signalent des avertissements](#precheck-descriptions-warnings.mysql)
+ [Vérifications préalables d’Aurora MySQL qui signalent des avertissements](#precheck-descriptions-warnings.aurora)

### Vérifications préalables de MySQL qui signalent des avertissements
<a name="precheck-descriptions-warnings.mysql"></a>

Les vérifications préalables suivantes sont tirées de Community MySQL :
+ [defaultAuthenticationPlugin](#defaultAuthenticationPlugin)
+ [maxdbFlagCheck](#maxdbFlagCheck)
+ [mysqlDollarSignNameCheck](#mysqlDollarSignNameCheck)
+ [reservedKeywordsCheck](#reservedKeywordsCheck)
+ [utf8mb3Check](#utf8mb3Check)
+ [zeroDatesCheck](#zeroDatesCheck)

**defaultAuthenticationPlugin**  
**Niveau de vérification préalable : avertissement**  
**Considérations relatives au nouveau plug\$1in d’authentification par défaut**  
Dans MySQL 8.0, le plug-in d’authentification `caching_sha2_password` a été introduit afin de fournir un chiffrement des mots de passe plus sécurisé et de meilleures performances que le plug-in `mysql_native_password` obsolète. Pour Aurora MySQL version 3, le plug-in d’authentification par défaut utilisé par les utilisateurs de base de données est le plug-in `mysql_native_password`.  
Cette vérification préalable indique que ce plug-in sera supprimé et sera remplacé dans une future version majeure. Pensez à évaluer la compatibilité des clients et des utilisateurs de votre application avant cette modification.  
Pour plus d’informations, consultez [Problèmes de compatibilité avec caching\$1sha2\$1password et solutions](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues) dans la documentation MySQL.  
**Exemple de sortie :**  

```
{
  "id": "defaultAuthenticationPlugin",
  "title": "New default authentication plugin considerations",
  "description": "Warning: The new default authentication plugin 'caching_sha2_password' offers more secure password hashing than previously used 'mysql_native_password' (and consequent improved client connection authentication). However, it also has compatibility implications that may affect existing MySQL installations. If your MySQL installation must serve pre-8.0 clients and you encounter compatibility issues after upgrading, the simplest way to address those issues is to reconfigure the server to revert to the previous default authentication plugin (mysql_native_password). For example, use these lines in the server option file:\n\n[mysqld]\ndefault_authentication_plugin=mysql_native_password\n\nHowever, the setting should be viewed as temporary, not as a long term or permanent solution, because it causes new accounts created with the setting in effect to forego the improved authentication security.\nIf you are using replication please take time to understand how the authentication plugin changes may impact you.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues\nhttps://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-replication"
},
```

**maxdbFlagCheck**  
**Niveau de vérification préalable : avertissement**  
**Utilisation d’un indicateur `MAXDB` `sql_mode` obsolète**  
Dans MySQL 8.0, plusieurs options de variables système [sql\$1mode](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode) obsolètes ont été [supprimées](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html), y compris `MAXDB`. Cette vérification préalable examine toutes les sessions actuellement connectées, ainsi que les routines et les déclencheurs, pour s’assurer que `sql_mode` n’est défini sur aucune combinaison incluant `MAXDB` pour aucune session, aucune routine ni aucun déclencheur.  
**Exemple de sortie :**  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "description": "Warning: The following DB objects have the obsolete MAXDB option persisted for sql_mode, which will be cleared during the upgrade. It can potentially change the datatype DATETIME into TIMESTAMP if it is used inside object's definition, and this in turn can change the behavior in case of dates earlier than 1970 or later than 2037. If this is a concern, please redefine these objects so that they do not rely on the MAXDB flag before running the upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.maxdb_stored_routine",
        "description": "PROCEDURE uses obsolete MAXDB sql_mode",
        "dbObjectType": "Routine"
      }
  ]
}
```
La vérification préalable indique que la routine `test.maxdb_stored_routine` contient une option `sql_mode` non prise en charge.  
Une fois connecté à la base de données, vous pouvez voir dans la définition de routine que `sql_mode` contient `MAXDB`.  

```
 > SHOW CREATE PROCEDURE test.maxdb_stored_routine\G

*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Pour résoudre le problème, recréez la procédure après avoir défini la configuration `sql_mode` appropriée sur le client.  
Selon la [documentation MySQL](https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html), MySQL stocke le paramètre `sql_mode` en vigueur lorsqu’une routine est créée ou modifiée. Il exécute toujours la routine avec ce paramètre, quel que soit le paramètre `sql_mode` au moment où la routine démarre.  
Avant de modifier `sql_mode`, consultez [Modes SQL Server](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html) dans la documentation MySQL. Évaluez soigneusement tout impact potentiel de cette action sur votre application.
Recréez la procédure sans l’élément `sql_mode` non pris en charge.  

```
mysql > set sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql > DROP PROCEDURE test.maxdb_stored_routine\G
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER $$
mysql >
mysql > CREATE PROCEDURE test.maxdb_stored_routine()
    -> SQL SECURITY DEFINER
    -> BEGIN
    ->     SELECT * FROM test;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER ;
mysql > show create procedure test.maxdb_stored_routine\G
*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
La vérification préalable aboutit.  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "detectedProblems": []
}
```

**mysqlDollarSignNameCheck**  
**Niveau de vérification préalable : avertissement**  
**Rechercher l’utilisation obsolète du signe dollar dans les noms d’objets**  
Depuis [MySQL 8.0.32](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-32.html#mysqld-8-0-32-deprecation-removal), l’utilisation du signe dollar (`$`) comme premier caractère d’un identifiant sans guillemets est obsolète. Si vous avez des schémas, des tables, des vues, des colonnes ou des routines utilisant `$` comme premier caractère, cette vérification préalable renvoie un avertissement. Bien que cet avertissement n’empêche pas la mise à niveau d’avoir lieu, nous vous recommandons de prendre rapidement des mesures pour résoudre ce problème. À partir de [MySQL 8.4](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html), tout identifiant de ce type renverra une erreur de syntaxe plutôt qu’un avertissement.  
**Exemple de sortie :**  

```
{
  "id": "mysqlDollarSignNameCheck",
  "title": "Check for deprecated usage of single dollar signs in object names",
  "status": "OK",
  "description": "Warning: The following objects have names with deprecated usage of dollar sign ($) at the begining of the identifier. To correct this warning, ensure, that names starting with dollar sign, also end with it, similary to quotes ($example$). ",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.$deprecated_syntx",
        "description": " name starts with $ sign."
      }
  ]
},
```
La vérification préalable signale un avertissement, car la table `$deprecated_syntx` du schéma `test` contient un `$` comme premier caractère.

**reservedKeywordsCheck**  
**Niveau de vérification préalable : avertissement**  
**Utilisation d’objets de base de données dont les noms sont en conflit avec les nouveaux mots clés réservés**  
Cette vérification est similaire à [routineSyntaxCheck](#routineSyntaxCheck), dans la mesure où il recherche l’utilisation d’objets de base de données dont les noms sont en conflit avec les nouveaux mots clés réservés. Bien que les avertissements ne bloquent pas les mises à niveau, vous devez les évaluer attentivement.  
**Exemple de sortie :**  
En utilisant l’exemple précédent avec la table nommée `except`, la vérification préalable renvoie un avertissement :  

```
{
  "id": "reservedKeywordsCheck",
  "title": "Usage of db objects with names conflicting with new reserved keywords",
  "status": "OK",
  "description": "Warning: The following objects have names that conflict with new reserved keywords. Ensure queries sent by your applications use `quotes` when referring to them or they will result in errors.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.except",
        "description": "Table name",
        "dbObjectType": "Table"
      }
  ]
}
```
Cet avertissement vous indique que vous pouvez avoir à vérifier certaines requêtes d’application. Si vos requêtes d’application [n’échappent pas correctement les littéraux de chaîne](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html), elles risquent de rencontrer des erreurs après la mise à niveau vers MySQL 8.0. Vérifiez vos applications pour confirmer ce comportement, en les testant par rapport à un clone ou à un instantané de votre cluster de bases de données Aurora MySQL exécuté sur la version 3.  
Exemple de requête d’application non échappée qui échouera après la mise à niveau :  

```
SELECT * FROM escape;
```
Exemple de requête d’application correctement échappée qui aboutira après la mise à niveau :  

```
SELECT * FROM 'escape';
```

**utf8mb3Check**  
**Niveau de vérification préalable : avertissement**  
**Utilisation du jeu de caractères `utf8mb3`**  
Dans MySQL 8.0, le jeu de caractères `utf8mb3` est obsolète et sera supprimé dans une future version majeure de MySQL. Cette vérification préalable est mise en œuvre pour émettre un avertissement si des objets de base de données utilisant ce jeu de caractères sont détectés. Cela n’empêchera pas la mise à niveau d’avoir lieu, mais nous vous recommandons vivement de penser à migrer les tables vers le jeu de caractères `utf8mb4`, qui est le jeu de caractères par défaut à partir de MySQL 8.0. Pour plus d’informations sur [utf8mb3](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html) et [utf8mb4](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html), consultez [Conversion entre les jeux de caractères Unicode à 3 octets et à 4 octets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) dans la documentation MySQL.  
**Exemple de sortie :**  

```
{
  "id": "utf8mb3",
  "title": "Usage of utf8mb3 charset",
  "status": "OK",
  "description": "Warning: The following objects use the deprecated utf8mb3 character set. It is recommended to convert them to use utf8mb4 instead, for improved Unicode support. The utf8mb3 character is subject to removal in the future.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.t1.col1",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      },
      {
        "level": "Warning",
        "dbObject": "test.t1.col2",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      }
  ]
}
```
Pour résoudre ce problème, vous devez reconstruire les objets et les tables référencés. Pour plus d’informations et pour connaître les conditions préalables, consultez [Conversion entre les jeux de caractères Unicode à 3 octets et à 4 octets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) dans la documentation MySQL.

**zeroDatesCheck**  
**Niveau de vérification préalable : avertissement**  
**Aucune valeur de date, de date/heure ni d’horodatage**  
MySQL applique désormais des règles plus strictes concernant l’utilisation de valeurs nulles dans les colonnes date, datetime et timestamp. Nous vous recommandons d’utiliser les modes `NO_ZERO_IN_DATE` et `NO_ZERO_DATE SQL` conjointement avec le mode `strict`, car ils seront fusionnés avec le mode `strict` dans une future version de MySQL.  
Si le paramètre `sql_mode` de l’une de vos connexions à la base de données, au moment de l’exécution de la vérification préalable, n’inclut pas ces modes, un avertissement sera émis lors de la vérification préalable. Il est possible que les utilisateurs puissent toujours insérer des valeurs nulles pour la date, les date et heure ou l’horodatage. Cependant, nous vous conseillons vivement de remplacer les valeurs nulles par des valeurs valides, car leur comportement pourrait changer à l’avenir et elles pourraient cesser de fonctionner correctement. Comme il s’agit d’un avertissement, la mises à niveau ne sera pas bloquée, mais nous vous recommandons de commencer à planifier d’apporter les modifications nécessaires.  
**Exemple de sortie :**  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
  ]
}
```

### Vérifications préalables d’Aurora MySQL qui signalent des avertissements
<a name="precheck-descriptions-warnings.aurora"></a>

Les vérifications préalables suivantes sont spécifiques à Aurora MySQL :
+ [auroraUpgradeCheckForRollbackSegmentHistoryLength](#auroraUpgradeCheckForRollbackSegmentHistoryLength)
+ [auroraUpgradeCheckForUncommittedRowModifications](#auroraUpgradeCheckForUncommittedRowModifications)

**auroraUpgradeCheckForRollbackSegmentHistoryLength**  
**Niveau de vérification préalable : avertissement**  
**Vérifie si la longueur de la liste d’historique des segments de restauration pour le cluster est élevée**  
Comme indiqué dans [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions), lors de l’exécution du processus de mise à niveau de version majeure, il est essentiel que l’instance de base de données Aurora MySQL version 2 soit [complètement arrêtée](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Cela garantit que toutes les transactions sont validées ou annulées, et qu’InnoDB a purgé tous les enregistrements du journal d’annulation.  
Si la longueur de la liste d’historique des segments de restauration de votre cluster de bases de données est élevée, cela peut prolonger le temps nécessaire à InnoDB pour purger les enregistrements du journal d’annulation. Cela peut entraîner une durée d’indisponibilité prolongée pendant le processus de mise à niveau de la version majeure. Si la vérification préalable détecte que la longueur de cette liste sur votre cluster de bases de données est élevé, elle émet un avertissement. Bien que cet avertissement n’empêche pas la mise à niveau d’avoir lieu, nous vous recommandons de surveiller de près la longueur de cette liste sur votre cluster de bases de données. Une longueur de liste d’historique faible réduit la durée d’indisponibilité requise pendant une mise à niveau de version majeure. Pour plus d’informations sur la surveillance de la longueur de la liste d’historique, consultez [La longueur de la liste d’historique InnoDB a considérablement augmenté](proactive-insights.history-list.md).  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForRollbackSegmentHistoryLength",
  "title": "Checks if the rollback segment history length for the cluster is high",
  "status": "OK",
  "description": "Rollback Segment History length is greater than 1M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_metrics",
        "description": "The InnoDB undo history list length('trx_rseg_history_len') is 82989114. Upgrade may take longer due to purging of undo information for old row versions."
      }
  ]
}
```
La vérification préalable renvoie un avertissement, car elle a détecté que la longueur de la liste d’historique d’annulation d’InnoDB était élevée sur le cluster de bases de données (82989114). Bien que la mise à niveau se poursuive, en fonction du nombre d’annulations à purger, elle peut prolonger la durée d’indisponibilité requise pendant le processus de mise à niveau.  
Nous vous recommandons d’[examiner les transactions en cours](proactive-insights.history-list.md) sur votre cluster de bases de données avant d’exécuter la mise à niveau en production, afin de vous assurer que la longueur de votre liste d’historique reste à une taille gérable.

**auroraUpgradeCheckForUncommittedRowModifications**  
**Niveau de vérification préalable : avertissement**  
**Vérifie s’il existe de nombreuses modifications de ligne non validées**  
Comme indiqué dans [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions), lors de l’exécution du processus de mise à niveau de version majeure, il est essentiel que l’instance de base de données Aurora MySQL version 2 soit [complètement arrêtée](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Cela garantit que toutes les transactions sont validées ou annulées, et qu’InnoDB a purgé tous les enregistrements du journal d’annulation.  
Si votre cluster de bases de données contient des transactions qui ont modifié un grand nombre de lignes, cela peut prolonger le temps nécessaire à InnoDB pour annuler cette transaction dans le cadre du processus d’arrêt complet. Si la vérification préalable détecte des transactions de longue durée comportant un grand nombre de lignes modifiées sur votre cluster de bases de données, un avertissement s’affiche. Bien que cet avertissement n’empêche pas la mise à niveau d’avoir lieu, nous vous recommandons de surveiller de près la taille des transactions actives sur votre cluster de bases de données. Une longueur de liste d’historique faible réduit la durée d’indisponibilité requise pendant une mise à niveau de version majeure.  
**Exemple de sortie :**  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "description": "Database contains uncommitted row changes greater than 10M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_trx",
        "description": "The database contains 11000000 uncommitted row change(s) in 1 transaction(s). Upgrade may take longer due to transaction rollback."
      }
  ]
},
```
La vérification préalable indique que le cluster de bases de données contient une transaction avec 11 000 000 modifications de lignes non validées qui devront être annulées pendant le processus d’arrêt complet. La mise à niveau aura lieu, mais pour réduire la durée d’indisponibilité pendant le processus de mise à niveau, nous vous recommandons de surveiller et d’étudier ce cas avant d’exécuter la mise à niveau sur vos clusters de production.  
Pour consulter les transactions actives sur votre instance de base de données d’enregistreur, vous pouvez utiliser la table [information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html). La requête suivante sur l’instance de base de données d’enregistreur indique les transactions en cours, la durée d’exécution, l’état et les lignes modifiées pour le cluster de bases de données.  

```
# Example of uncommitted transaction
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| 2024-08-12 18:32:52 |                         1592 |                          20041 | 52866130 | RUNNING   |      11000000 |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
1 row in set (0.01 sec)

# Example of transaction rolling back
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state    | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| 2024-08-12 18:32:52 |                         1719 |                          20041 | 52866130 | ROLLING BACK |      10680479 |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
1 row in set (0.01 sec)
```
Une fois la transaction validée ou annulée, la vérification préalable ne renvoie plus d’avertissement. Consultez la documentation MySQL et faites appel l’équipe chargée de votre application avant d’annuler des transactions importantes, car la restauration peut prendre un certain temps, en fonction de la taille des transactions.  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "detectedProblems": []
},
```
Pour plus d’informations sur l’optimisation de la gestion des transactions InnoDB et sur l’impact potentiel de l’exécution et de l’annulation de transactions importantes sur les instances de base de données MySQL, consultez [Optimisation de la gestion des transactions InnoDB](https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-transaction-management.html) dans la documentation MySQL.

## Notifications
<a name="precheck-descriptions-notices"></a>

La vérification préalable suivante génère une notification en cas d’échec, mais la mise à niveau peut tout de même avoir lieu.

**sqlModeFlagCheck**  
**Niveau de vérification préalable : notification**  
**Utilisation d’indicateurs `sql_mode` obsolètes**  
Outre `MAXDB`, plusieurs autres options `sql_mode` ont été [supprimées](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) : `DB2`, `MSSQL`, `MYSQL323`, `MYSQL40`, `ORACLE`, `POSTGRESQL`, `NO_FIELD_OPTIONS`, `NO_KEY_OPTIONS` et `NO_TABLE_OPTIONS`. Depuis MySQL 8.0, aucune de ces valeurs ne peut être affectée à la variable système `sql_mode`. Si cette vérification préalable détecte des sessions en cours utilisant ces paramètres `sql_mode`, assurez-vous que les groupes de paramètres de votre instance de base de données et de cluster de bases de données, ainsi que les applications et les configurations clientes, sont mis à jour pour les désactiver. Pour plus d’informations, consultez la [documentation MySQL](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html).  
**Exemple de sortie :**  

```
{
  "id": "sqlModeFlagCheck",
  "title": "Usage of obsolete sql_mode flags",
  "status": "OK",
  "detectedProblems": []
}
```
Pour résoudre l’un de ces échecs de vérification préalable, consultez [maxdbFlagCheck](#maxdbFlagCheck).

## Erreurs, avertissements ou notifications
<a name="precheck-descriptions-all"></a>

La vérification préalable suivante peut renvoyer une erreur, un avertissement ou une notification en fonction de sa sortie.

**checkTableOutput**  
**Niveau de vérification préalable : erreur, avertissement ou notification**  
**Problèmes signalés par la commande `check table x for upgrade`**  
Avant de commencer la mise à niveau vers Aurora MySQL version 3, `check table for upgrade` est exécuté sur chaque table dans les schémas utilisateur de votre cluster de bases de données. Cette vérification préalable n’est la même que [checkTableMysqlSchema](#checkTableMysqlSchema).  
La commande `check table for upgrade` examine les tables pour détecter tout problème potentiel pouvant survenir lors d’une mise à niveau vers une version plus récente de MySQL. L’exécution de cette commande avant de tenter une mise à niveau contribue à identifier et à résoudre les incompatibilités à l’avance, ce qui facilite le processus de mise à niveau réel.  
Cette commande effectue différentes vérifications sur chaque table, telles que les suivantes :  
+ Vérification de la compatibilité de la structure et des métadonnées de la table avec la version MySQL cible
+ Identification des fonctionnalités obsolètes ou supprimées qui sont utilisées par la table
+ Confirmation de la possibilité de mettre à niveau la table sans perte de données
Contrairement aux autres vérifications préalables, celle-ci peut renvoyer une erreur, un avertissement ou une notification en fonction de la sortie `check table`. Si cette vérification préalable renvoie des tables, examinez-les attentivement, ainsi que le code de retour et le message, avant de lancer la mise à niveau. Pour plus d’informations, consultez [Instruction CHECK TABLE](https://dev.mysql.com/doc/refman/5.7/en/check-table.html) dans la documentation MySQL.  
Nous fournissons ci-dessous un exemple d’erreur et un exemple d’avertissement.  
**Exemple d’erreur :**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.parent",
        "description": "Table 'test.parent' doesn't exist"
      }
  ]
},
```
La vérification préalable signale une erreur indiquant que la table `test.parent` n’existe pas.  
Le fichier `mysql-error.log` de l’instance de base de données d’enregistreur indique qu’il existe une erreur de clé étrangère.  

```
2024-08-13T15:32:10.676893Z 62 [Warning] InnoDB: Load table `test`.`parent` failed, the table has missing foreign key indexes. Turn off 'foreign_key_checks' and try again.
2024-08-13T15:32:10.676905Z 62 [Warning] InnoDB: Cannot open table test/parent from the internal data dictionary of InnoDB though the .frm file for the table exists.
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.
```
Connectez-vous à l’instance de base de données d’enregistreur et exécutez `show engine innodb status\G` pour obtenir plus d’informations sur l’erreur de clé étrangère.  

```
mysql> show engine innodb status\G
*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
2024-08-13 15:33:33 0x14ef7b8a1700 INNODB MONITOR OUTPUT
=====================================
.
.
.
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2024-08-13 15:32:10 0x14ef6dbbb700 Error in foreign key constraint of table test/child:
there is no index in referenced table which would contain
the columns as the first columns, or the data types in the
referenced table do not match the ones in table. Constraint:
,
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
The index in the foreign key in table is p_name_idx
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.
.
.
```
Le message `LATEST FOREIGN KEY ERROR` indique que la contrainte de clé étrangère `fk_pname` dans la table `test.child`, qui référence la table `test.parent`, présente un problème d’index manquant ou d’incompatibilité du type de données. La documentation MySQL sur les [contraintes liées aux clés étrangères](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html) indique que les colonnes référencées dans une clé étrangère doivent avoir un index associé et que les colonnes parent/enfant doivent utiliser le même type de données.  
Pour vérifier si le problème est lié à un index manquant ou à une incompatibilité du type de données, connectez-vous à la base de données et vérifiez les définitions de table en désactivant temporairement la variable de session [foreign\$1key\$1checks](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html#foreign-key-checks). Nous pouvons maintenant voir que la contrainte enfant en question (`fk_pname`) utilise `p_name varchar(20) CHARACTER SET latin1 DEFAULT NULL` pour référencer la table parent `name varchar(20) NOT NULL`. La table parent utilise `DEFAULT CHARSET=utf8`, mais la colonne `p_name` de la table enfant utilise `latin1`, de sorte que l’erreur d’incompatibilité du type de données est renvoyée.  

```
mysql> show create table parent\G
ERROR 1146 (42S02): Table 'test.parent' doesn't exist

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> set foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table parent\G
*************************** 1. row ***************************
       Table: parent
Create Table: CREATE TABLE `parent` (
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
Pour résoudre ce problème, nous pouvons soit modifier la table enfant pour qu’elle utilise le même jeu de caractères que la table parent, soit modifier la table parent pour qu’elle utilise le même jeu de caractères que la table enfant. Ici, comme la table enfant utilise explicitement `latin1` dans la définition de colonne `p_name`, nous exécutons `ALTER TABLE` pour modifier le jeu de caractères sur `utf8`.  

```
mysql> alter table child modify p_name varchar(20) character set utf8 DEFAULT NULL;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> flush tables;
Query OK, 0 rows affected (0.01 sec)
```
Après cela, la vérification préalable aboutira et la mise à niveau pourra avoir lieu.  
**Exemple d’avertissement :**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.orders",
        "description": "Trigger test.orders.delete_audit_trigg does not have CREATED attribute."
      }
  ]
}
```
La vérification préalable signale un avertissement concernant le déclencheur `delete_audit_trigg` sur la table `test.orders`, car celui-ci ne possède pas d’attribut `CREATED`. Selon la section [Vérification de la compatibilité des versions](https://dev.mysql.com/doc/refman/5.7/en/check-table.html#check-table-version-compatibility) de la documentation MySQL, ce message est informatif et s’affiche pour les déclencheurs créés avant MySQL 5.7.2.  
Comme il s’agit d’un avertissement, il n’empêche pas la mise à niveau d’avoir lieu. Toutefois, si vous souhaitez résoudre le problème, vous pouvez recréer le déclencheur en question pour que la vérification préalable aboutisse sans avertissement.  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": []
},
```

# Comment effectuer une mise à niveau sur place
<a name="AuroraMySQL.Upgrading.Procedure"></a>

Nous vous conseillons de passer en revue la documentation dans [Fonctionnement de la mise à niveau sur place d’une version majeure de Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence).

Effectuez la planification et les tests préalables nécessaires à la mise à niveau, comme décrit dans [Planification d’une mise à niveau de version majeure d’un cluster Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning).

## Console
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CON"></a>

L’exemple suivant met à niveau le cluster de bases de données `mydbcluster-cluster` vers Aurora MySQL version 3.04.1.

**Pour mettre à niveau la version majeure d’un cluster de bases de données Aurora MySQL**

1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon RDS à l’adresse [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Si vous avez utilisé un groupe de paramètres personnalisé avec le cluster de bases de données d’origine, créez un groupe de paramètres correspondant compatible avec la nouvelle version majeure. Apportez les modifications nécessaires aux paramètres de configuration de ce nouveau groupe de paramètres. Pour plus d’informations, consultez [Comment les mises à niveau sur place affectent les groupes de paramètres d’un cluster](#AuroraMySQL.Upgrading.ParamGroups).

1.  Dans la panneau de navigation, choisissez **Databases (Bases de données)**. 

1.  Dans la liste, sélectionnez le cluster de bases de données à modifier. 

1.  Sélectionnez **Modify**. 

1.  Pour **Version**, sélectionnez une nouvelle version majeure d’Aurora MySQL.

   Nous conseillons généralement d’utiliser la dernière version mineure de la version majeure. Ici, nous choisissons la version par défaut actuelle.  
![\[Mise à niveau sur place d’un cluster de bases de données Aurora MySQL de la version 2 vers la version 3\]](http://docs.aws.amazon.com/fr_fr/AmazonRDS/latest/AuroraUserGuide/images/ams-upgrade-v2-v3.png)

1.  Choisissez **Continuer**. 

1.  Sur la page suivante, indiquez quand effectuer la mise à niveau. Sélectionnez **During the next scheduled maintenance window (Pendant la fenêtre de maintenance planifiée suivante)** ou **Immediately (Immédiatement)**. 

1.  (Facultatif) Examinez régulièrement la page **Events (Événements)** de la console RDS pendant la mise à niveau pour mieux surveiller la progression de la mise à niveau et identifier les problèmes éventuels. Si la mise à niveau rencontre des problèmes, consultez [Dépannage de la mise à niveau sur place d’Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md) pour connaître les étapes à suivre. 

1. Si vous avez créé un nouveau groupe de paramètres au début de cette procédure, associez le groupe de paramètres personnalisé à votre cluster mis à niveau. Pour plus d’informations, consultez [Comment les mises à niveau sur place affectent les groupes de paramètres d’un cluster](#AuroraMySQL.Upgrading.ParamGroups).
**Note**  
 Pour effectuer cette étape, vous devez redémarrer le cluster afin d’appliquer le nouveau groupe de paramètres. 

1.  (Facultatif) Après avoir terminé les tests postérieurs à la mise à niveau, supprimez l’instantané manuel créé par Aurora au début de la mise à niveau. 

## AWS CLI
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CLI"></a>

Pour mettre à niveau la version majeure d’un cluster de bases de données Aurora MySQL, utilisez la commande de l’AWS CLI [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) avec les paramètres requis suivants :
+ `--db-cluster-identifier`
+ `--engine-version`
+ `--allow-major-version-upgrade`
+  `--apply-immediately` ou `--no-apply-immediately`

Si votre cluster utilise des groupes de paramètres personnalisés, incluez également l’une des options suivantes ou les deux :
+ `--db-cluster-parameter-group-name`, si le cluster utilise un groupe de paramètres de cluster personnalisé
+ `--db-instance-parameter-group-name`, si des instances du cluster utilisent un groupe de paramètres de base de données personnalisé

L’exemple suivant met à niveau le cluster de bases de données `sample-cluster` vers Aurora MySQL version 3.04.1. La mise à niveau se produit immédiatement, au lieu d’attendre la fenêtre de maintenance suivante.

**Example**  
Pour Linux, macOS ou Unix :  

```
aws rds modify-db-cluster \
          --db-cluster-identifier sample-cluster \
          --engine-version 8.0.mysql_aurora.3.04.1 \
          --allow-major-version-upgrade \
          --apply-immediately
```
Pour Windows :  

```
aws rds modify-db-cluster ^
          --db-cluster-identifier sample-cluster ^
          --engine-version 8.0.mysql_aurora.3.04.1 ^
          --allow-major-version-upgrade ^
          --apply-immediately
```
Vous pouvez combiner d’autres commandes de la CLI avec `modify-db-cluster` pour créer un processus automatisé de bout en bout permettant d’effectuer et de vérifier les mises à niveau. Pour plus d’informations et d’exemples, consultez [Tutoriel de mise à niveau sur place d’Aurora MySQL](AuroraMySQL.Upgrading.Tutorial.md).

**Note**  
Si votre cluster fait partie d’une base de données Aurora globale, la procédure de mise à niveau sur place est légèrement différente. Vous appelez l’opération de commande [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) au lieu de `modify-db-cluster`. Pour plus d’informations, consultez [Mises à niveau majeures sur place des bases de données globales](#AuroraMySQL.Upgrading.GlobalDB).

## API RDS
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.API"></a>

Pour mettre à niveau la version majeure d’un cluster de bases de données Aurora MySQL, utilisez l’opération d’API RDS [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) avec les paramètres requis suivants :
+ `DBClusterIdentifier`
+ `Engine`
+ `EngineVersion`
+ `AllowMajorVersionUpgrade`
+ `ApplyImmediately` (défini sur `true` ou `false`).

**Note**  
Si votre cluster fait partie d’une base de données Aurora globale, la procédure de mise à niveau sur place est légèrement différente. Appelez l’opération [ModifyGlobalCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalClusterParameterGroup.html) au lieu de `ModifyDBCluster`. Pour plus d’informations, consultez [Mises à niveau majeures sur place des bases de données globales](#AuroraMySQL.Upgrading.GlobalDB).

## Comment les mises à niveau sur place affectent les groupes de paramètres d’un cluster
<a name="AuroraMySQL.Upgrading.ParamGroups"></a>

Les groupes de paramètres Aurora ont différents ensembles de paramètres de configuration pour les clusters compatibles avec MySQL 5.7 ou 8.0. Lorsque vous effectuez une mise à niveau sur place, le cluster mis à niveau et toutes ses instances doivent utiliser les groupes de paramètres de cluster et d’instance correspondants :

Votre cluster et vos instances peuvent utiliser les groupes de paramètres compatibles avec la version 5.7 par défaut. Si tel est le cas, le cluster mis à niveau et l’instance commencent par les groupes de paramètres compatibles avec la version 8.0 par défaut. Si votre cluster et vos instances utilisent des groupes de paramètres personnalisés, assurez-vous de créer des groupes de paramètres correspondants compatibles avec la version 8.0. Assurez-vous également de les spécifier au cours du processus de mise à niveau.

**Note**  
Pour la plupart des paramètres, vous pouvez choisir le groupe de paramètres personnalisé à deux points. C’est lorsque vous créez le cluster ou que vous associez le groupe de paramètres au cluster ultérieurement.  
Toutefois, si vous utilisez un autre paramètre que le paramètre par défaut pour `lower_case_table_names`, vous devez configurer le groupe de paramètres personnalisés avec ce paramètre à l’avance. Spécifiez ensuite le groupe de paramètres lorsque vous effectuez la restauration des instantanés pour créer le cluster. Les modifications apportées au paramètre `lower_case_table_names` n’ont aucun effet après la création du cluster.  
Nous vous recommandons d’utiliser le même paramètre pour `lower_case_table_names` lorsque vous passez de la version 2 à la version 3 de Aurora MySQL.  
Avec une base de données globale Aurora basée sur Aurora MySQL, vous ne pouvez effectuer une mise à niveau sur place d’Aurora MySQL version 2 vers la version 3 que si le paramètre `lower_case_table_names` est défini sur sa valeur par défaut et si vous redémarrez la base de données globale. Pour plus d’informations sur les méthodes que vous pouvez utiliser, consultez [Mises à niveau de version majeure.](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major).

## Modifications apportées aux propriétés du cluster entre les versions d’Aurora MySQL
<a name="AuroraMySQL.Upgrading.Attrs"></a>

Lorsque vous effectuez une mise à niveau d’Aurora MySQL version 2 vers la version 3, veillez à vérifier les applications et les scripts que vous utilisez pour configurer ou gérer des clusters et des instances de base de données Aurora MySQL.

En outre, modifiez le code qui manipule les groupes de paramètres afin qu’il tienne compte du fait que les noms de groupes de paramètres par défaut sont différents pour les clusters compatibles avec 5.7 et 8.0. Les noms des groupes de paramètres par défaut pour des clusters Aurora MySQL versions 2 et 3 sont `default.aurora-mysql5.7` et `default.aurora-mysql8.0`, respectivement.

Par exemple, vous pouvez avoir un code semblable au suivant qui s’applique à votre cluster avant une mise à niveau.

```
# Check the default parameter values for MySQL 5.7–compatible clusters.
aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql5.7 --region us-east-1
```

 Après la mise à niveau de la version majeure du cluster, modifiez ce code comme suit.

```
# Check the default parameter values for MySQL 8.0–compatible clusters.
aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql8.0 --region us-east-1
```

## Mises à niveau majeures sur place des bases de données globales
<a name="AuroraMySQL.Upgrading.GlobalDB"></a>

 Pour une base de données Aurora globale, mettez à niveau le cluster de bases de données globale. Aurora met automatiquement à niveau tous les clusters en même temps et s’assure qu’ils utilisent tous la même version du moteur. Cette exigence est due au fait que toutes les modifications apportées aux tables système, aux formats de fichiers de données et autres éléments sont automatiquement répliquées sur tous les clusters secondaires. 

Suivez les instructions de la section [Fonctionnement de la mise à niveau sur place d’une version majeure de Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence). Lorsque vous spécifiez ce qui doit être mis à niveau, veillez à choisir le cluster de bases de données global plutôt que l’un des clusters qu’il contient.

Si vous utilisez l’AWS Management Console, choisissez l’élément avec le rôle **Global database** (Base de données globale).

![\[Mise à niveau du cluster de bases de données\]](http://docs.aws.amazon.com/fr_fr/AmazonRDS/latest/AuroraUserGuide/images/aurora-global-databases-major-upgrade-global-cluster.png)


 Si vous utilisez l’AWS CLI ou l’API RDS, lancez le processus de mise à niveau en appelant la commande [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) ou l’opération [ModifyGlobalCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalCluster.html). Vous utilisez l’un d’entre eux au lieu de `modify-db-cluster` ou `ModifyDBCluster`.

**Note**  
Vous ne pouvez pas spécifier un groupe de paramètres personnalisés pour le cluster de bases de données globale pendant que vous effectuez une mise à niveau majeure de la version de cette base de données globale Aurora. Créez vos groupes de paramètres personnalisés dans chaque région du cluster global. Appliquez-les ensuite manuellement aux clusters régionaux après la mise à niveau.

 Pour mettre à niveau la version majeure d’un cluster de bases de données Aurora MySQL global à l’aide de l’interface AWS CLI, utilisez la commande [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) avec les paramètres requis suivants : 
+  `--global-cluster-identifier` 
+  `--engine aurora-mysql` 
+  `--engine-version` 
+  `--allow-major-version-upgrade` 

L’exemple suivant met à niveau le cluster de bases de données global vers Aurora MySQL version 3.04.2.

**Example**  
Pour Linux, macOS ou Unix :  

```
aws rds modify-global-cluster \
          --global-cluster-identifier global_cluster_identifier \
          --engine aurora-mysql \
          --engine-version 8.0.mysql_aurora.3.04.2 \
          --allow-major-version-upgrade
```
Pour Windows :  

```
aws rds modify-global-cluster ^
          --global-cluster-identifier global_cluster_identifier ^
          --engine aurora-mysql ^
          --engine-version 8.0.mysql_aurora.3.04.2 ^
          --allow-major-version-upgrade
```

## Mises à niveau sur place pour les clusters de bases de données ayant des réplicas en lecture entre régions
<a name="AuroraMySQL.Upgrading.XRRR"></a>

Vous pouvez mettre à niveau un cluster de bases de données Aurora ayant un réplica en lecture entre régions à l’aide de la procédure de mise à niveau sur place, mais certains éléments doivent être pris en considération :
+ Vous devez d’abord mettre à niveau le cluster de bases de données du réplica en lecture. Si vous essayez d’abord de mettre à niveau le cluster principal, vous recevez un message d’erreur similaire au message suivant :

  Impossible de mettre à niveau le cluster de bases de données test-xr-primary-cluster, car le réplica entre régions d’Aurora associé, test-xr-replica-cluster, n’a pas encore reçu les correctifs requis. Mettez à niveau le réplica entre régions d’Aurora et réessayez.

  Cela signifie que le cluster de bases de données principal ne peut pas avoir une version de moteur de base de données supérieure à celle du cluster de réplication.
+ Avant de mettre à niveau le cluster de bases de données principal, arrêtez la charge de travail d’écriture et désactivez toute nouvelle demande de connexion à l’instance de base de données d’enregistreur du cluster principal.
+ Lorsque vous mettez à niveau le cluster principal, choisissez un groupe de paramètres de cluster de bases de données personnalisé dont le paramètre `binlog_format` est défini sur une valeur qui prend en charge la réplication des journaux binaires, comme `MIXED`.

  Pour plus d’informations sur l’utilisation de la journalisation binaire Aurora, consultez [Réplication entre Aurora et MySQL ou entre Aurora et un autre cluster de bases de données Aurora (réplication de journaux binaires)](AuroraMySQL.Replication.MySQL.md). Pour plus d’informations sur la modification des paramètres de configuration de Aurora MySQL, consultez [Paramètres de configuration d’Aurora MySQL](AuroraMySQL.Reference.ParameterGroups.md) et [Groupes de paramètres pour Amazon Aurora](USER_WorkingWithParamGroups.md).
+ N’attendez pas trop longtemps pour mettre à niveau le cluster de bases de données principal après avoir mis à niveau le cluster du réplica. Nous vous recommandons de ne pas attendre au-delà de la fenêtre de maintenance suivante.
+ Après avoir mis à niveau le cluster de bases de données principal, redémarrez son instance de base de données d’enregistreur. Le groupe de paramètres de cluster de bases de données personnalisé qui active la réplication des journaux binaires ne prend effet qu’une fois que l’instance de base de données d’enregistreur est redémarrée.
+ Ne relancez pas la charge de travail d’écriture et n’activez pas les connexions à l’instance de base de données d’enregistreur tant que vous n’avez pas confirmé que la réplication entre régions a redémarré et que le délai de réplication de la Région AWS secondaire est de 0.

# Tutoriel de mise à niveau sur place d’Aurora MySQL
<a name="AuroraMySQL.Upgrading.Tutorial"></a>

Les exemples Linux suivants montrent comment effectuer les grandes étapes de la procédure de mise à niveau sur place à l’aide de la AWS CLI.

Ce premier exemple crée un cluster de bases de données Aurora exécutant une version 2.x d’Aurora MySQL. Le cluster comprend une instance de base de données de scripteur et une instance de base de données de lecteur. La commande `wait db-instance-available` se suspend tant que l’instance de base de données du scripteur n’est pas disponible. C’est là que le cluster est prêt à être mis à niveau.

```
aws rds create-db-cluster --db-cluster-identifier mynewdbcluster --engine aurora-mysql \
  --db-cluster-version 5.7.mysql_aurora.2.11.2
...
aws rds create-db-instance --db-instance-identifier mynewdbcluster-instance1 \
  --db-cluster-identifier mynewdbcluster --db-instance-class db.t4g.medium --engine aurora-mysql
...
aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1
```

Les versions 3.x d’Aurora MySQL vers lesquelles vous pouvez mettre à niveau le cluster dépendent de la version 2.x que le cluster exécute actuellement et de la Région AWS dans laquelle il se trouve. La première commande, avec `--output text`, montre simplement la version cible disponible. La deuxième commande affiche la sortie JSON complète de la réponse. Dans cette réponse, vous pouvez voir des détails tels que la valeur `aurora-mysql` que vous utilisez pour le paramètre `engine`. Vous pouvez également voir le fait que la mise à niveau vers 3.04.0 représente une mise à niveau de version majeure.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].{EngineVersion:EngineVersion}' --output text
5.7.mysql_aurora.2.11.2

aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.2 \
  --query '*[].[ValidUpgradeTarget]'
...
{
    "Engine": "aurora-mysql",
    "EngineVersion": "8.0.mysql_aurora.3.04.0",
    "Description": "Aurora MySQL 3.04.0 (compatible with MySQL 8.0.28)",
    "AutoUpgrade": false,
    "IsMajorVersionUpgrade": true,
    "SupportedEngineModes": [
        "provisioned"
    ],
    "SupportsParallelQuery": true,
    "SupportsGlobalDatabases": true,
    "SupportsBabelfish": false,
    "SupportsIntegrations": false
},
...
```

Cet exemple montre pourquoi, si vous saisissez un numéro de version cible qui n’est pas une cible de mise à niveau valide pour le cluster, Aurora n’effectue pas la mise à niveau. Aurora n’effectue pas non plus de mise à niveau de version majeure, sauf si vous incluez le paramètre `--allow-major-version-upgrade`. Ainsi, vous ne pouvez pas effectuer par erreur une mise à niveau susceptible de nécessiter des tests approfondis et des modifications du code de votre application.

```
aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 5.7.mysql_aurora.2.09.2 --apply-immediately
An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: Cannot find upgrade target from 5.7.mysql_aurora.2.11.2 with requested version 5.7.mysql_aurora.2.09.2.

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --region us-east-1 --apply-immediately
An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: The AllowMajorVersionUpgrade flag must be present when upgrading to a new major version.

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --apply-immediately --allow-major-version-upgrade
{
  "DBClusterIdentifier": "mynewdbcluster",
  "Status": "available",
  "Engine": "aurora-mysql",
  "EngineVersion": "5.7.mysql_aurora.2.11.2"
}
```

 Quelques instants sont nécessaires pour que l’état du cluster et des instances de base de données associées passe à `upgrading`. Les numéros de version du cluster et des instances de base de données ne changent que lorsque la mise à niveau est terminée. Encore une fois, vous pouvez utiliser la commande `wait db-instance-available` pour l’instance de base de données du scripteur afin d’attendre la fin de la mise à niveau avant de poursuivre. 

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].[Status,EngineVersion]' --output text
upgrading 5.7.mysql_aurora.2.11.2

aws rds describe-db-instances --db-instance-identifier mynewdbcluster-instance1 \
  --query '*[].{DBInstanceIdentifier:DBInstanceIdentifier,DBInstanceStatus:DBInstanceStatus} | [0]'
{
    "DBInstanceIdentifier": "mynewdbcluster-instance1",
    "DBInstanceStatus": "upgrading"
}

aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1
```

 À ce stade, le numéro de version du cluster correspond à celui spécifié pour la mise à niveau. 

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].[EngineVersion]' --output text

8.0.mysql_aurora.3.04.0
```

L’exemple précédent représente une mise à niveau immédiate en spécifiant le paramètre `--apply-immediately`. Pour que la mise à niveau se produise à un moment opportun, lorsque le cluster ne devrait pas être occupé, vous pouvez spécifier le paramètre `--no-apply-immediately`. Il permet de lancer la mise à niveau lors de la prochaine fenêtre de maintenance du cluster. La fenêtre de maintenance définit la période pendant laquelle les opérations de maintenance peuvent commencer. Une opération de longue durée ne doit pas nécessairement se terminer pendant la fenêtre de maintenance. Par conséquent, vous n’avez pas besoin de définir une fenêtre de maintenance plus grande, même si vous pensez que la mise à niveau peut prendre beaucoup de temps.

L’exemple suivant met à niveau un cluster qui exécute initialement Aurora MySQL version 2.11.2. Dans la sortie `describe-db-engine-versions`, les valeurs `False` et `True` représentent la propriété `IsMajorVersionUpgrade`. À partir de la version 2.11.2, vous pouvez effectuer une mise à niveau vers d’autres versions 2.\$1. Ces mises à niveau ne sont pas considérées comme des mises à niveau de version majeures et ne nécessitent donc pas de mise à niveau sur place. La mise à niveau sur place n’est disponible que pour les mises à niveau vers les versions 3.\$1 répertoriées dans la liste.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].{EngineVersion:EngineVersion}' --output text
5.7.mysql_aurora.2.11.2

aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.10.2 \
  --query '*[].[ValidUpgradeTarget]|[0][0]|[*].[EngineVersion,IsMajorVersionUpgrade]' --output text

5.7.mysql_aurora.2.11.3 False
5.7.mysql_aurora.2.11.4 False
5.7.mysql_aurora.2.11.5 False
5.7.mysql_aurora.2.11.6 False
5.7.mysql_aurora.2.12.0 False
5.7.mysql_aurora.2.12.1 False
5.7.mysql_aurora.2.12.2 False
5.7.mysql_aurora.2.12.3 False
8.0.mysql_aurora.3.04.0 True
8.0.mysql_aurora.3.04.1 True
8.0.mysql_aurora.3.04.2 True
8.0.mysql_aurora.3.04.3 True
8.0.mysql_aurora.3.05.2 True
8.0.mysql_aurora.3.06.0 True
8.0.mysql_aurora.3.06.1 True
8.0.mysql_aurora.3.07.1 True

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --no-apply-immediately --allow-major-version-upgrade
...
```

Lorsqu’un cluster est créé sans fenêtre de maintenance spécifiée, Aurora choisit un jour de la semaine de manière aléatoire. Ici, la commande `modify-db-cluster` est soumise un lundi. Nous modifions la fenêtre de maintenance et la définissons sur mardi matin. Toutes les heures sont représentées dans le fuseau horaire UTC. La fenêtre `tue:10:00-tue:10:30` correspond à 2h00-2h30, heure du Pacifique. Les modifications de la fenêtre de maintenance prennent effet immédiatement.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]'
[
    [
        "sat:08:20-sat:08:50"
    ]
]

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster --preferred-maintenance-window tue:10:00-tue:10:30"
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]'
[
    [
        "tue:10:00-tue:10:30"
    ]
]
```

L’exemple suivant montre comment obtenir un rapport sur les événements générés par la mise à niveau. L’argument `--duration` représente le nombre de minutes nécessaire pour récupérer les informations d’événement. Cet argument est requis, car par défaut, `describe-events` renvoie uniquement les événements de la dernière heure.

```
aws rds describe-events --source-type db-cluster --source-identifier mynewdbcluster --duration 20160
{
    "Events": [
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "DB cluster created",
            "EventCategories": [
                "creation"
            ],
            "Date": "2022-11-17T01:24:11.093000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Performing online pre-upgrade checks.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T22:57:08.450000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Performing offline pre-upgrade checks.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T22:57:59.519000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Creating pre-upgrade snapshot [preupgrade-mynewdbcluster-5-7-mysql-aurora-2-10-2-to-8-0-mysql-aurora-3-02-0-2022-11-18-22-55].",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:00:22.318000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Cloning volume.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:01:45.428000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:02:25.141000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:06:23.036000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Upgrading database objects.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:06:48.208000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster major version has been upgraded",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:10:28.999000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        }
    ]
}
```

# Identification de la cause des échecs de mise à niveau de version majeure Aurora MySQL
<a name="AuroraMySQL.Upgrading.failure-events"></a>

Dans le [didacticiel](AuroraMySQL.Upgrading.Tutorial.md), la mise à niveau d’Aurora MySQL version 2 vers la version 3 a réussi. Toutefois, si la mise à niveau avait échoué, vous voudriez savoir pourquoi.

Pour ce faire, commencez par utiliser la commande `describe-events` de l’AWS CLI pour examiner les événements du cluster de bases de données. Cet exemple montre les événements liés à `mydbcluster` pendant les 10 dernières heures.

```
aws rds describe-events \
    --source-type db-cluster \
    --source-identifier mydbcluster \
    --duration 600
```

Dans ce cas, la vérification préalable de la mise à niveau a échoué.

```
{
    "Events": [
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster engine version upgrade started.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:22.846000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        },
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster is in a state that cannot be upgraded: Upgrade prechecks failed. For more details, see the  
             upgrade-prechecks.log file. For more information on troubleshooting the cause of the upgrade failure, see 
             https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:24.373000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        }
    ]
}
```

Pour diagnostiquer la cause exacte du problème, examinez les journaux de base de données de l’instance de base de données d’enregistreur. Lorsqu’une mise à niveau vers Aurora MySQL 3 échoue, l’instance contient un fichier journal portant le nom `upgrade-prechecks.log`. Cet exemple montre comment détecter la présence de ce journal, puis comment le télécharger dans un fichier local pour examen.

```
aws rds describe-db-log-files --db-instance-identifier mydbcluster-instance \
    --query '*[].[LogFileName]' --output text

error/mysql-error-running.log
error/mysql-error-running.log.2024-04-11.20
error/mysql-error-running.log.2024-04-11.21
error/mysql-error.log
external/mysql-external.log
upgrade-prechecks.log

aws rds download-db-log-file-portion --db-instance-identifier mydbcluster-instance \
    --log-file-name upgrade-prechecks.log \
    --starting-token 0 \
    --output text >upgrade_prechecks.log
```

Le fichier `upgrade-prechecks.log` est au format JSON. Nous le téléchargeons à l’aide de l’option `--output text` afin d’éviter de coder la sortie JSON dans un autre encapsuleur JSON. Pour les mises à niveau d’Aurora MySQL version 3, ce journal inclut toujours certains messages d’information et d’avertissement. Il inclut uniquement des messages d’erreur si la mise à niveau échoue. Si la mise à niveau réussit, le fichier journal n’est pas créé du tout.

Pour résumer toutes les erreurs et afficher les champs d’objet et de description associés, vous pouvez exécuter la commande `grep -A 2 '"level": "Error"'` sur le contenu du fichier `upgrade-prechecks.log`. Cela permet d’afficher chaque ligne d’erreur et les deux lignes qui la suivent. Elles contiennent le nom de l’objet de base de données correspondant et des conseils sur la façon de corriger le problème.

```
$ cat upgrade-prechecks.log | grep -A 2 '"level": "Error"'

"level": "Error",
"dbObject": "problematic_upgrade.dangling_fulltext_index",
"description": "Table `problematic_upgrade.dangling_fulltext_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
```

Dans cet exemple, vous pouvez exécuter la commande SQL suivante sur la table en cause pour tenter de résoudre le problème, ou vous pouvez recréer la table sans l’index suspendu.

```
OPTIMIZE TABLE problematic_upgrade.dangling_fulltext_index;
```

Réessayez ensuite la mise à niveau.

# Dépannage de la mise à niveau sur place d’Aurora MySQL
<a name="AuroraMySQL.Upgrading.Troubleshooting"></a>

Suivez les conseils suivants pour résoudre les problèmes liés aux mises à niveau sur place d’Aurora MySQL. Ces conseils ne s’appliquent pas aux clusters de bases de données Aurora Serverless.


| Pourquoi la mise à niveau sur place s’est arrêtée ou est lente | Effet | Solution permettant à la mise à niveau sur place de se terminer dans la fenêtre de maintenance | 
| --- | --- | --- | 
| Le réplica entre régions d’Aurora associé n’a pas encore reçu les correctifs requis | Aurora annule la mise à niveau. | Mettez à niveau le réplica entre régions d’Aurora et réessayez. | 
| Le cluster a des transactions XA à l’état préparé. | Aurora annule la mise à niveau. | Validez ou restaurez toutes les transactions XA préparées. | 
| Le cluster traite toutes les instructions en langage de définition de données (DDL). | Aurora annule la mise à niveau. | Pensez à attendre et à effectuer la mise à niveau une fois toutes les instructions DDL terminées. | 
| Le cluster a des modifications non validées pour de nombreuses lignes. | La mise à niveau pourrait prendre beaucoup de temps. |  Le processus de mise à niveau restaure les modifications non validées. L’indicateur de cette condition est la valeur de `TRX_ROWS_MODIFIED` dans la table `INFORMATION_SCHEMA.INNODB_TRX`. Prévoyez d’effectuer la mise à niveau uniquement lorsque toutes les transactions volumineuses ont été validées ou restaurées.  | 
| Le cluster a un nombre élevé d’enregistrements d’annulation. | La mise à niveau pourrait prendre beaucoup de temps. |  Même si les transactions non validées affectent peu de lignes, elles peuvent impliquer un grand volume de données. Par exemple, si vous insérez des objets BLOB volumineux, Aurora ne détecte ni ne génère automatiquement d’événement pour ce type d’activité de transaction. L’indicateur de cette condition est la longueur de la liste d’historique (HLL). Le processus de mise à niveau restaure les modifications non validées. Vous pouvez vérifier la liste HLL dans la sortie de la commande SQL `SHOW ENGINE INNODB STATUS` ou directement à l’aide de la requête SQL suivante : <pre>SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';</pre> Vous pouvez également utiliser la métrique `RollbackSegmentHistoryListLength` dans Amazon CloudWatch. Prévoyez d’effectuer la mise à niveau uniquement une fois que la longueur de la liste HLL sera plus petite.  | 
| Le cluster est en train de valider une transaction de journal binaire volumineuse | La mise à niveau pourrait prendre beaucoup de temps. |  Le processus de mise à niveau attend que les modifications de journaux binaires soient appliquées. Plus de transactions ou d’instructions DDL pourraient commencer pendant cette période, ce qui ralentirait encore le processus de mise à niveau. Planifiez le processus de mise à niveau lorsque le cluster n’est pas occupé à générer des modifications de réplication de journaux binaires. Aurora ne détecte ni ne génère automatiquement d’événement pour cette condition.  | 
| Incohérences de schéma résultant de la suppression ou de l’endommagement de fichiers | Aurora annule la mise à niveau. |  Changez le moteur de stockage par défaut pour les tables temporaires de MyISAM à InnoDB. Procédez comme suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  | 
| L’utilisateur principal a été supprimé | Aurora annule la mise à niveau. |   Ne supprimez pas l’utilisateur principal.  Toutefois, si, pour une raison ou une autre, vous venez à supprimer l’utilisateur principal, restaurez-le à l’aide des commandes SQL suivantes : <pre>CREATE USER 'master_username'@'%' IDENTIFIED BY 'master_user_password' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;<br /><br />GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, <br />LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, <br />TRIGGER, LOAD FROM S3, SELECT INTO S3, INVOKE LAMBDA, INVOKE SAGEMAKER, INVOKE COMPREHEND ON *.* TO 'master_username'@'%' WITH GRANT OPTION;</pre>  | 

Pour plus de détails sur la résolution des problèmes à l’origine de l’échec des vérifications préalables de la mise à niveau, consultez les blogs suivants :
+ [Liste de contrôle de mise à niveau d’Amazon Aurora MySQL version 2 (avec compatibilité MySQL 5.7) vers la version 3 (avec compatibilité MySQL 8.0), partie 1](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-1/)
+ [Liste de contrôle de mise à niveau d’Amazon Aurora MySQL version 2 (avec compatibilité MySQL 5.7) vers la version 3 (avec compatibilité MySQL 8.0), partie 2](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2/)

 Vous pouvez suivre les étapes suivantes afin d’effectuer vos propres vérifications pour certaines des conditions du tableau précédent. Ainsi, vous pouvez planifier la mise à niveau à un moment où vous savez que la base de données sera dans un état permettant une mise à niveau rapide. 
+  Vous pouvez vérifier les transactions XA ouvertes en exécutant l’instruction `XA RECOVER`. Vous pouvez ensuite valider ou restaurer les transactions XA avant de lancer la mise à niveau. 
+  Vous pouvez vérifier les instructions DDL en exécutant une instruction `SHOW PROCESSLIST` et en recherchant les instructions `CREATE``DROP`, `ALTER`, `RENAME` et `TRUNCATE` dans la sortie. Laissez toutes les instructions DDL se terminer avant de commencer la mise à niveau. 
+  Vous pouvez vérifier le nombre total de lignes non validées en interrogeant la table `INFORMATION_SCHEMA.INNODB_TRX`. La table contient une ligne pour chaque transaction. La colonne `TRX_ROWS_MODIFIED` contient le nombre de lignes modifiées ou insérées par la transaction. 
+  Vous pouvez vérifier la longueur de la liste d’historique InnoDB en exécutant l’instruction `SHOW ENGINE INNODB STATUS SQL` et en recherchant la valeur `History list length` dans la sortie. Vous pouvez également vérifier la valeur directement en exécutant la requête suivante : 

  ```
  SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';
  ```

   La longueur de la liste d’historique correspond à la quantité d’informations d’annulation stockées par la base de données pour implémenter le contrôle de concurrence multi-version (MVCC). 

# Nettoyage postérieur à la mise à niveau pour Aurora MySQL version 3
<a name="AuroraMySQL.mysql80-post-upgrade"></a>

Une fois que vous avez terminé de mettre à niveau un cluster Aurora MySQL version 2 vers Aurora MySQL version 3, vous pouvez effectuer les autres actions de nettoyage suivantes :
+ Créez de nouvelles versions compatibles avec MySQL 8.0 de tous les groupes de paramètres personnalisés. Appliquez toutes les valeurs de paramètres personnalisés nécessaires aux nouveaux groupes de paramètres.
+ Mettez à jour toutes les alarmes CloudWatch, les scripts de configuration, etc. pour utiliser les nouveaux noms pour toutes les métriques dont les noms ont été affectés par des changements linguistiques inclusifs. Pour connaître la liste des métriques concernées, consultez [Changements linguistiques inclusifs pour Aurora MySQL version 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language).
+ Mettez à jour tous les modèles CloudFormation pour utiliser les nouveaux noms pour tous les paramètres de configuration dont les noms ont été affectés par des modifications linguistiques inclusives. Pour obtenir la liste des paramètres convernés, consultez [Changements linguistiques inclusifs pour Aurora MySQL version 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language).

## Index spatiaux
<a name="AuroraMySQL.mysql80-spatial"></a>

Après la mise à niveau vers Aurora MySQL version 3, vérifiez si vous devez supprimer ou recréer des objets et des index liés aux index spatiaux. Avant MySQL 8.0, Aurora pouvait optimiser les requêtes spatiales à l’aide d’index qui ne contenaient pas d’identifiant de ressource spatiale (SRID). Aurora MySQL version 3 utilise uniquement des index spatiaux contenant des SRID. Lors d’une mise à niveau, Aurora supprime automatiquement tous les index spatiaux sans SRID et imprime des messages d’avertissement dans le journal de base de données. Si vous observez de tels messages d’avertissement, créez de nouveaux index spatiaux avec des SRID après la mise à niveau. Pour plus d’informations sur les modifications apportées aux fonctions spatiales et les types de données dans MySQL 8.0, consultez [Changements dans MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html)dans le *manuel de référence MySQL*.