Configuration, démarrage et arrêt de la réplication des journaux binaires (binlog)
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.
Lorsque vous utilisez ces procédures stockées pour gérer la réplication avec un utilisateur de réplication configuré avec caching_sha2_password, vous devez configurer le protocole TLS en spécifiant SOURCE_SSL=1. caching_sha2_password est le plugin d’authentification par défaut pour RDS for MySQL 8.4. Pour plus d’informations, consultez Chiffrement avec SSL/TLS.
Pour en savoir plus sur la configuration, l’utilisation et la gestion de réplicas en lecture, consultez Utilisation de réplicas en lecture MySQL.
Rubriques
mysql.rds_next_master_log (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures)
mysql.rds_next_source_log (RDS for MySQL, versions majeures 8.4 et ultérieures)
mysql.rds_reset_external_source (RDS for MySQL, versions majeures 8.4 et ultérieures)
mysql.rds_set_external_source (RDS for MySQL, versions majeures 8.4 et ultérieures)
mysql.rds_set_external_source_with_delay (RDS for MySQL, versions majeures 8.4 et ultérieures)
mysql.rds_set_master_auto_position (RDS for MySQL, versions majeures 8.0 et antérieures)
mysql.rds_set_source_auto_position (RDS for MySQL, versions majeures 8.4 et ultérieures)
mysql.rds_next_master_log (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures)
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 STATUSet affichez le champMaster_Log_File.
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 compromettre 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);
mysql.rds_next_source_log (RDS for MySQL, versions majeures 8.4 et ultérieures)
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_source_log(curr_source_log);
Paramètres
-
curr_source_log -
Index du fichier journal source actuel. 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 actuel, exécutez la commandeSHOW REPLICA STATUSet affichez le champSource_Log_File.
Notes d’utilisation
L’utilisateur administratif doit exécuter la procédure mysql.rds_next_source_log.
Avertissement
Appelez mysql.rds_next_source_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_source_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 compromettre 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_Source: NULL Source_SSL_Verify_Server_Cert: No Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from source when reading data from binary log: 'Client requested source 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 Source_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_source_log avec le paramètre suivant :
CALL mysql.rds_next_source_log(12345);
mysql.rds_reset_external_master (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures)
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 plus d’informations sur la modification des paramètres d’instance, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.
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_reset_external_source (RDS for MySQL, versions majeures 8.4 et ultérieures)
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 plus d’informations sur la modification des paramètres d’instance, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.
Syntaxe
CALL mysql.rds_reset_external_source;
Notes d’utilisation
L’utilisateur administratif doit exécuter la procédure mysql.rds_reset_external_source. 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 (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures)
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 plus d’informations sur la modification des paramètres d’instance, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.
Note
Vous pouvez utiliser la procédure stockée mysql.rds_set_external_master_with_delay (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures) 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 CLIENTetREPLICATION SLAVEsur 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 STATUSsur 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_CERTn'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 CLIENTetREPLICATION SLAVEà votre utilisateur de réplication. L’exemple suivant accorde les privilègesREPLICATION CLIENTetREPLICATION SLAVEsur 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 (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures) 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, 1);
mysql.rds_set_external_source (RDS for MySQL, versions majeures 8.4 et ultérieures)
Configure une instance de base de données RDS for 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 plus d’informations sur la modification des paramètres d’instance, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.
Syntaxe
CALL mysql.rds_set_external_source (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 CLIENTetREPLICATION SLAVEsur 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 STATUSsur 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
SOURCE_SSL_VERIFY_SERVER_CERTn’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 administratif doit exécuter la procédure mysql.rds_set_external_source. Cette procédure doit être exécutée sur l’instance de base de données RDS for 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_source, 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.
CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED 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 CLIENTetREPLICATION SLAVEà votre utilisateur de réplication. L’exemple suivant accorde les privilègesREPLICATION CLIENTetREPLICATION SLAVEsur 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';
Pour utiliser la réplication chiffrée, configurez l'instance de base de données source de façon à utiliser les connexions SSL. De plus, importez le certificat de l'autorité de certification, le certificat du client et la clé du client dans l'instance de base de données ou le cluster de bases de données à l'aide de la procédure mysql.rds_import_binlog_ssl_material.
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_source pour configurer une instance de base de données RDS for MySQL 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_source (RDS for MySQL, versions majeures 8.4 et ultérieures) pour supprimer la configuration du réplica en lecture.
Quand la procédure mysql.rds_set_external_source 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 RDS for 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_source( 'Externaldb.some.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.0777', 120, 1);
mysql.rds_set_external_master_with_auto_position (RDS for MySQL, versions majeures 8.0 et antérieures)
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 plus d’informations sur la modification des paramètres d’instance, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.
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 CLIENTetREPLICATION SLAVEsur 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_CERTn'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 CLIENTetREPLICATION SLAVEà votre utilisateur de réplication. L'exemple suivant accorde les privilègesREPLICATION CLIENTetREPLICATION SLAVEsur 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.
Avant d’appeler mysql.rds_set_external_master_with_auto_position, assurez-vous d’appeler mysql.rds_set_external_source_gtid_purged pour définir la variable système gtid_purged avec une plage GTID spécifiée à partir d’une source externe.
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 (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures) 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 des identifiants de transaction globaux (GTID).
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', 1, 3600);
mysql.rds_set_external_source_with_auto_position (RDS for MySQL, versions majeures 8.4 et ultérieures)
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 plus d’informations sur la modification des paramètres d’instance, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.
Syntaxe
CALL mysql.rds_set_external_source_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 CLIENTetREPLICATION SLAVEsur 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
SOURCE_SSL_VERIFY_SERVER_CERTn'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 administratif doit exécuter la procédure mysql.rds_set_external_source_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.
Avant d'exécuter mysql.rds_set_external_source_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 CLIENTetREPLICATION SLAVEà votre utilisateur de réplication. L'exemple suivant accorde les privilègesREPLICATION CLIENTetREPLICATION SLAVEsur 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.
Avant d’appeler mysql.rds_set_external_source_with_auto_position, assurez-vous d’appeler mysql.rds_set_external_source_gtid_purged pour définir la variable système gtid_purged avec une plage GTID spécifiée à partir d’une source externe.
Après avoir appelé mysql.rds_set_external_source_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_source (RDS for MySQL, versions majeures 8.4 et ultérieures) pour supprimer la configuration du réplica en lecture.
Lorsque vous appelez mysql.rds_set_external_source_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_source_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 des identifiants de transaction globaux (GTID).
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_source_with_auto_position( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 1, 3600);
mysql.rds_set_external_master_with_delay (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures)
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 plus d’informations sur la modification des paramètres d’instance, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.
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 CLIENTetREPLICATION SLAVEsur 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 STATUSsur 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_CERTn'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 CLIENTetREPLICATION SLAVEà votre utilisateur de réplication. L'exemple suivant accorde les privilègesREPLICATION CLIENTetREPLICATION SLAVEsur 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 (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures) 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 des identifiants de transaction globaux (GTID).
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, 1, 3600);
mysql.rds_set_external_source_with_delay (RDS for MySQL, versions majeures 8.4 et ultérieures)
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 plus d’informations sur la modification des paramètres d’instance, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.
Syntaxe
CALL mysql.rds_set_external_source_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 CLIENTetREPLICATION SLAVEsur 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 STATUSsur 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
SOURCE_SSL_VERIFY_SERVER_CERTn'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 administratif doit exécuter la procédure mysql.rds_set_external_source_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_source_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 CLIENTetREPLICATION SLAVEà votre utilisateur de réplication. L'exemple suivant accorde les privilègesREPLICATION CLIENTetREPLICATION SLAVEsur 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_source_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_source (RDS for MySQL, versions majeures 8.4 et ultérieures) pour supprimer la configuration du réplica en lecture.
Lorsque vous appelez mysql.rds_set_external_source_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_source_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 des identifiants de transaction globaux (GTID).
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_source_with_delay( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 'mysql-bin-changelog.000777', 120, 1, 3600);
mysql.rds_set_external_source_gtid_purged
Définit la variable système gtid_purgedgtid_purged est requise pour configurer la réplication GTID afin de reprendre la réplication à l’aide du positionnement automatique.
Important
Pour exécuter cette procédure, autocommit doit être activé. Pour l'activer, définissez le paramètre autocommit sur 1. Pour plus d’informations sur la modification des paramètres d’instance, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.
Syntaxe
CALL mysql.rds_set_external_source_gtid_purged(server_uuid,start_pos,end_pos);
Paramètres
-
serveur_uuid -
L’identifiant universel unique (UUID) du serveur externe à partir duquel la plage GTID est importée.
-
start_pos -
La position de départ de la plage GTID à définir.
-
end_pos -
La position de fin de la plage GTID à définir.
Notes d’utilisation
La procédure mysql.rds_set_external_source_gtid_purged est uniquement disponible avec MySQL 8.0.37 et les versions 8.0 ultérieures.
Appelez mysql.rds_set_external_source_gtid_purged avant d’appeler mysql.rds_set_external_master_with_auto_position (RDS for MySQL, versions majeures 8.0 et antérieures), mysql.rds_set_external_source_with_auto_position (RDS for MySQL, versions majeures 8.4 et ultérieures) ou mysql.rds_set_external_source_with_auto_position_for_channel.
Avant d’appeler mysql.rds_set_external_source_gtid_purged, assurez-vous d’arrêter tous les canaux de réplication actifs pour la base de données. Pour vérifier l’état d’un canal, utilisez l’instruction MySQL SHOW REPLICA STATUS. Pour arrêter la réplication sur un canal, appelez mysql.rds_stop_replication_for_channel.
La plage GTID que vous spécifiez doit être un sur-ensemble de la valeur existante GTID_PURGED. Cette procédure stockée vérifie les valeurs suivantes avant de définir la valeur GTID_PURGED :
-
Le
server_uuidest valide. -
La valeur
start_posest supérieure à0et inférieure à la valeurend_pos. -
La valeur
end_posest supérieure ou égale à la valeurstart_pos.
Si le GTID défini sur votre serveur externe contient plusieurs plages de valeurs, il est recommandé d’appeler la procédure plusieurs fois, avec différentes valeurs de GTID.
Lorsque vous appelez mysql.rds_set_external_source_gtid_purged, Amazon RDS enregistre l’heure, l’utilisateur et une action set gtid_purged dans la table mysql.rds_history.
Si vous ne définissez pas la valeur gtid_purged appropriée pour la sauvegarde que vous utilisez pour la réplication, certaines transactions peuvent être manquantes ou dupliquées au cours du processus de réplication. Effectuez les étapes suivantes pour définir la valeur gtid_purged appropriée.
Pour définir la valeur gtid_purged sur le réplica
-
Identifiez le moment précis ou le fichier de sauvegarde à utiliser comme point de départ de la réplication. Il peut s’agir d’une sauvegarde logique (un fichier mysqldump) ou physique (un instantané Amazon RDS).
-
Déterminez la valeur
gtid_executed. Cette valeur représente l’ensemble de tous les GTID validés sur le serveur. Pour obtenir cette valeur, effectuez l’une des actions suivantes sur l’instance source :-
Exécutez l’instruction SQL
SELECT @@GLOBAL.GTID_EXECUTED;au moment de la sauvegarde. -
Si des options associées sont incluses dans l’utilitaire de sauvegarde correspondant, extrayez la valeur du fichier de sauvegarde. Pour plus d’informations, consultez l’option set-gtid-purged
dans la documentation MySQL.
-
-
Déterminez la valeur
gtid_purgedà utiliser pour l’appel àmysql.rds_set_external_source_gtid_purged. La valeurgtid_purgeddoit inclure tous les GTID qui ont été exécutés sur l’instance source et qui sont devenus inutiles pour la réplication. Cette valeurgtid_purgeddoit donc être un sous-ensemble de la valeurgtid_executedrécupérée à l’étape précédente.Pour déterminer la valeur
gtid_purged, identifiez les GTID qui ne sont pas inclus dans la sauvegarde et qui sont devenus inutiles pour la réplication. Vous pouvez le faire en analysant les journaux binaires ou en utilisant un outil tel que mysqlbinlog pour trouver les GTID qui ont été purgés des journaux binaires.Sinon, si vous disposez d’une sauvegarde cohérente qui inclut tous les journaux binaires jusqu’au point de sauvegarde, vous pouvez attribuer à la valeur
gtid_purgedla même valeur que la valeurgtid_executedà ce moment-là. -
Après avoir déterminé la valeur
gtid_purgedappropriée cohérente avec votre sauvegarde, appelez la procéduremysql.rds_set_external_source_gtid_purgedstockée sur votre instance de base de données RDS for MySQL pour définir la valeur.
Exemples
Lorsqu’il est exécuté sur une instance de base de données MySQL, l’exemple suivant définit la plage GTID d’un serveur MySQL externe avec l’UUID 12345678-abcd-1234-efgh-123456789abc, une position de départ de 1 et une position de fin de 100. La valeur GTID résultante est définie sur +12345678-abcd-1234-efgh-123456789abc:1-100.
CALL mysql.rds_set_external_source_gtid_purged('12345678-abcd-1234-efgh-123456789abc', 1, 100);
mysql.rds_set_master_auto_position (RDS for MySQL, versions majeures 8.0 et antérieures)
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_auto_position (RDS for MySQL, versions majeures 8.4 et ultérieures)
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_source_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 administratif doit exécuter la procédure mysql.rds_set_source_auto_position.
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 des identifiants de transaction globaux (GTID).
La procédure mysql.rds_set_source_delay est disponible dans les versions de RDS for MySQL suivantes :
-
Toutes les versions RDS for MySQL 8.4
-
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_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
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 (RDS for MariaDB et RDS for MySQL, versions majeures 8.0 et antérieures)ou mysql.rds_set_external_source (RDS for MySQL, versions majeures 8.4 et ultérieures) 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 Amazon RDS for 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 :
-
Toutes les versions RDS for MySQL 8.4
-
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_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 Amazon RDS for 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.