Réplication - 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

Les procédures stockées suivantes contrôlent la façon dont les transactions sont répliquées à partir d'une base de données externe dans RDS pour MySQL, ou à partir de RDS pour MySQL vers une base de données externe. Pour apprendre à utiliser la réplication basée sur des identifiants de transaction globaux avec RDS pour MySQL, consultez Utilisation de la réplication basée sur GTID pour Amazon RDS for MySQL.

mysql.rds_next_master_log

Modifie la position du journal de l'instance de base de données source au début du journal binaire suivant sur l'instance de base de données source. N'utilisez cette procédure que si vous recevez une erreur 1236 d'I/O de réplication sur un réplica en lecture.

Syntaxe

CALL mysql.rds_next_master_log( curr_master_log );

Paramètres

curr_master_log

Index du fichier journal maître actif. Par exemple, si le fichier en cours se nomme mysql-bin-changelog.012345, l'index est 12345. Pour déterminer le nom du fichier journal maître actif, exécutez la commande SHOW REPLICA STATUS et affichez le champ Master_Log_File.

Note

Les versions précédentes de MySQL utilisaient SHOW SLAVE STATUS à la place de SHOW REPLICA STATUS. Si vous utilisez une version MySQL antérieure à la version 8.0.23, utilisez alors SHOW SLAVE STATUS.

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_next_master_log.

Avertissement

Appelez mysql.rds_next_master_log uniquement si la réplication échoue après le basculement d'une instance de base de données multi-AZ qui est la source de la réplication, et que le champ Last_IO_Errno de SHOW REPLICA STATUS signale une erreur d'I/O 1236.

L'appel de mysql.rds_next_master_log peut se traduire par une perte de données dans le réplica en lecture si les transactions de l'instance source n'ont pas été écrites dans le journal binaire sur disque avant que l'événement de basculement se produise.

Vous pouvez réduire la probabilité que cela se produise en définissant les paramètres d'instance source sync_binlog et innodb_support_xa sur 1, même si cela peut réduire les performances. Pour plus d’informations, consultez Résolution d'un problème de réplica en lecture MySQL.

Exemples

Supposons que la réplication échoue sur un réplica en lecture RDS pour MySQL. L'exécution de SHOW REPLICA STATUS\G sur le réplica en lecture renvoie le résultat suivant :

*************************** 1. row *************************** Replica_IO_State: Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com Source_User: MasterUser Source_Port: 3306 Connect_Retry: 10 Source_Log_File: mysql-bin-changelog.012345 Read_Source_Log_Pos: 1219393 Relay_Log_File: relaylog.012340 Relay_Log_Pos: 30223388 Relay_Source_Log_File: mysql-bin-changelog.012345 Replica_IO_Running: No Replica_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Source_Log_Pos: 30223232 Relay_Log_Space: 5248928866 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Source_SSL_Allowed: No Source_SSL_CA_File: Source_SSL_CA_Path: Source_SSL_Cert: Source_SSL_Cipher: Source_SSL_Key: Seconds_Behind_Master: NULL Source_SSL_Verify_Server_Cert: No Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.' Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Source_Server_Id: 67285976

Le champ Last_IO_Errno montre que l'instance reçoit une erreur 1236 d'I/O. Le champ Master_Log_File montre que le nom du fichier est mysql-bin-changelog.012345, ce qui signifie que l'index du fichier journal est 12345. Pour résoudre l'erreur, vous pouvez appeler mysql.rds_next_master_log avec le paramètre suivant :

CALL mysql.rds_next_master_log(12345);
Note

Les versions précédentes de MySQL utilisaient SHOW SLAVE STATUS à la place de SHOW REPLICA STATUS. Si vous utilisez une version de MySQL antérieure à la version 8.0.23, utilisez alors SHOW SLAVE STATUS.

mysql.rds_reset_external_master

Reconfigure une instance de base de données RDS pour MySQL comme n'étant plus un réplica en lecture d'une instance de MySQL s'exécutant à l'extérieur d'Amazon RDS.

Important

Pour exécuter cette procédure, autocommit doit être activé. Pour l'activer, définissez le paramètre autocommit sur 1. Pour de plus amples informations sur la modification des paramètres d'instance, veuillez consulter Modification de paramètres dans un groupe de paramètres de bases de données.

Syntaxe

CALL mysql.rds_reset_external_master;

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_reset_external_master. Cette procédure doit être exécutée sur l'instance de base de données MySQL à supprimer comme réplica en lecture d'une instance MySQL s'exécutant en dehors d'Amazon RDS.

Note

Nous vous conseillons d'utiliser des réplicas en lecture pour gérer la réplication entre deux instances de base de données Amazon RDS dès que possible. Dans ce cas, nous vous conseillons d'utiliser seulement cette procédure et d'autres procédures stockées liées à la réplication. Ces pratiques permettent d'obtenir des topologies de réplication plus complexes entre des instances de base de données Amazon RDS. Nous proposons ces procédures stockées avant tout pour permettre la réplication avec les instances MySQL s'exécutant en dehors d'Amazon RDS. Pour plus d'informations sur la gestion de la réplication entre les instances de base de données Amazon RDS, consultez Utilisation des réplicas en lecture d'instance de base de données.

