Mise à niveau du moteur de base de données MySQL - Amazon Relational Database Service

Mise à niveau du moteur de base de données MySQL

Lorsque Amazon RDS prend en charge une nouvelle version d'un moteur de base de données, vous pouvez mettre à niveau vos instances de base de données vers cette nouvelle version. Il existe deux types de mises à niveau : les mises à niveau de version majeure et les mises à niveau de version mineure. En général, une mise à niveau d'une version majeure du moteur peut introduire des modifications non compatibles avec les applications existantes. En revanche, une mise à niveau de version mineure contient uniquement des modifications rétrocompatibles avec les applications existantes.

Pour effectuer une mise à niveau de version majeure, modifiez l'instance de base de données manuellement. Les mises à niveau de version mineure sont effectuées automatiquement si vous activez l'option correspondante sur votre instance de base de données. Dans tous les autres cas, modifiez manuellement l'instance de base de données pour effectuer une mise à niveau de version mineure.

Présentation de la mise à niveau

Amazon RDS prend deux instantanés de base de données au cours du processus de mise à niveau. Le premier instantané de base de données porte sur l'instance de base de données avant que toute modification de mise à niveau soit apportée. Si la mise à niveau ne fonctionne pas pour vos bases de données, vous pouvez restaurer cet instantané pour créer une instance de base de données exécutant l'ancienne version. Le second instantané de base de données est pris à la fin de la mise à niveau.

Note

Amazon RDS ne prend des instantanés de base de données que si vous avez défini la période de rétention des sauvegardes de votre instance de base de données sur un nombre supérieur à 0. Pour modifier la période de rétention des sauvegardes, consultez Modification d'une instance de base de données Amazon RDS.

Une fois la mise à niveau terminée, vous ne pouvez pas rétablir la version précédente du moteur de base de données. Si vous souhaitez revenir à la version précédente, restaurez le premier instantané de base de données pris pour créer une nouvelle instance de base de données.

Vous contrôlez à quel moment vous mettez à niveau votre instance de base de données vers une nouvelle version prise en charge par Amazon RDS. Ce niveau de contrôle vous aide à maintenir la compatibilité avec des versions de base de données spécifiques et à tester les nouvelles versions avec votre application avant un déploiement en production. Lorsque vous êtes prêt, vous pouvez effectuer des mises à niveau de version aux moments qui conviennent le mieux à votre planning.

Si votre instance de base de données utilise la réplication en lecture, mettez à niveau tous les réplicas en lecture avant de mettre à niveau l'instance source.

Si votre instance de base de données se trouve dans un déploiement multi-AZ, les deux instances de base de données principale et de secours sont mises à niveau. Les instances de base de données principale et de secours sont mises à niveau simultanément et vous devez faire face à une interruption jusqu'à ce que la mise à niveau soit terminée. La durée de la panne varie en fonction de la taille de votre instance de base de données.

Mises à niveau de version majeure pour MySQL

Amazon RDS prend en charge les mises à niveau sur place des versions majeures suivantes du moteur de base de données MySQL :

  • MySQL 5.5 vers MySQL 5.6

  • MySQL 5.6 vers MySQL 5.7

  • MySQL 5.7 vers MySQL 8.0

Note

Vous pouvez uniquement créer des instances de base de données MySQL version 5.7 et 8.0 avec les classes d'instance de base de données de la génération actuelle et de la dernière génération, en plus de la classe d'instance de base de données de la génération précédente db.m3.

Dans certains cas, vous souhaiterez mettre à niveau une instance de base de données MySQL version 5.6 en cours d'exécution sur une classe d'instance de base de données de génération précédente (autre que db.m3) vers une instance de base de données MySQL version 5.7. Dans ce cas, commencez par modifier l'instance de base de données afin d'utiliser une classe d'instance de base de données de génération actuelle ou de dernière génération. Ensuite, vous pouvez modifier l'instance de base de données pour utiliser le moteur de base de données MySQL version 5.7. Pour de plus amples informations sur les classes d'instance de base de données Amazon RDS, veuillez consulter Classes d'instances de base de données.

Présentation des mises à niveau de version majeure MySQL

Les mises à niveau de version majeure peuvent contenir des modifications de base de données qui ne sont pas rétrocompatibles avec les applications existantes. En conséquence, Amazon RDS n'applique pas automatiquement les mises à niveau de version majeure. Vous devez modifier manuellement votre instance de base de données. Nous vous recommandons de tester soigneusement toute mise à niveau avant de l'appliquer à vos instances de production.

