

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation de réplicas en lecture MySQL
<a name="USER_MySQL.Replication.ReadReplicas"></a>

Vous trouverez à la suite des informations spécifiques sur l'utilisation des réplicas en lecture sur RDS for MySQL. Pour obtenir des informations générales sur les réplicas en lecture et des instructions pour les utiliser, veuillez consulter [Utilisation des réplicas en lecture d'instance de base de données](USER_ReadRepl.md).

Pour plus d’informations sur l’utilisation des réplicas en lecture MySQL, consultez les rubriques suivantes.
+ [Configuration des filtres de réplication avec MySQL](USER_MySQL.Replication.ReadReplicas.ReplicationFilters.md)
+ [Configuration de la réplication retardée avec MySQL](USER_MySQL.Replication.ReadReplicas.DelayReplication.md)
+ [Mise à jour des réplicas en lecture avec MySQL](USER_MySQL.Replication.ReadReplicas.Updates.md)
+ [Utiliser des déploiements de réplicas en lecture Multi-AZ avec MySQL](USER_MySQL.Replication.ReadReplicas.MultiAZ.md)
+ [Utilisation de réplicas en lecture en cascade avec RDS for MySQL](USER_MySQL.Replication.ReadReplicas.Cascading.md)
+ [Surveillance du retard de réplication pour les réplicas en lecture MySQL](USER_MySQL.Replication.ReadReplicas.Monitor.md)
+ [Démarrage et arrêt de la réplication avec des réplicas en lecture MySQL](USER_MySQL.Replication.ReadReplicas.StartStop.md)
+ [Résolution d'un problème de réplica en lecture MySQL](USER_ReadRepl.Troubleshooting.md)

## Configuration des réplicas en lecture avec MySQL
<a name="USER_MySQL.Replication.ReadReplicas.Configuration"></a>

Avant qu'une instance de base de données MySQL puisse être utilisée comme source de réplication, vous devez activer les sauvegardes automatiques sur l'instance de base de données source. Pour cela, vous devez définir la période de rétention des sauvegardes sur une valeur autre que 0. Cette exigence s'applique également à un réplica en lecture qui serait l'instance de base de données source d'un autre réplica en lecture. Les sauvegardes automatiques sont prises en charge pour les réplicas en lecture exécutant n'importe quelle version de MySQL. Vous pouvez configurer la réplication en fonction des coordonnées des journaux binaires pour une instance de base de données MySQL. 

Vous pouvez configurer la réplication à l’aide des identifiants de transaction globaux (GTIDS) sur les versions suivantes :
+ RDS for MySQL version 5.7.44 et versions 5.7 ultérieures
+ RDS for MySQL version 8.0.28 et versions 8.0 ultérieures
+ RDS for MySQL version 8.4.3 et versions 8.4 ultérieures

Pour de plus amples informations, veuillez consulter [Utilisation de la réplication basée sur des identifiants de transaction globaux (GTID)](mysql-replication-gtid.md).

Vous pouvez créer jusqu'à 15 réplicas en lecture à partir d'une seule instance de base de données au sein de la même région. Pour que la réplication fonctionne de façon efficace, chaque réplica en lecture doit avoir la même quantité de ressources de calcul et de stockage que l'instance de base de données source. Si vous mettez à l'échelle l'instance de base de données source, faites-le également pour les réplicas en lecture. 

RDS for MySQL prend en charge les réplicas en lecture en cascade. Pour apprendre à configurer des réplicas en lecture en cascade, consultez [Utilisation de réplicas en lecture en cascade avec RDS for MySQL](USER_MySQL.Replication.ReadReplicas.Cascading.md).

Vous pouvez exécuter simultanément plusieurs actions de création et suppression de réplicas en lecture qui référencent la même instance de base de données source. Lorsque vous effectuez ces actions, restez dans la limite de 15 réplicas en lecture pour chaque instance source.

Un réplica en lecture d'une instance de base de données MySQL ne peut pas utiliser une version de moteur de base de données inférieure à son instance de base de données source.

### Préparation des instances de base de données MySQL qui utilisent MyISAM
<a name="USER_MySQL.Replication.ReadReplicas.Configuration-MyISAM-Instances"></a>

Si votre instance de base de données MySQL utilise un moteur non transactionnel tel que MyISAM, vous devez effectuer les étapes suivantes pour configurer correctement votre réplica en lecture. Ces étapes sont nécessaires pour vous assurer que le réplica en lecture dispose d'une copie cohérente de vos données. Ces étapes ne sont pas nécessaires si toutes vos tables utilisent un moteur transactionnel comme InnoDB. 

1. Arrêtez toutes les opérations DML (Data Manipulation Language) et DDL (Data Definition Language) sur les tables non transactionnelles dans l'instance de bases de données source et attendez qu'elles se terminent. Les instructions SELECT peuvent continuer à fonctionner. 

1. Videz et verrouillez les tables dans l'instance de bases de données source.

1. Créez le réplica en lecture en suivant l'une des méthodes présentées dans les sections suivantes.

1. Vérifiez l'avancement de la création du réplica en lecture en utilisant, par exemple, l'opération d'API `DescribeDBInstances`. Une fois que le réplica en lecture est disponible, déverrouillez les tables de l'instance de base de données source et reprenez les opérations de base de données normales. 

# Configuration des filtres de réplication avec MySQL
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters"></a>

Vous pouvez utiliser des filtres de réplication pour spécifier quelles bases de données et tables sont répliquées avec un réplica en lecture. Les filtres de réplication peuvent inclure des bases de données et des tables dans la réplication ou les exclure de la réplication.

Voici quelques cas d’utilisation pour les filtres de réplication :
+ Pour réduire la taille d’un réplica en lecture. Avec le filtrage de réplication, vous pouvez exclure les bases de données et les tables qui ne sont pas nécessaires sur le réplica en lecture.
+ Pour exclure des bases de données et des tables des réplicas en lecture, pour des raisons de sécurité.
+ Pour répliquer différentes bases de données et tables pour des cas d’utilisation spécifiques au niveau de différents réplicas en lecture. Par exemple, vous pouvez utiliser des réplicas en lecture spécifiques pour l’analyse ou le partage.
+ Pour une instance de base de données qui a lu des répliques dans différentes bases de données Régions AWS, pour répliquer différentes bases de données ou tables dans différentes. Régions AWS

**Note**  
Vous pouvez également utiliser des filtres de réplication pour spécifier quelles bases de données et tables sont répliquées avec une instance de base de données MySQL principale configurée en tant que réplica dans une topologie de réplication entrante. Pour en savoir plus sur cette configuration, consultez [Configuration d’une réplication de position de fichier journal binaire avec une instance source externe](MySQL.Procedural.Importing.External.Repl.md).

**Topics**
+ [

## Définition des paramètres de filtrage de la réplication pour RDS for MySQL
](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Configuring)
+ [

## Limites du filtrage de réplication pour RDS for MySQL
](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Limitations)
+ [

## Exemples de filtrage de réplication pour RDS for MySQL
](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Examples)
+ [

## Affichage des filtres de réplication pour un réplica en lecture
](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Viewing)

## Définition des paramètres de filtrage de la réplication pour RDS for MySQL
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Configuring"></a>

Pour configurer des filtres de réplication, définissez les paramètres de filtrage de réplication suivants sur le réplica en lecture :
+ `replicate-do-db` : répliquer les modifications apportées aux bases de données spécifiées. Lorsque vous définissez ce paramètre pour un réplica en lecture, seules les bases de données spécifiées dans le paramètre sont répliquées.
+ `replicate-ignore-db` : ne pas répliquer les modifications apportées aux bases de données spécifiées. Lorsque le paramètre `replicate-do-db` est défini pour un réplica en lecture, ce paramètre n'est pas évalué.
+ `replicate-do-table` : répliquer les modifications apportées aux tables spécifiées. Lorsque vous définissez ce paramètre pour un réplica en lecture, seules les tables spécifiées dans le paramètre sont répliquées. En outre, lorsque le paramètre `replicate-do-db` ou `replicate-ignore-db` est défini, assurez-vous d'inclure la base de données qui comprend les tables spécifiées dans la réplication avec le réplica en lecture.
+ `replicate-ignore-table` : ne pas répliquer les modifications apportées aux tables spécifiées. Lorsque le paramètre `replicate-do-table` est défini pour un réplica en lecture, ce paramètre n'est pas évalué.
+ `replicate-wild-do-table` : répliquer les tables en fonction des modèles de nom de base de données et nom de table spécifiés. Les caractères génériques `%` et `_` sont pris en charge. Lorsque le paramètre `replicate-do-db` ou `replicate-ignore-db` est défini, assurez-vous d'inclure la base de données qui comprend les tables spécifiées dans la réplication avec le réplica en lecture.
+ `replicate-wild-ignore-table` : ne pas répliquer les tables en fonction des modèles de nom de base de données et de nom de table spécifiés. Les caractères génériques `%` et `_` sont pris en charge. Lorsque le paramètre `replicate-do-table` ou `replicate-wild-do-table` est défini pour un réplica en lecture, ce paramètre n'est pas évalué.

Les paramètres sont évalués dans l'ordre dans lequel ils sont répertoriés. Pour plus d’informations sur le fonctionnement de ces paramètres, consultez la documentation MySQL :
+ Pour plus d’informations générales, voir [ Options et variables du serveur de réplication](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html).
+ Pour plus d’informations sur la façon dont les paramètres de filtrage de réplication de base de données sont évalués, voir [ Évaluation des options de réplication au niveau de la base de données et des options de la journalisation binaire](https://dev.mysql.com/doc/refman/8.0/en/replication-rules-db-options.html).
+ Pour plus d’informations sur l’évaluation des paramètres de filtrage de réplication de table, reportez-vous à la section [ Évaluation des options de réplication au niveau de la table](https://dev.mysql.com/doc/refman/8.0/en/replication-rules-table-options.html).

Par défaut, chacun de ces paramètres a une valeur vide. Sur chaque réplica en lecture, vous pouvez utiliser ces paramètres pour définir, modifier et supprimer des filtres de réplication. Lorsque vous définissez l'un de ces paramètres, séparez chaque filtre des autres par une virgule.

Vous pouvez utiliser les caractères génériques `%` et `_` dans les paramètres `replicate-wild-do-table` et `replicate-wild-ignore-table`. Le caractère générique `%` correspond à un nombre quelconque de caractères, et le caractère générique `_` ne correspond qu’à un seul caractère. 

Le format de journalisation binaire de l’instance de base de données source est important pour la réplication, car il détermine l’enregistrement des modifications de données. Le réglage du paramètre `binlog_format` détermine si la réplication est basée sur les lignes ou les instructions. Pour plus d’informations, consultez [Configuration d' RDS pour la journalisation binaire MySQL pour les bases de données mono-AZ](USER_LogAccess.MySQL.BinaryFormat.md).

**Note**  
Toutes les instructions DDL (Data Definition Language) sont répliquées en tant qu’instructions, quel que soit le paramètre `binlog_format` de l’instance de base de données source. 

## Limites du filtrage de réplication pour RDS for MySQL
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Limitations"></a>

Les limites suivantes s'appliquent au filtrage de réplication pour RDS for MySQL :
+ Chaque paramètre de filtrage de réplication a une limite de 2 000 caractères.
+ Les virgules ne sont pas prises en charge dans les filtres de réplication pour les valeurs de paramètres. Dans une liste de paramètres, les virgules ne peuvent être utilisées que comme séparateurs de valeurs. Par exemple, `ParameterValue='`a,b`'` est pris en charge, mais `ParameterValue='a,b'` ne l’est pas.
+ Les options `--binlog-do-db` et `--binlog-ignore-db` de MySQL pour le filtrage des journaux binaires ne sont pas prises en charge.
+ Le filtrage de réplication ne prend pas en charge les transactions XA.

  Pour plus d'informations, consultez la section [Restrictions on XA Transactions (Restrictions sur les transactions XA)](https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html) dans la documentation MySQL.

## Exemples de filtrage de réplication pour RDS for MySQL
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Examples"></a>

Pour configurer le filtrage de réplication pour un réplica en lecture, modifiez les paramètres de filtrage de réplication dans le groupe de paramètres associé au réplica en lecture.

**Note**  
Vous ne pouvez pas modifier un groupe de paramètres par défaut. Si le réplica en lecture utilise un groupe de paramètres par défaut, créez un nouveau groupe de paramètres et associez-le au réplica en lecture. Pour plus d'informations sur les groupes de paramètres de base de données, consultez [Groupes de paramètres pour Amazon RDS](USER_WorkingWithParamGroups.md).

Vous pouvez définir les paramètres d'un groupe de paramètres à l'aide de l'API AWS Management Console AWS CLI, ou RDS. Pour plus d’informations sur la définition des paramètres, consultez [Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS](USER_WorkingWithParamGroups.Modifying.md). Lorsque vous définissez des paramètres dans un groupe de paramètres, toutes les instances de base de données associées au groupe de paramètres utilisent les réglages des paramètres. Si vous définissez les paramètres de filtrage de réplication dans un groupe de paramètres, assurez-vous que le groupe de paramètres est associé uniquement aux réplicas en lecture. Laissez les paramètres de filtrage de réplication vides pour les instances de base de données source.

Les exemples suivants définissent les paramètres à l’aide de la AWS CLI. Ces exemples définissent `ApplyMethod` sur `immediate` de sorte que les modifications de paramètre se produisent immédiatement après la fin de la commande de la CLI. Si vous souhaitez qu’une modification en attente soit appliquée après le redémarrage du réplica en lecture, définissez `ApplyMethod` sur `pending-reboot`. 

Les exemples suivants définissent des filtres de réplication :
+ [Including databases in replication](#rep-filter-in-dbs-mysql)
+ [Including tables in replication](#rep-filter-in-tables-mysql)
+ [Including tables in replication with wildcard characters](#rep-filter-in-tables-wildcards-mysql)
+ [Excluding databases from replication](#rep-filter-ex-dbs-mysql)
+ [Excluding tables from replication](#rep-filter-ex-tables-mysql)
+ [Excluding tables from replication using wildcard characters](#rep-filter-ex-tables-wildcards-mysql)<a name="rep-filter-in-dbs-mysql"></a>

**Example Inclusion de bases de données dans la réplication**  
L’exemple suivant inclut les bases de données `mydb1` et `mydb2` dans la réplication.  
Pour Linux, macOS ou Unix :  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
```
Pour Windows :  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
```<a name="rep-filter-in-tables-mysql"></a>

**Example Inclusion de tables dans la réplication**  
L’exemple suivant inclut les tables `table1` et `table2` dans la base de données `mydb1` dans la réplication.  
Pour Linux, macOS ou Unix :  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
```
Pour Windows :  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
```<a name="rep-filter-in-tables-wildcards-mysql"></a>

**Example Inclusion de tables dans la réplication à l’aide de caractères génériques**  
L’exemple suivant inclut des tables dont les noms commencent par `order` et `return` dans la base de données `mydb` dans la réplication.  
Pour Linux, macOS ou Unix :  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
```
Pour Windows :  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
```<a name="rep-filter-ex-dbs-mysql"></a>

**Example Exclusion de bases de données de la réplication**  
L’exemple suivant exclut les bases de données `mydb5` et `mydb6` de la réplication.  
Pour Linux, macOS ou Unix :  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"
```
Pour Windows :  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"
```<a name="rep-filter-ex-tables-mysql"></a>

**Example Exclusion de tables de la réplication**  
L’exemple suivant exclut les tables `table1` dans la base de données `mydb5` et `table2` dans la base de données `mydb6` de la réplication.  
Pour Linux, macOS ou Unix :  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
```
Pour Windows :  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
```<a name="rep-filter-ex-tables-wildcards-mysql"></a>

**Example Exclusion de tables de la réplication à l’aide des caractères génériques**  
L’exemple suivant exclut de la réplication les tables dont les noms commencent par `order` et `return` dans la base de données `mydb7`.  
Pour Linux, macOS ou Unix :  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"
```
Pour Windows :  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"
```

## Affichage des filtres de réplication pour un réplica en lecture
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Viewing"></a>

Vous pouvez afficher les filtres de réplication pour un réplica en lecture de la manière suivante :
+ Vérifiez les réglages des paramètres de filtrage de réplication dans le groupe de paramètres associé au réplica en lecture.

  Pour obtenir des instructions, consultez [Affichage des valeurs de paramètres pour un groupe de paramètres de base de données dans Amazon RDS](USER_WorkingWithParamGroups.Viewing.md).
+ Dans un client MySQL, connectez-vous au réplica en lecture et exécutez l’instruction `SHOW REPLICA STATUS`.

  Dans la sortie, les champs suivants affichent les filtres de réplication pour le réplica en lecture :
  + `Replicate_Do_DB`
  + `Replicate_Ignore_DB`
  + `Replicate_Do_Table`
  + `Replicate_Ignore_Table`
  + `Replicate_Wild_Do_Table`
  + `Replicate_Wild_Ignore_Table`

  Pour plus d’informations sur ces champs, consultez [Vérification du statut de la réplication](https://dev.mysql.com/doc/refman/8.0/en/replication-administration-status.html) dans la documentation MySQL.

# Configuration de la réplication retardée avec MySQL
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication"></a>

Vous pouvez utiliser la réplication retardée comme stratégie pour la reprise après sinistre. Avec la réplication retardée, vous spécifiez la durée minimale, en secondes, pour retarder la réplication de la source vers la réplique de lecture. En cas de sinistre, par exemple la suppression accidentelle d'une table, vous appliquez la procédure suivante pour reprendre rapidement après le sinistre :
+ Arrêtez la réplication vers le réplica en lecture avant que lui soit envoyée la modification qui a provoqué le sinistre.

  Utilisez la procédure stockée [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) pour arrêter la réplication.
+ Arrêtez la réplication et précisez qu'elle doit s'arrêter automatiquement à une position donnée dans un fichier journal.

  Vous indiquez une position juste avant le sinistre grâce à la procédure stockée [](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until).
+ Effectuez la promotion du réplica en lecture pour qu'il devienne la nouvelle instance de base de données source, en suivant les instructions figurant dans [Promotion d'un réplica en lecture en instance de bases de données autonome](USER_ReadRepl.Promote.md).

**Note**  
Sur RDS for MySQL 8.4, la réplication retardée est prise en charge pour MySQL 8.4.3 et versions ultérieures. Sur RDS for MySQL 8.0, la réplication retardée est prise en charge pour MySQL 8.0.28 et versions ultérieures. Sur RDS for MySQL 5.7, la réplication retardée est prise en charge pour MySQL 5.7.44 et versions ultérieures.
Utilisez des procédures stockées pour configurer la réplication retardée. Vous ne pouvez pas configurer la réplication différée avec AWS Management Console AWS CLI, l'API ou l'API Amazon RDS.
Vous pouvez utiliser la réplication basée sur les identificateurs de transaction globaux (GTIDs) dans une configuration de réplication différée pour les versions suivantes :  
RDS for MySQL version 5.7.44 et versions 5.7 ultérieures
RDS for MySQL version 8.0.28 et versions 8.0 ultérieures
RDS for MySQL version 8.4.3 et versions 8.4 ultérieures
Si vous utilisez une réplication basée sur des identifiants de transaction globaux (GTID), utilisez la procédure stockée [](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) au lieu de la procédure stockée [](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until). Pour en savoir plus sur les réplications basées sur des identifiants de transaction globaux (GTID), consultez [Utilisation de la réplication basée sur des identifiants de transaction globaux (GTID)](mysql-replication-gtid.md).

**Topics**
+ [

## Configuration de la réplication retardée pendant la création du réplica en lecture
](#USER_MySQL.Replication.ReadReplicas.DelayReplication.ReplicaCreation)
+ [

## Modification de la réplication retardée pour un réplica en lecture existant
](#USER_MySQL.Replication.ReadReplicas.DelayReplication.ExistingReplica)
+ [

## Définition d'une position où arrêter la réplication vers un réplica en lecture
](#USER_MySQL.Replication.ReadReplicas.DelayReplication.StartUntil)
+ [

## Promotion d’un réplica en lecture
](#USER_MySQL.Replication.ReadReplicas.DelayReplication.Promote)

## Configuration de la réplication retardée pendant la création du réplica en lecture
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.ReplicaCreation"></a>

Pour configurer la réplication retardée pour tout réplica en lecture à venir créé à partir d'une instance de base de données, exécutez la procédure stockée [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) avec le paramètre `target delay`.

**Pour configurer la réplication retardée pendant la création du réplica en lecture**

1. À l'aide d'un client MySQL, connectez-vous à l'instance de base de données MySQL qui constituera la source des réplicas en lecture en tant qu'utilisateur principal.

1. Exécutez la procédure stockée [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) avec le paramètre `target delay`.

   Par exemple, exécutez la procédure stockée suivante pour indiquer que la réplication est retardée d'au moins une heure (3 600 secondes) pour tout réplica en lecture créé à partir de l'instance de base de données actuelle.

   ```
   call mysql.rds_set_configuration('target delay', 3600);
   ```
**Note**  
Après avoir exécuté cette procédure stockée, toute réplique de lecture que vous créez à l' AWS CLI aide de l'API Amazon RDS est configurée avec un délai de réplication du nombre de secondes spécifié.

## Modification de la réplication retardée pour un réplica en lecture existant
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.ExistingReplica"></a>

Pour modifier la réplication retardée pour un réplica en lecture existant, exécutez la procédure stockée [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay).

**Pour modifier la réplication retardée pour un réplica en lecture existant**

1. En utilisant un client MySQL, connectez-vous au réplica en lecture en tant qu'utilisateur principal.

1. Utilisez la procédure stockée [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) pour arrêter la réplication.

1. Exécutez la procédure stockée [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay).

   Par exemple, exécutez la procédure stockée suivante pour indiquer que la réplication vers le réplica en lecture est retardée d'au moins une heure (3 600 secondes).

   ```
   call mysql.rds_set_source_delay(3600);
   ```

1. Utilisez la procédure stockée [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) pour lancer la réplication.

## Définition d'une position où arrêter la réplication vers un réplica en lecture
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.StartUntil"></a>

Après avoir arrêté la réplication vers le réplica en lecture, vous pouvez démarrer la réplication, puis l'arrêter à la position spécifiée dans le fichier journal binaire en utilisant la procédure stockée [](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until).

**Pour démarrer la réplication vers un réplica en lecture et l'arrêter à une position donnée**

1. En utilisant un client MySQL, connectez-vous à l'instance de base de données MySQL source en tant qu'utilisateur principal.

1. Exécutez la procédure stockée [](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until).

   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`. Dans un scénario de reprise après sinistre, nous supposons que cette position `120` est juste avant le sinistre.

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

La réplication s’arrête automatiquement lorsque le point d’arrêt est atteint. L’événement RDS suivant est généré: `Replication has been stopped since the replica reached the stop point specified by the rds_start_replication_until stored procedure`.

## Promotion d’un réplica en lecture
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.Promote"></a>

Après l'arrêt de la réplication, dans un scénario de reprise après sinistre, vous pouvez promouvoir un réplica en lecture comme nouvelle instance de base de données source. Pour de plus amples informations sur la promotion d'un réplica en lecture, veuillez consulter [Promotion d'un réplica en lecture en instance de bases de données autonome](USER_ReadRepl.Promote.md).

# Mise à jour des réplicas en lecture avec MySQL
<a name="USER_MySQL.Replication.ReadReplicas.Updates"></a>

Les réplicas en lecture sont conçus pour prendre en charge les requêtes de lecture, mais vous pouvez avoir besoin de mises à jour ponctuelles. À titre d'exemple, vous pouvez avoir besoin d'ajouter un index, pour optimiser les types spécifiques de requêtes qui accèdent au réplica. 

Bien que vous puissiez activer les mises à jour en définissant le paramètre `read_only` sur `0` dans le groupe de paramètres de base de données pour le réplica en lecture, nous vous recommandons de ne pas le faire car cela peut poser des problèmes si le réplica en lecture devient incompatible avec l'instance de base de données source. Pour les opérations de maintenance, nous vous recommandons d'utiliser blue/green des déploiements. Pour de plus amples informations, veuillez consulter [Utilisation des Blue/Green déploiements pour les mises à jour de bases de](blue-green-deployments.md).

Si vous désactivez la lecture seule sur un réplica en lecture, modifiez la valeur du paramètre `1` pour rétablir `read_only` dès que possible. 

# Utiliser des déploiements de réplicas en lecture Multi-AZ avec MySQL
<a name="USER_MySQL.Replication.ReadReplicas.MultiAZ"></a>

Vous pouvez créer un réplica en lecture à partir de déploiements d'instance de base de données mono-AZ ou multi-AZ. Vous utilisez des déploiements multi-AZ pour améliorer la durabilité et la disponibilité des données critiques, mais vous ne pouvez pas utiliser une instance secondaire multi-AZ pour servir les requêtes en lecture seule. À la place, vous pouvez créer des réplicas en lecture à partir d'instances de base de données multi-AZ à trafic élevé pour décharger les requêtes en lecture seule. Si l'instance source d'un déploiement multi-AZ bascule vers l'instance secondaire, tous les réplicas en lecture associés se mettent automatiquement à utiliser l'instance secondaire (désormais principale) comme source de réplication. Pour plus d'informations, consultez [Configuration et gestion d’un déploiement multi-AZ pour Amazon RDS](Concepts.MultiAZ.md). 

Vous pouvez créer un réplica en lecture en tant qu'instance de base de données Multi-AZ. Amazon RDS crée une instance de secours de votre réplica dans une autre zone de disponibilité pour la prise en charge du basculement pour le réplica. La création de votre réplica en lecture en tant qu'instance de base de données multi-AZ est indépendante du fait que la base de données source soit ou non une instance de base de données multi-AZ. 

# Utilisation de réplicas en lecture en cascade avec RDS for MySQL
<a name="USER_MySQL.Replication.ReadReplicas.Cascading"></a>

RDS for MySQL prend en charge les réplicas en lecture en cascade. Les *réplicas en lecture en cascade* vous permettent de mettre à l'échelle les lectures sans surcharger votre instance de base de données RDS for MySQL source.

Avec les réplicas en lecture en cascade, votre instance de base de données RDS for MySQL envoie des données au premier réplica en lecture de la chaîne. Ce réplica en lecture envoie ensuite les données au deuxième réplica de la chaîne, etc. Au final, tous les réplicas en lecture de la chaîne ont reçu les modifications de l'instance de base de données RDS for MySQL, sans surcharger uniquement l'instance de base de données source.

Vous pouvez créer une série comportant jusqu'à trois réplicas en lecture dans une chaîne à partir d'une instance de base de données RDS for MySQL source. Par exemple, supposons que vous disposez d'une instance de base de données RDS for MySQL, `mysql-main`. Vous pouvez effectuer les actions suivantes :
+ À partir de `mysql-main`, créez le premier réplica en lecture de la chaîne, `read-replica-1`.
+ Ensuite, à partir de `read-replica-1`, créez le réplica en lecture suivant dans la chaîne, `read-replica-2`.
+ Enfin, à partir de `read-replica-2`, créez le troisième réplica en lecture de la chaîne, `read-replica-3`.

Vous ne pouvez pas créer un autre réplica en lecture au-delà de ce troisième réplica en lecture en cascade dans la série pour `mysql-main`. Une série complète d'instances allant d'une instance de base de données source RDS for MySQL jusqu'à la fin d'une série de réplicas en lecture en cascade peut comporter au plus quatre instances de base de données.

Pour que les réplicas en lecture en cascade fonctionnent, les sauvegardes automatisées doivent être activées sur chaque instance de base de données RDS for MySQL. Pour activer les sauvegardes automatiques sur un réplica en lecture, commencez par créer le réplica en lecture, puis modifiez-le pour activer les sauvegardes automatiques. Pour plus d’informations, consultez [Création d’un réplica en lecture](USER_ReadRepl.Create.md).

Comme pour tout réplica en lecture, vous pouvez promouvoir un réplica en lecture faisant partie d’une cascade. La promotion d’un réplica en lecture depuis une chaîne de réplicas en lecture retire ce réplica de la chaîne. Par exemple, supposons que vous souhaitez déplacer une partie de la charge de travail de votre instance de base de données `mysql-main` vers une nouvelle instance destinée uniquement au service comptable. En prenant pour hypothèse la chaîne de trois réplicas en lecture de l’exemple, vous décidez de promouvoir `read-replica-2`. La chaîne est affectée comme suit :
+ La promotion de `read-replica-2` le retire de la chaîne de réplication.
  + Il s’agit désormais d’une instance de base de données en lecture/écriture complète.
  + La réplication continue sur `read-replica-3`, tout comme avant la promotion.
+ Votre `mysql-main` continue la réplication sur `read-replica-1`.

Pour plus d’informations sur la promotion des réplicas en lecture, consultez [Promotion d'un réplica en lecture en instance de bases de données autonome](USER_ReadRepl.Promote.md).

# Surveillance du retard de réplication pour les réplicas en lecture MySQL
<a name="USER_MySQL.Replication.ReadReplicas.Monitor"></a>

Pour les réplicas en lecture MySQL, vous pouvez surveiller le retard de réplication dans Amazon CloudWatch en consultant la métrique Amazon RDS `ReplicaLag`. La métrique `ReplicaLag` contient la valeur du champ `Seconds_Behind_Master` de la commande `SHOW REPLICA STATUS`. 

Les causes courantes du retard de réplication pour MySQL sont les suivantes : 
+ Une indisponibilité du réseau.
+ L'écriture dans des tables avec des index différents sur un réplica en lecture. Si le paramètre `read_only` est défini sur `0` sur le réplica en lecture, la réplication peut être rompue si le réplica en lecture devient incompatible avec l'instance de base de données source. Une fois que vous avez effectué les tâches de maintenance sur le réplica en lecture, nous vous recommandons de définir à nouveau le paramètre `read_only` sur `1`.
+ Utilisation d’un moteur de stockage non transactionnel tel que MyISAM. La réplication est uniquement prise en charge pour le moteur de stockage InnoDB sur MySQL.

Lorsque la métrique `ReplicaLag` atteint 0, le réplica a rattrapé le retard sur l’instance de base de données source. Si la métrique `ReplicaLag` retourne -1, la réplication n’est actuellement pas active. `ReplicaLag`= -1 est équivalent à `Seconds_Behind_Master` = `NULL`. 

# Démarrage et arrêt de la réplication avec des réplicas en lecture MySQL
<a name="USER_MySQL.Replication.ReadReplicas.StartStop"></a>

Vous pouvez arrêter et redémarrer le processus de réplication sur une instance de base de données Amazon RDS en appelant les procédures stockées système [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) et [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication). Vous pouvez procéder ainsi lors d'une réplication entre deux instances Amazon RDS pour des opérations de longue durée, telles que la création d'un grand index. Vous devez également arrêter et démarrer la réplication lors de l'importation ou de l'exportation de bases de données. Pour plus d’informations, consultez [Importation de données vers une base de données Amazon RDS for MySQL avec une durée d’indisponibilité réduite](mysql-importing-data-reduced-downtime.md) et [Exportation de données à partir d'une instance DB MySQL grâce à la réplication](MySQL.Procedural.Exporting.NonRDSRepl.md). 

Si la réplication est arrêtée pendant plus de 30 jours consécutifs, manuellement ou en raison d'une erreur de réplication, Amazon RDS met fin à la réplication entre l'instance de base de données source et tous les réplicas en lecture. Cela permet d'éviter l'augmentation des besoins en stockage sur l'instance de bases de données source et d'importants délais de basculement. L'instance de base de données du réplica en lecture est toujours disponible. En revanche, la réplication ne peut pas être reprise, car les journaux binaires requis par le réplica en lecture sont supprimés de l'instance de base de données source une fois la réplication terminée. Vous pouvez créer un nouveau réplica en lecture pour l'instance de base de données source afin de rétablir la réplication. 

# Résolution d'un problème de réplica en lecture MySQL
<a name="USER_ReadRepl.Troubleshooting"></a>

Dans certains cas, pour les instances de base de données, les réplicas en lecture présentent des erreurs ou des incohérences de données (ou les deux) entre le réplica en lecture et son instance de base de données source. Ce problème survient quand des événements de journaux binaires ou des journaux redo InnoDB ne sont pas vidés lors d'une panne du réplica en lecture ou de l'instance de base de données source. Dans ces situations, supprimez et recréez manuellement les réplicas en lecture. Vous pouvez réduire la probabilité que cela se produise en définissant les valeurs de paramètre suivantes : `sync_binlog=1` et `innodb_flush_log_at_trx_commit=1`. Ces paramètres peuvent réduire les performances. Testez donc leur impact avant d’implémenter les modifications dans un environnement de production.

**Avertissement**  
Dans le groupe de paramètres associé à l'instance de base de données source, nous recommandons de conserver ces valeurs de paramètres : `sync_binlog=1` et `innodb_flush_log_at_trx_commit=1`. Ces paramètres sont dynamiques. Si vous ne souhaitez pas utiliser ces paramètres, nous vous recommandons de définir temporairement ces valeurs avant d'exécuter toute opération sur l'instance de base de données source susceptible de provoquer son redémarrage. Ces opérations incluent, sans s'y limiter, le redémarrage, le redémarrage avec basculement, la mise à niveau de la version de la base de données et la modification de la classe d'instance de base de données ou de son stockage. La même recommandation s'applique à la création de nouveaux réplicas en lecture pour l'instance de base de données source.  
Le non-respect de ces instructions augmente le risque que les réplicas en lecture présentent des erreurs ou des incohérences de données (ou les deux) entre le réplica en lecture et son instance de base de données source.

Les technologies de réplication pour MySQL sont asynchrones. Parce qu’elles sont asynchrones, des augmentations occasionnelles de `BinLogDiskUsage` sur l’instance de base de données source et `ReplicaLag` sur le réplica en lecture sont prévisibles. Par exemple, un volume élevé d’opérations d’écriture sur l’instance de bases de données source peut se produire en parallèle. Tandis que les opérations d’écritures sur le réplica en lecture sont sérialisées à l’aide d’un seul thread d’I/O, ce qui peut conduire à un retard entre l’instance source et le réplica. Pour plus d’informations sur les réplicas en lecture seule dans la documentation MySQL, consultez [Détails d’implémentation de la réplication](https://dev.mysql.com/doc/refman/8.0/en/replication-implementation-details.html).

Vous pouvez effectuer plusieurs opérations pour réduire le retard entre les mises à jour d’une instance de base de données source et les mises à jour suivantes appliquées au réplica en lecture, telles que les opérations suivantes :
+ Dimensionnement d’un réplica en lecture pour qu’il ait une taille de stockage et une classe d’instance de base de données comparables à celles de l’instance de base de données source.
+ Garantie que les réglages des paramètres dans les groupes de paramètres de base de données utilisés par l’instance de base de données source et le réplica en lecture sont compatibles. Pour obtenir plus d’informations et un exemple, reportez-vous à la présentation du paramètre `max_allowed_packet`, plus loin dans cette section.

Amazon RDS surveille l’état de réplication de vos réplicas en lecture et met à jour le champ `Replication State` de l’instance du réplica en lecture avec la valeur `Error` si la réplication s’arrête pour une raison quelconque. Par exemple, dans le cas de requêtes DML exécutées sur votre réplica en lecture qui sont en conflit avec les mises à jour effectuées sur l’instance de base de données source. 

Vous pouvez passer en revue les détails de l'erreur associée et déclenchée par le moteur MySQL, en consultant le champ `Replication Error`. Des événements indiquant l’état du réplica en lecture sont également générés, y compris [RDS-EVENT-0045](USER_Events.Messages.md#RDS-EVENT-0045), [RDS-EVENT-0046](USER_Events.Messages.md#RDS-EVENT-0046) et [RDS-EVENT-0047](USER_Events.Messages.md#RDS-EVENT-0047). Pour plus d’informations sur les événements et l’abonnement aux événements, consultez [Utiliser la notification d'événements d'Amazon RDS](USER_Events.md). Si un message d'erreur MySQL est renvoyé, passez en revue le numéro de l'erreur dans la [documentation sur les messages d'erreur MySQL](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html).

Un problème courant susceptible de causer des erreurs de réplication se pose lorsque la valeur du paramètre `max_allowed_packet` d’un réplica en lecture est inférieure à celle du paramètre `max_allowed_packet` de l’instance de base de données source. Le paramètre `max_allowed_packet` est un paramètre personnalisé que vous pouvez définir dans un groupe de paramètres de base de données. Vous utilisez `max_allowed_packet` pour spécifier la taille maximale du code DML qui peut être exécuté sur la base de données. Dans certains cas, la valeur `max_allowed_packet` du groupe de paramètres de base de données associé à un réplica en lecture est inférieure à la valeur `max_allowed_packet` du groupe de paramètres de base de données associé à l'instance de base de données source. Dans ces cas, le processus de réplication peut lancer l'erreur `Packet bigger than 'max_allowed_packet' bytes` et arrêter la réplication. Pour corriger cette erreur, faites en sorte que l'instance de base de données source et le réplica en lecture utilisent des groupes de paramètres de base de données avec les mêmes valeurs pour le paramètre `max_allowed_packet`. 

Voici d’autres situations courantes susceptibles de causer des erreurs de réplication :
+ Écriture sur les tables d’un réplica en lecture. Dans certains cas, vous pouvez créer des index sur un réplica en lecture différents des index sur l'instance de base de données source. Vous devez alors définir le paramètre `read_only` sur `0` pour créer les index. Si vous écrivez dans des tables sur le réplica en lecture, cela peut interrompre la réplication si le réplica en lecture devient incompatible avec l'instance de base de données source. Une fois que vous avez effectué les tâches de maintenance sur le réplica en lecture, nous vous recommandons de définir à nouveau le paramètre `read_only` sur `1`.
+  Utilisation d'un moteur de stockage non transactionnel tel que MyISAM. Les réplicas en lecture nécessitent un moteur de stockage transactionnel. La réplication est uniquement prise en charge pour le moteur de stockage InnoDB sur MySQL.
+  Utilisation de requêtes non déterministes non sécurisées telles que `SYSDATE()`. Pour plus d’informations, consultez [Determination of safe and unsafe statements in binary logging](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html). 

Si vous décidez que vous pouvez ignorer une erreur en toute sécurité, vous pouvez suivre la procédure décrite dans la section [Ignorer une erreur de réplication pour RDS for MySQL](Appendix.MySQL.CommonDBATasks.SkipError.md). Sinon, vous pouvez d'abord supprimer le réplica en lecture. Vous créez ensuite une instance à l'aide du même identifiant d'instance de base de données, de telle sorte que le point de terminaison demeure le même que celui de votre ancien réplica en lecture. Si une erreur de réplication est corrigée, le champ `Replication State` prend la valeur *replicating (réplication en cours)*.