Pour plus d'informations sur l'utilisation de la réplication pour importer des données à partir d'une instance de MySQL s'exécutant à l'extérieur de Amazon RDS, consultez Configuration d'une réplication de position de fichier journal binaire avec une instance source externe.

mysql.rds_set_external_master

Configure une instance de base de données RDS pour MySQL comme réplica en lecture d'une instance de MySQL s'exécutant à l'extérieur d'Amazon RDS.

Important

Pour exécuter cette procédure, autocommit doit être activé. Pour l'activer, définissez le paramètre autocommit sur 1. Pour de plus amples informations sur la modification des paramètres d'instance, veuillez consulter Modification de paramètres dans un groupe de paramètres de bases de données.

Note

Vous pouvez utiliser la procédure stockée mysql.rds_set_external_master_with_delay pour configurer une instance de base de données source externe et une réplication différée.

Syntaxe

CALL mysql.rds_set_external_master ( host_name , host_port , replication_user_name , replication_user_password , mysql_binary_log_file_name , mysql_binary_log_file_location , ssl_encryption );

Paramètres

host_name

Nom d'hôte ou adresse IP de l'instance MySQL s'exécutant à l'extérieur d'Amazon RDS pour devenir l'instance de base de données source.

host_port

Port utilisé par l'instance MySQL s'exécutant à l'extérieur d'Amazon RDS et à configurer comme instance de base de données source. Si votre configuration réseau inclut une réplication de port Secure Shell (SSH) qui convertit le numéro de port, spécifiez le numéro de port qui est exposé par SSH.

replication_user_name

ID d'un utilisateur disposant des autorisations REPLICATION CLIENT et REPLICATION SLAVE sur l'instance MySQL s'exécutant à l'extérieur d'Amazon RDS. Nous vous recommandons de fournir un compte qui soit utilisé uniquement pour la réplication avec l'instance externe.

replication_user_password

Mot de passe de l'ID utilisateur spécifié dans replication_user_name.

mysql_binary_log_file_name

Nom du journal binaire sur l'instance de base de données source qui contient les informations de réplication.

mysql_binary_log_file_location

Emplacement dans le journal binaire mysql_binary_log_file_name à partir duquel la réplication commence à lire les informations de réplication.

Vous pouvez déterminer le nom et l'emplacement du fichier journal binaire en exécutant SHOW MASTER STATUS sur l'instance de base de données source.

ssl_encryption

Valeur indiquant si le chiffrement Secure Socket Layer (SSL) est utilisé sur la connexion de réplication. La valeur 1 spécifie d'utiliser le chiffrement SSL, et la valeur 0 de ne pas l'utiliser. La valeur par défaut est 0.

Note

L'option MASTER_SSL_VERIFY_SERVER_CERT n'est pas prise en charge. Cette option est définie sur 0, ce qui signifie que la connexion est chiffrée, mais que les certificats ne sont pas vérifiés.

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_set_external_master. Cette procédure doit être exécutée sur l'instance de base de données MySQL qui doit être configurée comme réplica en lecture d'une instance MySQL s'exécutant en dehors d'Amazon RDS.

Avant d'exécuter mysql.rds_set_external_master, vous devez configurer l'instance de MySQL s'exécutant en dehors de Amazon RDS comme instance de base de données source. Pour vous connecter à l'instance MySQL en cours d'exécution en dehors de Amazon RDS, vous devez spécifier des valeurs replication_user_name et replication_user_password qui indiquent un utilisateur de réplication possédant des autorisations REPLICATION CLIENT et REPLICATION SLAVE sur l'instance externe de MySQL.

Pour configurer une instance externe de MySQL en tant qu'instance de base de données source
  1. A l'aide du client MySQL de votre choix, connectez-vous à l'instance externe de MySQL et créez un compte d'utilisateur à utiliser pour la réplication. Voici un exemple.

    MySQL 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';
    Note

    Spécifiez un mot de passe autre que celui indiqué ici, en tant que bonne pratique de sécurité.

  2. Sur l'instance externe de MySQL, accordez les privilèges REPLICATION CLIENT et REPLICATION SLAVE à votre utilisateur de réplication. L'exemple suivant accorde les privilèges REPLICATION CLIENT et REPLICATION SLAVE sur toutes les bases de données pour l'utilisateur « repl_user » de votre domaine.

    MySQL 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';

Pour utiliser la réplication chiffrée, configurez l'instance de base de données source de façon à utiliser les connexions SSL.

Note