Pour effectuer une mise à niveau de version majeure d'une instance de base de données MySQL version 5.5 sur Amazon RDS vers MySQL version 5.6 ou ultérieure, commencez par effectuer toutes les mises à jour disponibles du système d'exploitation. Une fois les mises à jour du système d'exploitation terminées, mettez à niveau chaque version majeure : 5.5 vers 5.6, puis 5.6 vers 5.7, puis 5.7 vers 8.0. Les instances de base de données MySQL créées avant le 24 avril 2014 affichent une mise à jour de système d'exploitation disponible jusqu'à ce que celle-ci soit appliquée. Pour de plus amples informations sur les mises à jour du système d'exploitation, veuillez consulter Application des mises à jour pour une instance de base de données.

Au cours d'une mise à niveau de version majeure de MySQL, Amazon RDS exécute le fichier binaire MySQL mysql_upgrade pour mettre à niveau les tables, si nécessaire. Amazon RDS vide également les tables slow_log et general_log pendant une mise à niveau de version majeure. Pour conserver les informations de journal, enregistrez le contenu du journal avant la mise à niveau de version majeure.

Les mises à niveau des versions majeures de MySQL durent généralement environ 10 minutes. Certaines mises à niveau peuvent durer plus longtemps en raison de la taille de la classe d'instance de base de données ou parce que l'instance ne suit pas certaines directives opérationnelles indiquées dans Bonnes pratiques pour Amazon RDS. Si vous effectuez une mise à niveau d'une instance de base de données à partir de la console Amazon RDS, le statut de l'instance de base de données indique quand la mise niveau est terminée. Si vous effectuez une mise à niveau à l'aide de l'AWS Command Line Interface (AWS CLI), utilisez la commande describe-db-instances et vérifiez la valeur de Status.

Si vous utilisez un groupe de paramètres personnalisé, pour la nouvelle version du moteur de base de données, vous devez spécifier un groupe de paramètres par défaut ou créer votre propre groupe de paramètres personnalisé. L'association du nouveau groupe de paramètres avec l'instance de base de données exige un redémarrage de la base de données initié par le client à la fin de la mise à niveau. Le statut du groupe de paramètres de l'instance de base de données indique pending-reboot si celle-ci doit être redémarrée pour que les modifications du groupe de paramètres soient appliquées. Vous pouvez afficher le statut du groupe de paramètres d'une instance de base de données dans la console ou en utilisant un appel tel que describe-db-instances.

Les mises à niveau vers MySQL version 5.7 peuvent être lentes

MySQL version 5.6.4 a introduit un nouveau format de date et d'heure pour les colonnes datetime, time et timestamp, qui autorise les expressions fractionnaires dans les valeurs de date et d'heure. Lors de la mise à niveau d'une instance de base de données vers MySQL version 5.7, MySQL force la conversion de tous les types de colonne de date et d'heure dans le nouveau format.

Étant donné que cette conversion recrée vos tables, cela peut prendre beaucoup de temps pour terminer la mise à niveau de l'instance de base de données. La conversion forcée se produit pour toutes les instances de base de données qui exécutent une version MySQL antérieure à la version 5.6.4. Elle se produit également pour les instances de base de données qui ont été mises à niveau à partir d'une version de MySQL antérieure à la version 5.6.4 vers une version autre que 5.7.

Si votre instance de base de données exécute une version de MySQL antérieure à la version 5.6.4 ou a été mise à niveau à partir d'une version antérieure à la version 5.6.4, nous recommandons d'effectuer une étape supplémentaire. Dans ce cas, nous vous recommandons de convertir les colonnes datetime, time et timestamp de votre base de données avant de mettre à niveau votre instance de base de données vers MySQL version 5.7. Cette conversion peut considérablement réduire le temps nécessaire pour mettre à niveau l'instance de base de données vers MySQL version 5.7. Pour mettre à niveau les colonnes de date et d'heure vers le nouveau format, vous devez émettre la commande ALTER TABLE <table_name> FORCE; pour chaque table qui contient des colonnes de date ou d'heure. Comme la modification d'une table la verrouille en lecture seule, il est recommandé d'effectuer cette mise à jour pendant une fenêtre de maintenance.

Pour trouver toutes les tables de votre base de données qui comportent des colonnes datetime, time ou timestamp, et créer une commande ALTER TABLE <table_name> FORCE; pour chaque table, utilisez la requête suivante.

