Utilisation de la réplication basée sur des identifiants de transaction globaux (GTID) - 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)

Le contenu suivant explique comment utiliser les identifiants de transaction globaux (GTID) avec la réplication du journal binaire (binlog) entre les instances de base de données Amazon RDS for MySQL.

Si vous utilisez la réplication binlog et que vous n'êtes pas familiarisé avec la réplication basée sur GTID avec MySQL, consultez la section Réplication avec des identifiants de transaction globaux dans la documentation MySQL.

La réplication basée sur le GTID est prise en charge pour toutes les versions de RDS for MySQL 5.7, et RDS for MySQL version 8.0.26 et les versions ultérieures de MySQL 8.0. Toutes les instances de base de données MySQL dans une configuration de réplication doivent respecter cette exigence.

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 basée sur GTID pour répliquer des données avec des réplicas en lecture RDS for 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 for 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 le AWS Management Console, le gtid_mode paramètre apparaît sous la formegtid-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. Ces deux valeurs font que votre instance de base de données RDS utilise les GTID pour les transactions qui sont répliquées. ON exige que la base de données cible utilise également la réplication basée sur les GTID. ON_PERMISSIVE rend la réplication basée sur les GTID facultative sur la base de données cible.

  • S'il est défini, OFF_PERMISSIVE indique que vos instances de base de données RDS peuvent accepter la réplication entrante d'une base de données source. Elles peuvent le faire indépendamment du fait que la base de données source utilise ou non la réplication basée sur les GTID.

  • S'il est défini, OFF indique que votre instance de base de données RDS n'accepte que la réplication entrante des bases de données sources qui n'utilisent pas la réplication basée sur les GTID.

Pour plus d'informations sur les groupes de paramètres, consultez Utilisation des groupes de paramètres.

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 for 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 des groupes de paramètres.

  2. Si vous avez modifié 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 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 une version 8.0 de RDS for MySQL inférieure à la version 8.0.26, mettez à niveau l'instance de base de données ou le réplica en lecture vers la version 8.0.26 ou une version supérieure de MySQL 8.0. Toutes les versions de RDS for MySQL 5.7 prennent en charge la réplication basée sur le GTID.

    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 des groupes de paramètres.

    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 source.

      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 GTID pour une instance de base de données MySQL avec des réplicas en lecture

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

Pour désactiver la réplication GTID pour une instance de base de données MySQL avec des réplicas en lecture
  1. Sur chaque réplique lue, 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 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 des groupes de paramètres.

    2. Relancez l'instance de base de données 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 MySQL et à chaque réplica en lecture contient le paramètre gtid_mode défini sur OFF_PERMISSIVE.

    2. Relancez l'instance de base de données 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 sont appliquées, procédez comme suit :

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

      Votre sortie doit être similaire à la sortie suivante.

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

      Notez le fichier et la position dans votre sortie.

    2. Sur chaque réplique lue, utilisez le fichier et les informations de position de son instance source à l'étape précédente pour exécuter la requête suivante :

      Pour MySQL 8.0.26 et versions supérieures MySQL 8.0

      SELECT SOURCE_POS_WAIT('file', position);

      Pour les versions MySQL 5.7

      SELECT MASTER_POS_WAIT('file', position);

      Par exemple, si le nom du fichier est mysql-bin-changelog.000031 et sa position l'est107, exécutez l'instruction suivante :

      Pour MySQL 8.0.26 et versions supérieures MySQL 8.0

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

      Pour les versions MySQL 5.7

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
  5. Réinitialisez les paramètres GTID pour désactiver la réplication basée sur le GTID.

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

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

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