Nous vous conseillons d'utiliser des réplicas en lecture pour gérer la réplication entre deux instances de base de données Amazon RDS dès que possible. Dans ce cas, nous vous conseillons d'utiliser seulement cette procédure et d'autres procédures stockées liées à la réplication. Ces pratiques permettent d'obtenir des topologies de réplication plus complexes entre des instances de base de données Amazon RDS. Nous proposons ces procédures stockées avant tout pour permettre la réplication avec les instances MySQL s'exécutant en dehors d'Amazon RDS. Pour plus d'informations sur la gestion de la réplication entre les instances de base de données Amazon RDS, consultez Utilisation des réplicas en lecture d'instance de base de données.

Après avoir appelé mysql.rds_set_external_master pour configurer une instance de base de données Amazon RDS comme réplica en lecture, vous pouvez appeler mysql.rds_start_replication sur le réplica en lecture pour démarrer le processus de réplication. Vous pouvez appeler mysql.rds_reset_external_master pour supprimer la configuration du réplica en lecture.

Quand la procédure mysql.rds_set_external_master est appelée, Amazon RDS enregistre l'heure, l'utilisateur et une action de set master dans les tables mysql.rds_history et mysql.rds_replication_status.

Exemples

Lors d'une exécution sur une instance de base de données MySQL, l'exemple suivant configure l'instance de base de données comme réplica en lecture d'une instance de MySQL s'exécutant à l'extérieur d'Amazon RDS.

call mysql.rds_set_external_master( 'Externaldb.some.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.0777', 120, 0);

mysql.rds_set_external_master_with_auto_position

Configure une instance de bases de données RDS for MySQL comme réplica en lecture d'une instance de MySQL s'exécutant à l'extérieur de Amazon RDS. Cette procédure configure également la réplication retardée et la réplication basée sur des identifiants de transaction globaux.

Important

Pour exécuter cette procédure, autocommit doit être activé. Pour l'activer, définissez le paramètre autocommit sur 1. Pour de plus amples informations sur la modification des paramètres d'instance, veuillez consulter Modification de paramètres dans un groupe de paramètres de bases de données.

Syntaxe

CALL mysql.rds_set_external_master_with_auto_position ( host_name , host_port , replication_user_name , replication_user_password , ssl_encryption , delay );

Paramètres

host_name

Nom d'hôte ou adresse IP de l'instance MySQL s'exécutant à l'extérieur d'Amazon RDS pour devenir l'instance de base de données source.

host_port

Port utilisé par l'instance MySQL s'exécutant à l'extérieur d'Amazon RDS et à configurer comme instance de base de données source. Si votre configuration réseau inclut une réplication de port Secure Shell (SSH) qui convertit le numéro de port, spécifiez le numéro de port qui est exposé par SSH.

replication_user_name

ID d'un utilisateur disposant des autorisations REPLICATION CLIENT et REPLICATION SLAVE sur l'instance MySQL s'exécutant à l'extérieur d'Amazon RDS. Nous vous recommandons de fournir un compte qui soit utilisé uniquement pour la réplication avec l'instance externe.

replication_user_password

Mot de passe de l'ID utilisateur spécifié dans replication_user_name.

ssl_encryption

Valeur indiquant si le chiffrement Secure Socket Layer (SSL) est utilisé sur la connexion de réplication. La valeur 1 spécifie d'utiliser le chiffrement SSL, et la valeur 0 de ne pas l'utiliser. La valeur par défaut est 0.

Note

L'option MASTER_SSL_VERIFY_SERVER_CERT n'est pas prise en charge. Cette option est définie sur 0, ce qui signifie que la connexion est chiffrée, mais que les certificats ne sont pas vérifiés.

delay

Nombre minimum de secondes pour retarder la réplication à partir de l'instance de base de données source.

La limite de ce paramètre est une journée (soit 86 400 secondes).

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_set_external_master_with_auto_position. Cette procédure doit être exécutée sur l'instance de base de données MySQL qui doit être configurée comme réplica en lecture d'une instance MySQL s'exécutant en dehors d'Amazon RDS.

Cette procédure est prise en charge pour toutes les versions de RDS for MySQL 5.7, et RDS for MySQL 8.0.26 et les versions 8.0 ultérieures.

Avant d'exécuter mysql.rds_set_external_master_with_auto_position, vous devez configurer l'instance de MySQL s'exécutant en dehors de Amazon RDS comme instance de base de données source. Pour vous connecter à l'instance MySQL s'exécutant en dehors d'Amazon RDS, vous devez spécifier des valeurs pour replication_user_name et replication_user_password. Ces valeurs doivent indiquer un utilisateur de réplication disposant des autorisations REPLICATION CLIENT et REPLICATION SLAVE sur l'instance externe de MySQL.

Pour configurer une instance externe de MySQL en tant qu'instance de base de données source
  1. A l'aide du client MySQL de votre choix, connectez-vous à l'instance externe de MySQL et créez un compte d'utilisateur à utiliser pour la réplication. Voici un exemple de.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. Sur l'instance externe de MySQL, accordez les privilèges REPLICATION CLIENT et REPLICATION SLAVE à votre utilisateur de réplication. L'exemple suivant accorde les privilèges REPLICATION CLIENT et REPLICATION SLAVE sur toutes les bases de données pour l'utilisateur 'repl_user' de votre domaine.

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