SELECT DISTINCT CONCAT('ALTER TABLE `', REPLACE(is_tables.TABLE_SCHEMA, '`', '``'), '`.`', REPLACE(is_tables.TABLE_NAME, '`', '``'), '` FORCE;') FROM information_schema.TABLES is_tables INNER JOIN information_schema.COLUMNS col ON col.TABLE_SCHEMA = is_tables.TABLE_SCHEMA AND col.TABLE_NAME = is_tables.TABLE_NAME LEFT OUTER JOIN information_schema.INNODB_SYS_TABLES systables ON SUBSTRING_INDEX(systables.NAME, '#', 1) = CONCAT(is_tables.TABLE_SCHEMA,'/',is_tables.TABLE_NAME) LEFT OUTER JOIN information_schema.INNODB_SYS_COLUMNS syscolumns ON syscolumns.TABLE_ID = systables.TABLE_ID AND syscolumns.NAME = col.COLUMN_NAME WHERE col.COLUMN_TYPE IN ('time','timestamp','datetime') AND is_tables.TABLE_TYPE = 'BASE TABLE' AND is_tables.TABLE_SCHEMA NOT IN ('mysql','information_schema','performance_schema') AND (is_tables.ENGINE = 'InnoDB' AND syscolumns.MTYPE = 6);

Vérifications préalables aux mises à jour de MySQL 5.7 vers 8.0

MySQL 8.0 inclut plusieurs incompatibilités avec MySQL 5.7. Ces incompatibilités peuvent provoquer des problèmes lors d'une mise à niveau de MySQL 5.7 vers MySQL 8.0. Une certaine préparation est donc nécessaire sur votre base de données pour garantir la réussite de la mise à niveau. La liste suivante est une liste généralisée de ces incompatibilités :

  • Les tables ne doivent pas utiliser de fonctions ou de types de données obsolètes.

  • Il ne doit y avoir aucun fichier *.frm orphelin.

  • Les déclencheurs ne doivent pas avoir de definer manquant ou vide, ni de contexte de création invalide.

  • Aucune table partitionnée ne doit utiliser de moteur de stockage dépourvu de prise en charge native du partitionnement.

  • 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 dans la documentation MySQL.

  • Aucune table de la base de données du système mysqldans MySQL 5.7 ne doit avoir le même nom que la table utilisée dans le dictionnaire de données MySQL 8.0.

  • 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 ou 1 020 octets de longueur.

  • Avant de mettre à niveau vers la version MySQL 8.0.13 ou une version ultérieure, aucune partition de table ne doit se trouver dans les espaces de stockage InnoDB partagés.

  • Aucune requête ni définition de programme de la version MySQL 8.0.12 ou d’une version antérieure ne doit utiliser de qualificateur ASC ou DESC pour les clauses GROUP BY.

  • Votre installation MySQL ne doit pas utiliser de fonctionnalités incompatibles avec MySQL 8.0.

    Pour en savoir plus, consultez Fonctionnalités supprimées dans MySQL 8.0 dans la documentation MySQL.

  • Aucun nom de contrainte de clé étrangère ne doit dépasser 64 caractères.

  • 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) dans la documentation MySQL.

Lorsque vous démarrez une mise à niveau de MySQL 5.7 vers 8.0, Amazon RDS exécute automatiquement des vérifications préalables pour détecter ces incompatibilités. Pour plus d’informations sur la mise à niveau vers MySQL 8.0, consultez Mise à niveau de MySQL dans la documentation MySQL.

Ces vérifications préalables sont obligatoires. Vous ne pouvez pas choisir de les ignorer. Elles offrent les avantages suivants :

  • Elles vous permettent d'éviter les temps d'arrêts non planifiés pendant la mise à niveau.

  • Si vous avez des incompatibilités, Amazon RDS empêche la mise à niveau et vous fournit un journal pour que vous en sachiez plus à leur sujet. Vous pouvez ensuite utiliser le journal pour préparer votre base de données pour la mise à niveau vers la version 8.0 de MySQL en éliminant ces incompatibilités. Pour plus d’informations détaillées sur la suppression des incompatibilités, consultez Préparation de votre installation pour la mise à niveau dans la documentation MySQL et pour la mise à niveau vers MySQL 8.0 ? Ce que vous devez savoir... sur le blog MySQL Server.

