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.
Rubriques
- mysql.rds_next_master_log
- mysql.rds_reset_external_master
- mysql.rds_set_external_master
- mysql.rds_set_external_master_with_auto_position
- mysql.rds_set_external_master_with_delay
- mysql.rds_set_master_auto_position
- mysql.rds_set_source_delay
- mysql.rds_skip_transaction_with_gtid
- mysql.rds_skip_repl_error
- mysql.rds_start_replication
- mysql.rds_start_replication_until
- mysql.rds_start_replication_until_gtid
- mysql.rds_stop_replication
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 commandeSHOW REPLICA STATUS
et affichez le champMaster_Log_File
.Note
Les versions précédentes de MySQL utilisaient
SHOW SLAVE STATUS
à la place deSHOW REPLICA STATUS
. Si vous utilisez une version MySQL antérieure à la version 8.0.23, utilisez alorsSHOW 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
etREPLICATION 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
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é.
-
Sur l'instance externe de MySQL, accordez les privilèges
REPLICATION CLIENT
etREPLICATION SLAVE
à votre utilisateur de réplication. L'exemple suivant accorde les privilègesREPLICATION CLIENT
etREPLICATION 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
etREPLICATION 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
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'
-
Sur l'instance externe de MySQL, accordez les privilèges
REPLICATION CLIENT
etREPLICATION SLAVE
à votre utilisateur de réplication. L'exemple suivant accorde les privilègesREPLICATION CLIENT
etREPLICATION 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
etREPLICATION 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
-
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'
-
Sur l'instance externe de MySQL, accordez les privilèges
REPLICATION CLIENT
etREPLICATION SLAVE
à votre utilisateur de réplication. L'exemple suivant accorde les privilègesREPLICATION CLIENT
etREPLICATION 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 est0
. -
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
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.