Pour plus d'informations, consultez Configuration d'une réplication de position de fichier journal binaire avec une instance source externe.

Note

Nous vous conseillons d'utiliser des réplicas en lecture pour gérer la réplication entre deux instances de base de données Amazon RDS dès que possible. Dans ce cas, nous vous conseillons d'utiliser seulement cette procédure et d'autres procédures stockées liées à la réplication. Ces pratiques permettent d'obtenir des topologies de réplication plus complexes entre des instances de base de données Amazon RDS. Nous proposons ces procédures stockées avant tout pour permettre la réplication avec les instances MySQL s'exécutant en dehors d'Amazon RDS. Pour plus d'informations sur la gestion de la réplication entre les instances de base de données Amazon RDS, consultez Utilisation des réplicas en lecture d'instance de base de données.

Après avoir appelé mysql.rds_set_external_master_with_auto_position pour configurer une instance de base de données Amazon RDS comme réplica en lecture, vous pouvez appeler mysql.rds_start_replication sur le réplica en lecture pour démarrer le processus de réplication. Vous pouvez appeler mysql.rds_reset_external_master pour supprimer la configuration du réplica en lecture.

Lorsque vous appelez mysql.rds_set_external_master_with_auto_position, Amazon RDS enregistre l'heure, l'utilisateur et une action de set master dans les tables mysql.rds_history et mysql.rds_replication_status.

Pour la reprise après sinistre, vous pouvez utiliser cette procédure avec la procédure stockée mysql.rds_start_replication_until ou mysql.rds_start_replication_until_gtid. Pour restaurer par progression les modifications dans un réplica en lecture retardé au moment précédant un sinistre, vous pouvez exécuter la procédure mysql.rds_set_external_master_with_auto_position. Une fois que la procédure mysql.rds_start_replication_until_gtid a arrêté la réplication, vous pouvez promouvoir le réplica en lecture pour qu'il devienne la nouvelle instance de base de données principale, en utilisant les instructions figurant dans Promotion d'un réplica en lecture en instance de bases de données autonome.

Pour utiliser la procédure mysql.rds_rds_start_replication_until_gtid, la réplication basée sur des identifiants de transaction globaux (GTID) doit être activée. Pour ignorer une transaction basée sur des identifiants de transaction globaux spécifique qui est réputée pour entraîner des défaillances, vous pouvez utiliser la procédure stockée mysql.rds_skip_transaction_with_gtid. Pour plus d'informations sur la gestion d'une réplication basée sur des identifiants de transaction globaux, consultez Utilisation de la réplication basée sur GTID pour Amazon RDS for MySQL.

Exemples

Lors d'une exécution sur une instance de base de données MySQL, l'exemple suivant configure l'instance de base de données comme réplica en lecture d'une instance de MySQL s'exécutant à l'extérieur d'Amazon RDS. Il définit le délai de réplication minimal à une heure (soit 3 600 secondes) sur l'instance de base de données MySQL. Une modification provenant de l'instance de base de données source MySQL exécutée à l'extérieur d'Amazon RDS n'est pas appliquée dans le réplica en lecture de l'instance de base de données MySQL pendant au moins une heure.

call mysql.rds_set_external_master_with_auto_position( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 0, 3600);

mysql.rds_set_external_master_with_delay

Configure une instance de bases de données RDS for MySQL comme réplica en lecture d'une instance de MySQL s'exécutant à l'extérieur de Amazon RDS et configure une réplication retardée.

Important

Pour exécuter cette procédure, autocommit doit être activé. Pour l'activer, définissez le paramètre autocommit sur 1. Pour de plus amples informations sur la modification des paramètres d'instance, veuillez consulter Modification de paramètres dans un groupe de paramètres de bases de données.

Syntaxe

CALL mysql.rds_set_external_master_with_delay ( host_name , host_port , replication_user_name , replication_user_password , mysql_binary_log_file_name , mysql_binary_log_file_location , ssl_encryption , delay );

Paramètres

host_name

Nom d'hôte ou adresse IP de l'instance MySQL s'exécutant à l'extérieur d'Amazon RDS et qui deviendra l'instance de base de données source.

host_port

Port utilisé par l'instance MySQL s'exécutant à l'extérieur d'Amazon RDS et à configurer comme instance de base de données source. Si votre configuration réseau inclut une réplication de port SSH qui convertit le numéro de port, spécifiez le numéro de port qui est exposé par SSH.

replication_user_name

ID d'un utilisateur disposant des autorisations REPLICATION CLIENT et REPLICATION SLAVE sur l'instance MySQL s'exécutant à l'extérieur d'Amazon RDS. Nous vous recommandons de fournir un compte qui soit utilisé uniquement pour la réplication avec l'instance externe.

replication_user_password

Mot de passe de l'ID utilisateur spécifié dans replication_user_name.

mysql_binary_log_file_name