Certaines vérifications préalables sont incluses avec MySQL et d'autres ont été spécifiquement créées par l’équipe Amazon RDS. Pour de plus amples informations sur les vérifications préalables fournies par MySQL, veuillez consulter Upgrade Checker Utility.

Les vérifications préalables s'exécutent avant que l'instance de base de données soit arrêtée pour la mise à niveau, ce qui signifie que leur exécution n'entraîne aucun temps d'arrêt. Si les vérifications préalables trouvent une incompatibilité, Amazon RDS annule automatiquement la mise à niveau avant que l'instance de base de données soit arrêtée. Amazon RDS génère également un événement pour l'incompatibilité. Pour de plus amples informations sur les événements Amazon RDS, veuillez consulter Utilisation de la notification d'événement Amazon RDS

Amazon RDS enregistre des informations détaillées sur chaque incompatibilité dans le fichier journal PrePatchCompatibility.log. Dans la plupart des cas, l'entrée de journal inclut un lien vers la documentation MySQL permettant de corriger l'incompatibilité. Pour de plus amples informations sur l'affichage des fichiers journaux, veuillez consulter Liste et affichage des fichiers journaux de base de données.

En raison de la nature des vérifications préalables, elle 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.

Note

Amazon RDS n'exécute les vérifications préalables que pour une mise à niveau de MySQL 5.7 vers MySQL 8.0. Elles ne sont pas exécutées pour les mises à niveau vers une version antérieure à MySQL 8.0. Par exemple, les vérifications préalables ne sont pas exécutées pour une mise à niveau de MySQL 5.6 vers MySQL 5.7.

Test d'une mise à niveau

Avant d'effectuer une mise à niveau de version majeure sur votre instance de base de données, testez soigneusement la compatibilité de votre base de données avec la nouvelle version. En outre, vous devez tester soigneusement la compatibilité de toutes les applications qui accèdent à la base de données avec la nouvelle version. Nous vous recommandons d'utiliser la procédure suivante.

Pour tester une mise à niveau de version majeure

  1. Passez en revue la documentation de la mise à niveau pour la nouvelle version du moteur de base de données afin de voir si des problèmes de compatibilité peuvent affecter votre base de données ou vos applications :

  2. Si votre instance de base de données est membre d'un groupe de paramètres de base de données personnalisé, créez un nouveau groupe de paramètres de base de données avec vos paramètres existants, qui soit compatible avec la nouvelle version majeure. Spécifiez le nouveau groupe de paramètres de base de données lorsque vous mettez à niveau votre instance de test afin que les tests de mise à niveau puissent vérifier son bon fonctionnement. Pour de plus amples informations sur la création d'un groupe de paramètres de base de données, veuillez consulter Utilisation de groupes de paramètres de base de données.

  3. Créez un instantané de base de données de l'instance de base de données à mettre à niveau. Pour de plus amples informations, veuillez consulter Création d'un instantané de base de données.

  4. Restaurez l'instantané de base de données pour créer une nouvelle instance de base de données de test. Pour de plus amples informations, veuillez consulter Restauration à partir d'un instantané de base de données.

  5. Modifiez cette nouvelle instance de base de données de test pour la mettre à niveau vers la nouvelle version, en utilisant l'une des méthodes détaillées plus loin. Si vous avez créé un groupe de paramètres à l'étape 2, spécifiez ce groupe de paramètres.

  6. Évaluez le stockage utilisé par l'instance mise à niveau pour déterminer si la mise à niveau requiert un stockage supplémentaire.

  7. Exécutez sur l'instance de base de données mise à niveau autant de tests d'assurance qualité que nécessaire pour garantir que votre base de données et votre application fonctionnent correctement avec la nouvelle version. Implémentez tous les nouveaux tests requis pour évaluer l'impact des éventuels problèmes de compatibilité que vous avez identifiés à l'étape 1. Testez toutes les fonctions et procédures stockées. Dirigez les versions de test de vos applications vers l'instance de base de données mise à niveau.

  8. En cas de succès de tous les tests, effectuez la mise à niveau sur votre instance de base de données de production. Nous vous recommandons de ne pas autoriser les opérations d'écriture sur l'instance de base de données tant que vous n'avez pas confirmé que tout fonctionne correctement.

Mise à niveau d'une instance de base de données MySQL

Pour de plus amples informations sur la mise à niveau manuelle ou automatique d'une instance de base de données MySQL, veuillez consulter Mise à niveau d'une version du moteur d'une instance de base de données .

