Utilisation de la réplication basée sur des identifiants de transaction globaux (GTID) pour Amazon RDS MySQL - Amazon Relational Database Service

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.

Utilisation de la réplication basée sur des identifiants de transaction globaux (GTID) pour Amazon RDS MySQL

La présente section vous apprend à utiliser les identifiants de transaction globaux (GTID) avec la réplication des journaux binaires entre les instances de base de données Amazon RDS MySQL.

Si vous utilisez la réplication des journaux binaires, mais que vous ne maîtrisez pas la réplication GTID avec MySQL, veuillez consulter la page Replication with Global Transaction Identifiers dans la documentation MySQL.

Note

La réplication GTID est prise en charge pour RDS MySQL version 5.7.23 et pour les versions ultérieures de MySQL 5.7. Toutes les instances de base de données RDS MySQL dans une configuration de réplication doivent respecter cette exigence. La réplication GTID n'est pas prise en charge pour RDS MySQL 5.5, 5.6 ou 8.0.

Note

Pour de plus amples informations sur la configuration de la réplication GTID avec une base de données externe, veuillez consulter Réplication avec une instance MySQL ou MariaDB s'exécutant à l'extérieur d'Amazon RDS.

Présentation des identifiants de transaction globaux (GTID)

Les identifiants de transaction globaux (GTID) sont des identifiants uniques générés pour des transactions MySQL validées. Vous pouvez utiliser ces identifiants pour simplifier et faciliter la résolution des problèmes liés à la réplication des journaux binaires.

MySQL utilise deux types différents de transactions pour la réplication des journaux binaires :

  • Transactions GTID – Transactions identifiées par un identifiant de transaction global (GTID).

  • Transactions anonymes – Transactions auxquelles aucun identifiant de transaction global (GTID) n'est associé.

Dans une configuration de réplication, les GTID sont uniques parmi toutes les instances de base de données. Les GTID simplifient la configuration de réplication dans la mesure où, lorsque vous les utilisez, vous n'avez pas à vous référer aux positions des fichiers journaux. Les GTID facilitent également le suivi des transactions répliquées et déterminent si l'instance source et les réplicas sont cohérents.

Vous pouvez utiliser la réplication GTID pour répliquer des données avec les réplicas en lecture MySQL d'Amazon RDS ou avec une base de données MySQL externe. Pour les réplicas en lecture RDS MySQL, vous pouvez configurer une réplication GTID lorsque vous créez de nouveaux réplicas en lecture, ou convertir des réplicas en lecture existants pour utiliser la réplication GTID.

Vous pouvez également utiliser la réplication GTID dans une configuration de réplication retardée avec RDS MySQL. Pour plus d'informations, consultez Configuration de la réplication retardée avec MySQL.

Paramètres pour la réplication basée sur des identifiants de transaction globaux (GTID)

Utilisez les paramètres suivants pour configurer une réplication GTID.

Paramètre Valeurs valides Description

gtid_mode

OFF, OFF_PERMISSIVE, ON_PERMISSIVE, ON

