Réplication avec une instance MySQL ou MariaDB s'exécutant à l'extérieur d'Amazon RDS - 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.

Réplication avec une instance MySQL ou MariaDB s'exécutant à l'extérieur d'Amazon RDS

Vous pouvez configurer la réplication entre une instance de base de données Amazon RDS pour MySQL ou une instance MariaDB et une instance MySQL ou MariaDB externe à Amazon RDS.

Avant de commencer

Vous pouvez configurer la réplication en utilisant la position du fichier journal binaire des transactions répliquées. Sur Amazon RDS MySQL 5.7.23 et les versions MySQL 5.7 ultérieures, vous pouvez aussi configurer la réplication avec des identifiants de transaction globaux (GTID).

Les autorisations requises pour démarrer la réplication sur une instance de base de données Amazon RDS sont restreintes et ne sont pas disponibles pour votre utilisateur principal Amazon RDS. Pour cette raison, assurez-vous d'utiliser les commandes Amazon RDS mysql.rds_set_external_master et mysql.rds_start_replication pour configurer la réplication entre votre base de données active et votre base de données Amazon RDS.

Pour définir le format de journalisation binaire pour une base de données MySQL ou MariaDB, mettez à jour le paramètre binlog_format. Si votre instance de base de données utilise le groupe de paramètres d'instance de base de données par défaut, créez un nouveau groupe de paramètres de base de données pour modifier les paramètres binlog_format. Nous vous recommandons d'utiliser le paramètre par défaut pour binlog_format, à savoir MIXED. Cependant, vous pouvez également définir binlog_format sur ROW ou STATEMENT si vous avez besoin d'un format binlog spécifique. Redémarrez votre instance de base de données pour que les modifications prennent effet.

Pour plus d'informations sur la configuration du paramètre binlog_format, consultez la section Format de journalisation binaire. Pour de plus amples informations sur les implications des différents types de réplication MySQL, veuillez consulter la section Advantages and Disadvantages of Statement-Based and Row-Based Replication de la documentation MySQL.

Note

Utilisez la procédure de cette rubrique pour configurer la réplication dans tous les cas, à l'exception de celui où l'instance externe est MariaDB version 10.0.2 ou ultérieure et où l'instance Amazon RDS est MariaDB. Dans ce cas, utilisez la procédure Configuration d'une réplication GTID dans une instance de base de données MariaDB pour configurer la réplication basée sur l'identifiant de transaction global.

Configuration d'une réplication de position de fichier journal binaire avec une instance source externe

Suivez ces instructions lorsque vous configurez une instance source externe et un réplica sur Amazon RDS :

  • Surveillez les événements de basculement de l'instance de base de données Amazon RDS qui constitue votre réplica. En cas de basculement, l'instance de base de données qui est votre réplica peut alors être recréée sur un nouvel hôte avec une autre adresse réseau. Pour plus d'informations sur la surveillance des événements de basculement, consultez Utilisation de la notification d'événement Amazon RDS.

  • Tenez à jour les journaux binaires sur votre instance source, jusqu'à ce que vous ayez vérifié qu'ils ont été appliqués au réplica. Cette maintenance garantit que vous pouvez restaurer votre instance source en cas de défaillance.

  • Activez les sauvegardes automatiques sur votre instance de base de données Amazon RDS. L'activation des sauvegardes automatiques garantit que vous pouvez restaurer votre réplica sur un instant donné si vous devez resynchroniser votre instance source et votre réplica. Pour plus d'informations sur les sauvegardes et la restauration à un instant dans le passé, consultez Sauvegarde et restauration d'une instance de base de données Amazon RDS.