Le nom du journal binaire sur l'instance de base de données source contient les informations de réplication.

mysql_binary_log_file_location

Emplacement dans le journal binaire mysql_binary_log_file_name à partir duquel la réplication commence à lire les informations de réplication.

Vous pouvez déterminer le nom et l'emplacement du fichier journal binaire en exécutant SHOW MASTER STATUS sur l'instance de base de données source.

ssl_encryption

Valeur indiquant si le chiffrement Secure Socket Layer (SSL) est utilisé sur la connexion de réplication. La valeur 1 spécifie d'utiliser le chiffrement SSL, et la valeur 0 de ne pas l'utiliser. La valeur par défaut est 0.

Note

L'option MASTER_SSL_VERIFY_SERVER_CERT n'est pas prise en charge. Cette option est définie sur 0, ce qui signifie que la connexion est chiffrée, mais que les certificats ne sont pas vérifiés.

delay

Nombre minimum de secondes pour retarder la réplication à partir de l'instance de base de données source.

La limite de ce paramètre est une journée (soit 86 400 secondes).

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_set_external_master_with_delay. Cette procédure doit être exécutée sur l'instance de base de données MySQL qui doit être configurée comme réplica en lecture d'une instance MySQL s'exécutant en dehors d'Amazon RDS.

Avant d'exécuter mysql.rds_set_external_master_with_delay, vous devez configurer l'instance de MySQL s'exécutant en dehors de Amazon RDS comme instance de base de données source. Pour vous connecter à l'instance MySQL s'exécutant en dehors d'Amazon RDS, vous devez spécifier des valeurs pour replication_user_name et replication_user_password. Ces valeurs doivent indiquer un utilisateur de réplication disposant des autorisations REPLICATION CLIENT et REPLICATION SLAVE sur l'instance externe de MySQL.

Pour configurer une instance externe de MySQL en tant qu'instance de base de données source
  1. A l'aide du client MySQL de votre choix, connectez-vous à l'instance externe de MySQL et créez un compte d'utilisateur à utiliser pour la réplication. Voici un exemple de.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. Sur l'instance externe de MySQL, accordez les privilèges REPLICATION CLIENT et REPLICATION SLAVE à votre utilisateur de réplication. L'exemple suivant accorde les privilèges REPLICATION CLIENT et REPLICATION SLAVE sur toutes les bases de données pour l'utilisateur 'repl_user' de votre domaine.

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

Pour plus d'informations, consultez Configuration d'une réplication de position de fichier journal binaire avec une instance source externe.

Note

Nous vous conseillons d'utiliser des réplicas en lecture pour gérer la réplication entre deux instances de base de données Amazon RDS dès que possible. Dans ce cas, nous vous conseillons d'utiliser seulement cette procédure et d'autres procédures stockées liées à la réplication. Ces pratiques permettent d'obtenir des topologies de réplication plus complexes entre des instances de base de données Amazon RDS. Nous proposons ces procédures stockées avant tout pour permettre la réplication avec les instances MySQL s'exécutant en dehors d'Amazon RDS. Pour plus d'informations sur la gestion de la réplication entre les instances de base de données Amazon RDS, consultez Utilisation des réplicas en lecture d'instance de base de données.

Après avoir appelé mysql.rds_set_external_master_with_delay pour configurer une instance de base de données Amazon RDS comme réplica en lecture, vous pouvez appeler mysql.rds_start_replication sur le réplica en lecture pour démarrer le processus de réplication. Vous pouvez appeler mysql.rds_reset_external_master pour supprimer la configuration du réplica en lecture.

Lorsque vous appelez mysql.rds_set_external_master_with_delay, Amazon RDS enregistre l'heure, l'utilisateur et une action de set master dans les tables mysql.rds_history et mysql.rds_replication_status.

Pour la reprise après sinistre, vous pouvez utiliser cette procédure avec la procédure stockée mysql.rds_start_replication_until ou mysql.rds_start_replication_until_gtid. Pour restaurer par progression les modifications dans un réplica en lecture retardé au moment précédant un sinistre, vous pouvez exécuter la procédure mysql.rds_set_external_master_with_delay. Une fois que la procédure mysql.rds_start_replication_until a arrêté la réplication, vous pouvez promouvoir le réplica en lecture pour qu'il devienne la nouvelle instance de base de données principale, en utilisant les instructions figurant dans Promotion d'un réplica en lecture en instance de bases de données autonome.

Pour utiliser la procédure mysql.rds_rds_start_replication_until_gtid, la réplication basée sur des identifiants de transaction globaux (GTID) doit être activée. Pour ignorer une transaction basée sur des identifiants de transaction globaux spécifique qui est réputée pour entraîner des défaillances, vous pouvez utiliser la procédure stockée mysql.rds_skip_transaction_with_gtid. Pour plus d'informations sur la gestion d'une réplication basée sur des identifiants de transaction globaux, consultez Utilisation de la réplication basée sur GTID pour Amazon RDS for MySQL.