OFF spécifie que les nouvelles transactions sont des transactions anonymes (et n'ont donc pas de GTID), et qu'une transaction doit être anonyme pour être répliquée.

OFF_PERMISSIVE spécifie que les nouvelles transactions sont des transactions anonymes, mais que toutes les transactions peuvent être répliquées.

ON_PERMISSIVE spécifie que les nouvelles transactions sont des transactions GTID, mais que toutes les transactions peuvent être répliquées.

ON spécifie que les nouvelles transactions sont des transactions GTID, et qu'une transaction doit être une transaction GTID pour être répliquée.

enforce_gtid_consistency

OFF, ON, WARN

OFF autorise les transactions à enfreindre la cohérence GTID.

ON interdit aux transactions d'enfreindre la cohérence GTID.

WARN autorise les transactions à enfreindre la cohérence GTID mais génère un avertissement lorsqu'une infraction se produit.

Note

Dans AWS Management Console, le paramètre gtid_mode apparaît sous la forme gtid-mode.

Pour la réplication GTID, utilisez ces paramètres pour le groupe de paramètres de votre instance de base de données ou de votre réplica en lecture :

  • ON et ON_PERMISSIVE s'appliquent uniquement à la réplication sortante à partir d'une instance de base de données RDS ou d'un cluster Aurora MySQL. Ces deux valeurs forcent votre instance de base de données RDS ou votre cluster de base de données Aurora à utiliser des identifiants de transaction globaux (GTID) pour les transactions répliquées sur une base de données externe. ON exige que la base de données externe utilise également la réplication GTID. ON_PERMISSIVE rend la réplication GTID facultative sur la base de données externe.

  • S'il est défini, OFF_PERMISSIVE indique que vos instances de base de données RDS ou votre cluster de base de données Aurora peuvent accepter la réplication entrante à partir d'une base de données externe, que cette dernière utilise la réplication GTID ou non.

  • S'il est défini, OFF indique que vos instances de base de données RDS ou votre cluster de base de données Aurora acceptent uniquement la réplication entrante à partir de bases de données externes qui n'utilisent pas la réplication GTID.

Pour de plus amples informations sur les groupes de paramètres, veuillez consulter Utilisation de groupes de paramètres de base de données.

Configuration de la réplication basée sur des identifiants de transaction globaux (GTID) pour les nouveaux réplicas en lecture

Lorsque la réplication GTID est activée pour une instance de base de données RDS MySQL, elle est configurée automatiquement pour les réplicas en lecture de l'instance de base de données.

Pour activer la réplication GTID pour des nouveaux réplicas en lecture

  1. Assurez-vous que le groupe de paramètres associé à l'instance de base de données contient la configuration de paramètres suivante :

    • gtid_modeON ou ON_PERMISSIVE

    • enforce_gtid_consistencyON

    Pour plus d'informations sur la définition des paramètres de configuration à l'aide de groupes de paramètres, veuillez consulter Utilisation de groupes de paramètres de base de données.

  2. Si vous modifiez le groupe de paramètres de l'instance de base de données, redémarrez celle-ci. Pour en savoir plus à ce sujet, veuillez consulter Redémarrage d'une instance de base de données.

  3. Créez un ou plusieurs réplicas en lecture de l'instance de base de données. Pour en savoir plus à ce sujet, veuillez consulter Création d'un réplica en lecture.

Amazon RDS tente d'établir une réplication GTID entre l'instance de base de données MySQL et les réplicas en lecture à l'aide du paramètre MASTER_AUTO_POSITION. En cas d'échec, Amazon RDS utilise les positions de fichiers journaux pour la réplication avec les réplicas en lecture. Pour de plus amples informations sur le paramètre MASTER_AUTO_POSITION, veuillez consulter la page GTID Auto-Positioning dans la documentation MySQL.

Configuration de la réplication basée sur des identifiants de transaction globaux (GTID) pour des réplicas en lecture existants.

Pour une instance de base de données RDS MySQL existante avec des réplicas en lecture qui n'utilise pas la réplication GTID, vous pouvez configurer la réplication GTID entre l'instance de base de données et les réplicas en lecture.

Pour activer la réplication GTID pour des réplicas en lecture existants

  1. Si l'instance de base de données ou un réplica en lecture utilise RDS MySQL version 5.7.22 ou versions antérieures, mettez à niveau l'instance de base de données ou le réplica en lecture. Effectuez une mise à niveau vers RDS MySQL version 5.7.23 ou une version ultérieure de MySQL 5.7.

    Pour plus d'informations, consultez Mise à niveau du moteur de base de données MySQL.

  2. (Facultatif) Réinitialisez les paramètres GTID et testez le comportement de l'instance de base de données et des réplicas en lecture :

    1. Assurez-vous que le groupe de paramètres associé à l'instance de base de données et à chaque réplica en lecture contient le paramètre enforce_gtid_consistency défini sur WARN.

      Pour plus d'informations sur la définition des paramètres de configuration à l'aide de groupes de paramètres, veuillez consulter Utilisation de groupes de paramètres de base de données.

    2. Si vous modifiez le groupe de paramètres de l'instance de base de données, redémarrez celle-ci. Si vous modifiez le groupe de paramètres pour un réplica en lecture, redémarrez celui-ci.

      Pour plus d'informations, consultez Redémarrage d'une instance de base de données.

    3. Exécutez votre instance de base de données et vos réplicas en lecture avec votre charge de travail normale et surveillez les fichiers journaux.

      Si vous recevez des avertissements relatifs à des transactions incompatibles avec les identifiants de transaction globaux, modifiez votre application de sorte qu'elle utilise uniquement des fonctions compatibles avec les identifiants de transaction globaux. Assurez-vous que l'instance de base de données ne génère aucun avertissement relatif à des transactions incompatibles avec les identifiants de transaction globaux avant de passer à l'étape suivante.

  3. Réinitialisez les paramètres GTID de la réplication basée sur des identifiants de transaction globaux qui autorise les transactions anonymes jusqu'à ce que les réplicas en lecture les aient toutes traitées.

    1. Assurez-vous que le groupe de paramètres associé à l'instance de base de données et à chaque réplica en lecture contient la configuration de paramètres suivante :

      • gtid_modeON_PERMISSIVE

      • enforce_gtid_consistencyON

    2. Si vous modifiez le groupe de paramètres de l'instance de base de données, redémarrez celle-ci. Si vous modifiez le groupe de paramètres pour un réplica en lecture, redémarrez celui-ci.

  4. Attendez que toutes vos transactions anonymes soient répliquées. Pour vérifier qu'elles ont été répliquées, procédez comme suit :

    1. Exécutez l'instruction suivante sur votre instance de base de données.

      SHOW MASTER STATUS;

      Notez les valeurs dans les colonnes File et Position.

    2. Sur chaque réplica en lecture, utilisez les informations de fichier et de position de instance source lors de l'étape précédente pour exécuter la requête suivante.

      SELECT MASTER_POS_WAIT('file', position);

      Par exemple, si votre fichier se nomme mysql-bin-changelog.000031 et que sa position est 107, exécutez l'instruction suivante.

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);

      Si le réplica en lecture a dépassé la position spécifiée, la requête renvoie immédiatement un résultat. Sinon, la fonction attend. Passez à l'étape suivante lorsque la requête a renvoyé un résultat pour tous les réplicas en lecture.

  5. Réinitialisez les paramètres GTID uniquement pour la réplication GTID.

    1. Assurez-vous que le groupe de paramètres associé à l'instance de base de données et à chaque réplica en lecture contient la configuration de paramètres suivante :

      • gtid_modeON

      • enforce_gtid_consistencyON

    2. Redémarrez l'instance de base de données et chaque réplica en lecture.

  6. Sur chaque réplica en lecture, exécutez la procédure suivante.

    CALL mysql.rds_set_master_auto_position(1);