Pour configurer une réplication de position de fichier journal binaire avec une instance source externe

  1. Rendez l'instance MySQL ou MariaDB source accessible en lecture seule.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. Exécutez la commande SHOW MASTER STATUS sur l'instance source MySQL ou MariaDB pour déterminer l'emplacement du journal binaire.

    Vous obtenez une sortie similaire à ce qui suit.

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. Copiez la base de données de l'instance externe vers l'instance de bases de données Amazon RDS à l'aide de mysqldump. Pour les bases de données très volumineuses, il se peut que vous vouliez utiliser la procédure décrite dans Importation de données vers une instance de base de données MySQL ou MariaDB Amazon RDS avec un temps réduit.

    Pour Linux, macOS ou Unix :

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Pour Windows :

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    Note

    Veillez bien à ce qu'il n'y ait pas d'espace entre l'option -p et le mot de passe saisi.

    Pour spécifier le nom d'hôte, le nom d'utilisateur, le port et le mot de passe afin de vous connecter à votre instance de base de données Amazon RDS, utilisez les options --host, --user (-u), --port et -p dans la commande mysql. Le nom d'hôte est le nom DNS du point de terminaison de l'instance de base de données Amazon RDS : par exemple, myinstance.123456789012.us-east-1.rds.amazonaws.com. Vous pouvez trouver la valeur du point de terminaison dans les détails de l'instance dans AWS Management Console.

  4. Transformez l'instance de base de données source MySQL ou MariaDB en instance accessible de nouveau en écriture.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    Pour de plus amples informations sur les sauvegardes à utiliser avec la réplication, veuillez consulter la documentation MySQL.

  5. Dans AWS Management Console, ajoutez l'adresse IP du serveur qui héberge la base de données externe source au groupe de sécurité du VPC de l'instance de base de données Amazon RDS. Pour de plus amples informations sur la modification d'un groupe de sécurité de VPC, veuillez consulter Security Groups for Your VPC (Groupes de sécurité pour votre VPC) dans le Guide de l'utilisateur Amazon Virtual Private Cloud.

    L'adresse IP peut changer lorsque les conditions suivantes sont réunies :

    • Vous utilisez une adresse IP publique pour la communication entre l'instance source externe et l'instance de base de données.

    • L'instance source externe a été arrêtée et redémarrée.

    Si ces conditions sont réunies, vérifiez l'adresse IP avant de l'ajouter.

    Vous devrez peut-être également configurer votre réseau local pour autoriser les connexions à partir de l'adresse IP de votre instance de base de données Amazon RDS. Cela permet la communication entre votre réseau local et votre instance MySQL ou MariaDB externe. Pour obtenir l'adresse IP de l'instance de base de données Amazon RDS, utilisez la commande host.

    host db_instance_endpoint

    Le nom d'hôte est le nom DNS du point de terminaison de l'instance de base de données Amazon RDS.

  6. À l'aide du client de votre choix, connectez-vous à l'instance externe et créez un utilisateur à utiliser pour la réplication. Utilisez ce compte exclusivement pour la réplication et limitez-le à votre domaine pour améliorer la sécurité. Voici un exemple de.

    MySQL 5.5, 5.6 et 5.7

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED WITH mysql_native_password BY 'password';
  7. Pour l'instance externe, attribuez les privilèges REPLICATION CLIENT et REPLICATION SLAVE à votre utilisateur de réplication. Par exemple, pour accorder les privilèges REPLICATION CLIENT et REPLICATION SLAVE sur toutes les bases de données à l'utilisateur « repl_user » de votre domaine, émettez la commande suivante.

    MySQL 5.5, 5.6 et 5.7

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
  8. Transformez l'instance de base de données Amazon RDS en réplica. Pour cela, connectez-vous d'abord à l'instance de base de données Amazon RDS en tant qu'utilisateur principal. Identifiez ensuite la base de données MySQL ou MariaDB externe comme instance source à l'aide de la commande mysql.rds_set_external_master. Utilisez le nom et la position du fichier journal maître que vous avez déterminés à l'étape 2. Voici un exemple de.

    CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
    Note

    Dans Amazon RDS pour MySQL, vous pouvez décider d'utiliser la réplication retardée en exécutant la procédure stockée mysql.rds_set_external_master_with_delay à la place. Notre raison d'utiliser la réplication retardée est qu'elle permet la reprise après sinistre avec la procédure stockée mysql.rds_start_replication_until. Actuellement, la réplication retardée n'est pas prise en charge sur RDS pour MariaDB.

  9. Sur l'instance de base de données Amazon RDS, émettez la commande mysql.rds_start_replication pour démarrer la réplication :

    CALL mysql.rds_start_replication;

Configuration d'une réplication basée sur GTID avec une instance source externe

Lorsque vous configurez une instance source externe et un réplica sur Amazon RDS, surveillez les événements de basculement de l'instance de base de données Amazon RDS qui constitue votre réplica. En cas de basculement, l'instance de base de données qui est votre réplica peut alors être recréée sur un nouvel hôte avec une autre adresse réseau. Pour plus d'informations sur la surveillance des événements de basculement, consultez Utilisation de la notification d'événement Amazon RDS.

Important

La réplication basée sur des identifiants de transaction globaux (GTID) est prise en charge uniquement sur Amazon RDS pour MySQL 5.7.23 et les versions MySQL 5.7 ultérieures. La réplication basée sur des identifiants de transaction globaux (GTID) n'est pas prise en charge pour Amazon RDS pour MySQL 5.5, 5.6 ou 8.0.