La procédure mysql.rds_set_external_master_with_delay est disponible dans les versions de RDS for MySQL suivantes :

  • MySQL 8.0.26 et versions 8.0 ultérieures

  • Toutes les versions 5.7

Exemples

Lors d'une exécution sur une instance de base de données MySQL, l'exemple suivant configure l'instance de base de données comme réplica en lecture d'une instance de MySQL s'exécutant à l'extérieur d'Amazon RDS. Il définit le délai de réplication minimal à une heure (soit 3 600 secondes) sur l'instance de base de données MySQL. Une modification provenant de l'instance de base de données source MySQL exécutée à l'extérieur d'Amazon RDS n'est pas appliquée dans le réplica en lecture de l'instance de base de données MySQL pendant au moins une heure.

call mysql.rds_set_external_master_with_delay( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 'mysql-bin-changelog.000777', 120, 0, 3600);

mysql.rds_set_master_auto_position

Définit le mode de réplication mode de manière à ce qu'il soit basé sur des positions de fichier journal binaire ou sur des identifiants de transaction globaux (GTID).

Syntaxe

CALL mysql.rds_set_master_auto_position ( auto_position_mode );

Paramètres

auto_position_mode

Valeur qui indique si la réplication à utiliser est la réplication basée sur la position de fichier ou la réplication basée sur les identifiants de transaction globaux :

  • 0 – Utiliser la méthode de réplication basée sur la position du fichier journal binaire. La valeur par défaut est 0.

  • 1 – Utiliser la méthode de réplication basée sur les identifiants de transaction globaux.

Notes d’utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_set_master_auto_position.

Cette procédure est prise en charge pour toutes les versions de RDS for MySQL 5.7, et RDS for MySQL 8.0.26 et les versions 8.0 ultérieures.

mysql.rds_set_source_delay

Définit le nombre minimum de secondes pour retarder la réplication de l'instance de base de données source vers le réplica en lecture actuel. Utilisez cette procédure lorsque vous êtes connecté à un réplica en lecture afin de retarder la réplication à partir de l'instance de base de données source.

Syntaxe

CALL mysql.rds_set_source_delay( delay );

Paramètres

delay

Nombre minimum de secondes pour retarder la réplication à partir de l'instance de base de données source.

La limite de ce paramètre est une journée (soit 86 400 secondes).

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_set_source_delay.

Pour la reprise après sinistre, vous pouvez utiliser cette procédure avec la procédure stockée mysql.rds_start_replication_until ou mysql.rds_start_replication_until_gtid. Pour restaurer par progression les modifications dans un réplica en lecture retardé au moment précédant un sinistre, vous pouvez exécuter la procédure mysql.rds_set_source_delay. Une fois que la procédure mysql.rds_start_replication_until ou mysql.rds_start_replication_until_gtid a arrêté la réplication, vous pouvez promouvoir le réplica en lecture pour qu'il devienne la nouvelle instance de base de données principale, en utilisant les instructions figurant dans Promotion d'un réplica en lecture en instance de bases de données autonome.

Pour utiliser la procédure mysql.rds_rds_start_replication_until_gtid, la réplication basée sur des identifiants de transaction globaux (GTID) doit être activée. Pour ignorer une transaction basée sur des identifiants de transaction globaux spécifique qui est réputée pour entraîner des défaillances, vous pouvez utiliser la procédure stockée mysql.rds_skip_transaction_with_gtid. Pour plus d'informations sur la réplication basée sur des identifiants de transaction globaux, consultez Utilisation de la réplication basée sur GTID pour Amazon RDS for MySQL.

La procédure mysql.rds_set_source_delay est disponible dans les versions de RDS for MySQL suivantes :

  • MySQL 8.0.26 et versions 8.0 ultérieures

  • Toutes les versions 5.7

Exemples

Pour retarder la réplication à partir de l'instance de base de données source vers le réplica en lecture actuel pendant au moins un heure (3 600 secondes), vous pouvez appeler mysql.rds_set_source_delay avec le paramètre suivant :

CALL mysql.rds_set_source_delay(3600);

mysql.rds_skip_transaction_with_gtid

Ignore la réplication d'une transaction avec l'identifiant de transaction global (GTID) spécifié sur une instance de base de données MySQL.

Vous pouvez utiliser cette procédure pour la reprise après sinistre lorsqu'il est avéré qu'une transaction GTID entraîne des problèmes. Utilisez cette procédure stockée pour ignorer la transaction problématique. Les transactions problématiques sont par exemple celles qui désactivent la réplication, suppriment des données importantes ou entraînent l'indisponibilité de l'instance de base de données.

Syntaxe

CALL mysql.rds_skip_transaction_with_gtid ( gtid_to_skip );

Paramètres

gtid_to_skip

GTID de la transaction de réplication à ignorer.

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_skip_transaction_with_gtid.

Cette procédure est prise en charge pour toutes les versions de RDS for MySQL 5.7, et RDS for MySQL 8.0.26 et les versions 8.0 ultérieures.