Désactivation de la réplication basée sur des identifiants de transaction globaux (GTID) pour une instance de base de données RDS MySQL avec des réplicas en lecture

Vous pouvez désactiver la réplication GTID pour une instance de base de données RDS MySQL avec des réplicas en lecture.

Pour désactiver la réplication GTID pour une instance de base de données RDS MySQL avec des réplicas en lecture

  1. Sur chaque réplica en lecture, exécutez la procédure suivante.

    CALL mysql.rds_set_master_auto_position(0);
  2. Réinitialisez gtid_mode sur ON_PERMISSIVE.

    1. Assurez-vous que le groupe de paramètres associé à l'instance de base de données RDS MySQL et à chaque réplica en lecture contient le paramètre gtid_mode défini sur ON_PERMISSIVE.

      Pour plus d'informations sur la définition des paramètres de configuration à l'aide de groupes de paramètres, veuillez consulter Utilisation de groupes de paramètres de base de données.

    2. Redémarrez l'instance de base de données RDS MySQL et chaque réplica en lecture. Pour de plus amples informations sur le redémarrage, veuillez consulter Redémarrage d'une instance de base de données.

  3. Réinitialisez gtid_mode sur OFF_PERMISSIVE :

    1. Assurez-vous que le groupe de paramètres associé à l'instance de base de données RDS MySQL et à chaque réplica en lecture contient le paramètre gtid_mode défini sur OFF_PERMISSIVE.

    2. Redémarrez l'instance de base de données RDS MySQL et chaque réplica en lecture.

  4. Attendez que toutes les transactions GTID soient appliquées sur tous les réplicas en lecture. Pour vérifier qu'elles ont été appliquées, procédez comme suit :

    Attendez que toutes les transactions GTID soient appliquées sur l'instance principale d'Aurora. Pour vérifier qu'elles ont été appliquées, procédez comme suit :

    1. Sur l'instance de base de données RDS MySQL, exécutez la commande SHOW MASTER STATUS.

      Votre sortie doit ressembler à ce qui suit.

      File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------

      Notez le fichier et la position dans votre sortie.

    2. Sur chaque réplica en lecture, utilisez les informations de fichier et de position de instance source lors de l'étape précédente pour exécuter la requête suivante.

      SELECT MASTER_POS_WAIT('file', position);

      Par exemple, si votre fichier se nomme mysql-bin-changelog.000031 et que sa position est 107, exécutez l'instruction suivante.

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);

      Si le réplica en lecture a dépassé la position spécifiée, la requête renvoie immédiatement un résultat. Sinon, la fonction attend. Lorsque la requête a renvoyé un résultat pour tous les réplicas en lecture, passez à l'étape suivante.

  5. Réinitialisez les paramètres GTID pour désactiver la réplication GTID :

    1. Assurez-vous que le groupe de paramètres associé à l'instance de base de données RDS MySQL et à chaque réplica en lecture contient les valeurs suivantes :

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

    2. Redémarrez l'instance de base de données RDS MySQL et chaque réplica en lecture.