Pour configurer une réplication basée sur des identifiants de transaction globaux (GTID) avec une instance source externe

  1. Préparez la réplication basée sur des identifiants de transaction globaux (GTID) :

    1. Assurez-vous que la réplication basée sur des identifiants de transaction globaux (GTID) est activée sur la base de données MySQL ou MariaDB externe. Pour ce faire, assurez-vous que les paramètres suivants de la base de données externe sont définis sur les valeurs spécifiées :

      gtid_modeON

      enforce_gtid_consistencyON

      Pour de plus amples informations, veuillez consulter Replication with Global Transaction Identifiers dans la documentation MySQL, ou la page Global Transaction ID dans la documentation MariaDB.

    2. 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, ON_PERMISSIVE ou OFF_PERMISSIVE

      • enforce_gtid_consistencyON

      Pour plus d'informations sur les groupes de paramètres, consultez Utilisation de groupes de paramètres de base de données.

    3. Si vous modifiez le groupe de paramètres de l'instance de base de données, redémarrez celle-ci. Pour plus d'informations, consultez Redémarrage d'une instance de base de données.

  2. Rendez l'instance MySQL ou MariaDB source accessible en lecture seule.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  3. Copiez la base de données de l'instance externe vers l'instance de bases de données Amazon RDS à l'aide de mysqldump. Pour les bases de données très volumineuses, il se peut que vous vouliez utiliser la procédure décrite dans Importation de données vers une instance de base de données MySQL ou MariaDB Amazon RDS avec un temps réduit.

    Pour Linux, macOS ou Unix :

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Pour Windows :

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    Note

    Veillez bien à ce qu'il n'y ait pas d'espace entre l'option -p et le mot de passe saisi.

    Pour spécifier le nom d'hôte, le nom d'utilisateur, le port et le mot de passe afin de vous connecter à votre instance de base de données Amazon RDS, utilisez les options --host, --user (-u), --port et -p dans la commande mysql. Le nom d'hôte est le nom DNS du point de terminaison de l'instance de base de données Amazon RDS : par exemple, myinstance.123456789012.us-east-1.rds.amazonaws.com. Vous pouvez trouver la valeur du point de terminaison dans les détails de l'instance dans AWS Management Console.

  4. Transformez l'instance de base de données source MySQL ou MariaDB en instance accessible de nouveau en écriture.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    Pour de plus amples informations sur les sauvegardes à utiliser avec la réplication, veuillez consulter la documentation MySQL.

  5. Dans AWS Management Console, ajoutez l'adresse IP du serveur qui héberge la base de données externe source au groupe de sécurité du VPC de l'instance de base de données Amazon RDS. Pour de plus amples informations sur la modification d'un groupe de sécurité de VPC, veuillez consulter Security Groups for Your VPC (Groupes de sécurité pour votre VPC) dans le Guide de l'utilisateur Amazon Virtual Private Cloud.

    L'adresse IP peut changer lorsque les conditions suivantes sont réunies :

    • Vous utilisez une adresse IP publique pour la communication entre l'instance source externe et l'instance de base de données.

    • L'instance source externe a été arrêtée et redémarrée.

    Si ces conditions sont réunies, vérifiez l'adresse IP avant de l'ajouter.

    Vous devrez peut-être également configurer votre réseau local pour autoriser les connexions à partir de l'adresse IP de votre instance de base de données Amazon RDS. Cela permet la communication entre votre réseau local et votre instance MySQL ou MariaDB externe. Pour obtenir l'adresse IP de l'instance de base de données Amazon RDS, utilisez la commande host.

    host db_instance_endpoint

    Le nom d'hôte est le nom DNS du point de terminaison de l'instance de base de données Amazon RDS.

  6. À l'aide du client de votre choix, connectez-vous à l'instance externe et créez un utilisateur à utiliser pour la réplication. Utilisez ce compte exclusivement pour la réplication et limitez-le à votre domaine pour améliorer la sécurité. Voici un exemple de.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  7. Pour l'instance externe, attribuez les privilèges REPLICATION CLIENT et REPLICATION SLAVE à votre utilisateur de réplication. Par exemple, pour accorder les privilèges REPLICATION CLIENT et REPLICATION SLAVE sur toutes les bases de données à l'utilisateur « repl_user » de votre domaine, émettez la commande suivante.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  8. Transformez l'instance de base de données Amazon RDS en réplica. Pour cela, connectez-vous d'abord à l'instance de base de données Amazon RDS en tant qu'utilisateur principal. Identifiez ensuite la base de données MySQL ou MariaDB externe comme instance principale de réplication à l'aide de la commande mysql.rds_set_external_master_with_auto_position. Voici un exemple.

    CALL mysql.rds_set_external_master_with_auto_position ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 0, 0);
    Note

    Dans Amazon RDS pour MySQL, vous pouvez décider d'utiliser la réplication retardée en exécutant la procédure stockée mysql.rds_set_external_master_with_delay à la place. Notre raison d'utiliser la réplication retardée est qu'elle permet la reprise après sinistre avec la procédure stockée mysql.rds_start_replication_until_gtid. Actuellement, la réplication retardée n'est pas prise en charge sur RDS pour MariaDB.

  9. Sur l'instance de base de données Amazon RDS, émettez la commande mysql.rds_start_replication pour démarrer la réplication.

    CALL mysql.rds_start_replication;