Exemples

L'exemple suivant ignore la réplication de la transaction avec le GTID 3E11FA47-71CA-11E1-9E33-C80AA9429562:23.

CALL mysql.rds_skip_transaction_with_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');

mysql.rds_skip_repl_error

Ignore et supprime une erreur de réplication sur un réplica en lecture d'une base de données MySQL.

Syntaxe

CALL mysql.rds_skip_repl_error;

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_skip_repl_error sur un réplica en lecture. Pour plus d'informations sur cette procédure, consultez Appel de la procédure mysql.rds_skip_repl_error.

Pour déterminer s'il y a des erreurs, exécutez la commande MySQL SHOW REPLICA STATUS\G. Si une erreur de réplication n'est pas critique, vous pouvez exécuter mysql.rds_skip_repl_error pour ignorer l'erreur. S'il y a plusieurs erreurs, mysql.rds_skip_repl_error supprime la première erreur, puis avertit qu'il y a d'autres erreurs. Vous pouvez alors utiliser SHOW REPLICA STATUS\G pour déterminer l'action appropriée pour l'erreur suivante. Pour obtenir des informations sur les valeurs renvoyées, consultez Instruction SHOW REPLICA STATUS dans la documentation sur MySQL.

Note

Les versions précédentes de MySQL utilisaient SHOW SLAVE STATUS à la place de SHOW REPLICA STATUS. Si vous utilisez une version MySQL antérieure à la version 8.0.23, utilisez alors SHOW SLAVE STATUS.

Pour plus d'informations sur le traitement des erreurs de réplication avec Amazon RDS, consultez Résolution d'un problème de réplica en lecture MySQL.

Erreur d'arrêt de réplication

Lorsque vous appelez la procédure mysql.rds_skip_repl_error, un message d'erreur peut s'afficher pour indiquer que le réplica a rencontré une erreur ou est désactivé.

Ce message d'erreur s'affiche si vous exécutez la procédure sur l'instance principale plutôt que sur le réplica en lecture. Vous devez exécuter cette procédure sur le réplica en lecture pour que la procédure fonctionne.

Ce message d'erreur peut également s'afficher si vous exécutez la procédure sur le réplica en lecture, mais que la réplication ne peut pas être redémarrée correctement.

Si vous avez besoin d'ignorer un grand nombre d'erreurs, le retard de réplication peut augmenter et dépasser la période de rétention par défaut pour les fichiers journaux binaires (binlog). Dans ce cas, vous pouvez rencontrer une erreur irrécupérable due à des fichiers journaux binaires purgés avant d'avoir été réutilisés sur le réplica en lecture. Cette purge entraîne l'arrêt de la réplication et vous ne pouvez plus appeler la commande mysql.rds_skip_repl_error pour ignorer les erreurs de réplication.

Vous pouvez atténuer ce problème en augmentant le nombre d'heures pendant lequel les fichiers journaux binaires sont conservés sur votre instance de base de données source. Une fois que vous avez augmenté le temps de rétention de journaux binaires, vous pouvez redémarrer la réplication et appeler la commande mysql.rds_skip_repl_error en fonction des besoins.

Pour définir la période de rétention des journaux binaires, utilisez la procédure mysql.rds_set_configuration et spécifiez un paramètre de configuration 'binlog retention hours', ainsi que le nombre d'heures pendant lequel conserver les fichiers journaux binaires sur le cluster de bases de données. L'exemple suivant définit la période de rétention des fichiers journaux binaires à 48 heures.

CALL mysql.rds_set_configuration('binlog retention hours', 48);

mysql.rds_start_replication

Lance la réplication à partir d'une instance de base de données RDS pour MySQL.

Note

Vous pouvez utiliser la procédure stockée mysql.rds_start_replication_until ou mysql.rds_start_replication_until_gtid pour lancer la réplication à partir d'une instance de base de données RDS pour MySQL et arrêter la réplication à la position spécifiée dans le fichier journal binaire.

Syntaxe

CALL mysql.rds_start_replication;

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_start_replication.

Pour importer des données à partir d'une instance de MySQL externe à Amazon RDS, appelez mysql.rds_start_replication sur le réplica en lecture pour démarrer le processus de réplication après avoir appelé mysql.rds_set_external_master pour créer la configuration de réplication. Pour plus d’informations, consultez Restauration d'une sauvegarde dans une instance de base de données MySQL.

Pour exporter des données vers une instance de MySQL extérieure à Amazon RDS, appelez mysql.rds_start_replication et mysql.rds_stop_replication sur le réplica en lecture pour contrôler certaines actions de réplication, telles que la purge des journaux binaires. Pour plus d’informations, consultez Exportation de données à partir d'une instance DB MySQL grâce à la réplication.

Vous pouvez aussi appeler mysql.rds_start_replication sur le réplica en lecture pour redémarrer un processus de réplication que vous avez précédemment arrêté en appelant mysql.rds_stop_replication. Pour plus d’informations, consultez Utilisation des réplicas en lecture d'instance de base de données.