Mise à niveau d'une base de données MySQL avec des temps d'arrêt réduits

Si votre instance de base de données MySQL est en cours d'utilisation avec une application de production, vous pouvez utiliser la procédure suivante pour mettre à niveau la version de la base de données pour votre instance de base de données. Cette procédure peut réduire les temps d'arrêt de votre application.

La procédure suivante illustre un exemple de mise à niveau de MySQL version 5.5 vers MySQL version 5.6. Vous pouvez utiliser les mêmes étapes générales pour des mises à niveau vers d'autres versions majeures.

Pour mettre à niveau une base de données MySQL alors qu'une instance de base de données est en cours d'utilisation

  1. Connectez-vous au AWS Management Console et ouvrez la console Amazon RDS à l'adresse https://console.aws.amazon.com/rds/.

  2. Créez un réplica en lecture de votre instance de base de données MySQL 5.5. Ce processus crée une copie pouvant être mise à niveau de votre base de données.

    1. Sur la console, choisissez Bases de données, puis sélectionnez l'instance de bases de données que vous souhaitez mettre à niveau.

    2. Pour Actions, choisissez Créer des réplicas en lecture.

    3. Spécifiez une valeur pour Identifiant de l'instance DB pour votre réplica en lecture et assurez-vous que la Classe d'instance DB et les autres paramètres correspondent à votre instance de base de données MySQL 5.5.

    4. Choisissez Créer un réplica en lecture.

  3. Une fois que le réplica en lecture a été créé et que Statut indique Disponible, mettez à niveau le réplica en lecture vers MySQL 5.6 :

    1. Sur la console, choisissez Bases de données, puis sélectionnez le réplica en lecture que vous venez de créer.

    2. Sélectionnez Modifier.

    3. Pour Version du moteur de base de données, choisissez la version MySQL 5.6 vers laquelle effectuer la mise à niveau, puis sélectionnez Continuer.

    4. Pour Scheduling of Modifications (Planification des modifications), choisissez Appliquer immédiatement.

    5. Choisissez Modifier l'instance de base de données pour démarrer la mise à niveau.

  4. Lorsque la mise à niveau est terminée et que Statut indique Disponible, vérifiez que le réplica en lecture mis à niveau est à jour avec l'instance de base de données MySQL 5.5 principale. Pour cela, connectez-vous au réplica en lecture et exécutez la commande SHOW SLAVE STATUS. Si le champ Seconds_Behind_Master a pour valeur 0, la réplication est à jour.

  5. Faites de votre réplica en lecture MySQL 5.6 une instance de base de données principale.

    Important

    Lorsque vous effectuez la promotion de votre réplica en lecture MySQL 5.6 en une instance de base de données mono-AZ autonome, il cesse d'être un réplica de votre instance de base de données MySQL 5.5. Nous vous conseillons d'effectuer la promotion de votre réplica en lecture MySQL 5.6 au cours d'un créneau de maintenance, lorsque votre instance de base de données MySQL 5.5 source est en mode lecture seule et que toutes les opérations d'écriture sont suspendues. Une fois la promotion terminée, vous pouvez diriger vos opérations d'écriture vers l'instance de base de données MySQL 5.6 mise à niveau pour garantir qu'aucune opération d'écriture ne se perde.

    En outre, avant la promotion de votre réplica en lecture MySQL 5.6, nous vous conseillons d'effectuer toutes les opérations en langage de définition de données (DDL) nécessaires sur votre réplica en lecture MySQL 5.6. Par exemple, la création d'index. Cette approche permet d'éviter tout effet négatif sur les performances du réplica en lecture MySQL 5.6 après sa promotion. Pour promouvoir un réplica en lecture.

    1. Sur la console, choisissez Bases de données, puis sélectionnez le réplica en lecture que vous venez de mettre à niveau.

    2. Pour Actions, choisissez Promote (Promouvoir).

    3. Choisissez Oui pour activer les sauvegardes automatiques pour l'instance du réplica en lecture. Pour de plus amples informations, veuillez consulter Utilisation des sauvegardes.

    4. Choisissez Continuer.

    5. Choisissez Promouvoir le réplica en lecture.

  6. Vous disposez à présent d'une version mise à niveau de votre base de données MySQL. À ce stade, vous pouvez diriger vos applications vers la nouvelle instance de base de données MySQL 5.6, ajouter des réplicas en lecture, configurer la prise en charge Multi-AZ, etc.