mysql.rds_start_replication_until

Lance la réplication à partir d'une instance de base de données RDS pour MySQL et arrête la réplication à la position spécifiée dans le fichier journal binaire.

Syntaxe

CALL mysql.rds_start_replication_until ( replication_log_file , replication_stop_point );

Paramètres

replication_log_file

Nom du journal binaire sur l'instance de base de données source qui contient les informations de réplication.

replication_stop_point

Position dans le journal binaire replication_log_file à laquelle la réplication s'arrêtera.

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_start_replication_until.

La procédure mysql.rds_start_replication_until est disponible dans les versions de RDS for MySQL suivantes :

  • MySQL 8.0.26 et versions 8.0 ultérieures

  • Toutes les versions 5.7

Vous pouvez utiliser cette procédure avec la réplication retardée pour la reprise après sinistre. Si vous avez configuré la réplication retardée, vous pouvez utiliser cette procédure pour restaurer par progression les modifications dans un réplica en lecture retardé au moment précédant un sinistre. Une fois que cette procédure a arrêté la réplication, vous pouvez promouvoir le réplica en lecture pour qu'il devienne la nouvelle instance de base de données principale, en utilisant les instructions figurant dans Promotion d'un réplica en lecture en instance de bases de données autonome.

Vous pouvez configurer la réplication retardée en utilisant les procédures stockées suivantes :

Le nom de fichier spécifié pour le paramètre replication_log_file doit correspondre au nom du fichier binlog de l'instance de base de données source.

Lorsque le paramètre replication_stop_point spécifie une position d'arrêt survenant dans le passé, la réplication est arrêtée immédiatement.

Exemples

L'exemple suivant lance la réplication et réplique les modifications jusqu'à ce qu'il atteigne la position 120 dans le fichier journal binaire mysql-bin-changelog.000777.

call mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);

mysql.rds_start_replication_until_gtid

Lance la réplication à partir d'une instance de base de données RDS pour MySQL et arrête la réplication immédiatement après l'identifiant de transaction global (GTID) spécifié.

Syntaxe

CALL mysql.rds_start_replication_until_gtid(gtid);

Paramètres

gtid

Identifiant de transaction global (GTID) après lequel la réplication s'arrête.

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_start_replication_until_gtid.

Cette procédure est prise en charge pour toutes les versions de RDS for MySQL 5.7, et RDS for MySQL 8.0.26 et les versions 8.0 ultérieures.

Vous pouvez utiliser cette procédure avec la réplication retardée pour la reprise après sinistre. Si vous avez configuré la réplication retardée, vous pouvez utiliser cette procédure pour restaurer par progression les modifications dans un réplica en lecture retardé au moment précédant un sinistre. Une fois que cette procédure a arrêté la réplication, vous pouvez promouvoir le réplica en lecture pour qu'il devienne la nouvelle instance de base de données principale, en utilisant les instructions figurant dans Promotion d'un réplica en lecture en instance de bases de données autonome.

Vous pouvez configurer la réplication retardée en utilisant les procédures stockées suivantes :

Lorsque le paramètre gtid spécifie une transaction ayant déjà été exécutée par le réplica, la réplication est immédiatement arrêtée.

Exemples

L'exemple suivant lance la réplication et réplique les modifications jusqu'à ce que le GTID soit atteint 3E11FA47-71CA-11E1-9E33-C80AA9429562:23.

call mysql.rds_start_replication_until_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');

mysql.rds_stop_replication

Arrête la réplication à partir d'une instance de base de données MySQL.

Syntaxe

CALL mysql.rds_stop_replication;

Notes d'utilisation

L'utilisateur principal doit exécuter la procédure mysql.rds_stop_replication.

Si vous configurez la réplication pour importer des données à partir d'une instance de MySQL s'exécutant à l'extérieur d'Amazon RDS, vous appelez mysql.rds_stop_replication sur le réplica en lecture pour arrêter le processus de réplication après que l'importation soit terminée. Pour plus d’informations, consultez Restauration d'une sauvegarde dans une instance de base de données MySQL.

Si vous configurez la réplication pour exporter les données vers une instance de MySQL extérieure à Amazon RDS, vous appelez mysql.rds_start_replication et mysql.rds_stop_replication sur le réplica en lecture pour contrôler certaines actions de réplication, telles que la purge des journaux binaires. Pour plus d’informations, consultez Exportation de données à partir d'une instance DB MySQL grâce à la réplication.

Vous pouvez aussi utiliser mysql.rds_stop_replication pour arrêter la réplication entre deux instances de base de données Amazon RDS. Vous arrêtez généralement la réplication pour exécuter une longue opération sur le réplica en lecture, comme la création d'un index volumineux sur le réplica en lecture. Vous pouvez redémarrer tout processus de réplication que vous avez arrêté en appelant mysql.rds_start_replication sur le réplica en lecture. Pour plus d’informations, consultez Utilisation des réplicas en lecture d'instance de base de données.