Saltar al contenido

¿Cómo creo una réplica de lectura interregional de mi instancia de base de datos de Amazon RDS para MySQL en otra cuenta de AWS?

6 minutos de lectura
0

Quiero crear una réplica entre regiones de Amazon Relational Database Service (Amazon RDS) para MySQL de mi instancia de base de datos de origen en otra cuenta de AWS.

Descripción breve

Utiliza AWS Database Migration Service (AWS DMS) o configura una replicación externa basada en registros binarios entre dos instancias de base de datos de Amazon RDS para MySQL en diferentes regiones o cuentas de AWS. No se puede usar la consola de Amazon RDS ni la interfaz de la línea de comandos de AWS (AWS CLI) para crear una réplica de lectura entre regiones en otra cuenta.

Nota: Al crear réplicas de lectura entre regiones con canales de red más largos entre centros de datos regionales, es posible que experimentes un retraso de la replicación. Además, hay costes de replicación entre regiones.

Resolución

Nota: En la siguiente resolución, la cuenta A contiene la instancia de base de datos primaria de la región de origen. La cuenta B contiene la instancia de base de datos de réplica en la región de destino.

Para crear una réplica de lectura entre regiones de Amazon RDS para MySQL en otra cuenta, sigue estos pasos:

  1. Para la cuenta A, activa el registro binario.
    Nota: Se produce una interrupción cuando se cambia el periodo de retención de copia de seguridad. Además, la transferencia de datos conlleva costes adicionales.

  2. Ejecuta el siguiente comando para actualizar el periodo de retención de registros binarios:

    mysql> call mysql.rds_set_configuration('binlog retention hours', value);

    Nota: Sustituye value por el número de horas que deben transcurrir para que los cambios se apliquen antes de que Amazon RDS elimine los registros binarios tras 168 horas. Para obtener más información, consulta mysql.rds_set_configuration.

  3. Ejecuta el siguiente comando para crear un usuario de replicación en la instancia de base de datos primaria de la cuenta A:

    mysql> CREATE USER 'repl_user'@'domain_name' IDENTIFIED BY 'password';

    Nota: Sustituye domain_name y password por tu nombre de dominio y contraseña. Para obtener más información, consulta CREATE USER statement (Enunciado CREATE USER) en el sitio web de MySQL.

  4. Ejecuta el siguiente comando para conceder los permisos necesarios al usuario de replicación:

    mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'domain_name';

    Nota: Sustituye domain_name por tu nombre de dominio. Para obtener más información, consulta REPLICATION CLIENT y REPLICATION SLAVE en el sitio web de MySQL.

  5. Crea una réplica de lectura entre regiones para la cuenta A y, a continuación, selecciona la región de destino.

  6. Inicia sesión en la réplica de lectura de la instancia de base de datos que has creado para la cuenta A. A continuación, ejecuta el siguiente comando para confirmar que el estado de la réplica de lectura coincide con el de la instancia de base de datos primaria.
    Versiones 8.0 y anteriores de MySQL:

    mysql> show slave status \G

    Versiones 8.4 y posteriores de MySQL:

    mysql> show replica status \G

    **Nota:**El estado de la réplica de lectura coincide cuando el valor de Seconds_Behind_Master es 0.

  7. Ejecuta el siguiente comando para detener la replicación en la instancia de base de datos de réplica:

    mysql> call mysql.rds_stop_replication();
  8. Inicia sesión en la instancia de base de datos de réplica.

  9. Ejecuta el siguiente comando para registrar los valores de salida.
    Versiones 8.0 y anteriores de MySQL:

    mysql> show slave status \G

    Versiones 8.4 y posteriores de MySQL:

    mysql> show replica status \G

    Nota: Anota los valores de salida de Relay_Master_Log_File y Exec_Master_Log_Pos. Estos valores de salida son las coordenadas del registro binario que utilizarás en un paso posterior.

  10. Crea una instantánea de base de datos de la instancia de base de datos de réplica para la cuenta A.

  11. (Opcional) Para generar copias de seguridad lógicas y exportar datos desde la instancia de base de datos de réplica para la cuenta A, puedes usar una herramienta nativa, como mysqldump. Para obtener más información, consulta mysqldump — A database backup program (mysqldump: un programa de copias de seguridad de bases de datos) en el sitio web de MySQL. Utiliza mysqldump para importar datos a una nueva instancia de base de datos de la misma versión para la cuenta B. No necesitas copiar ni compartir instantáneas ni claves de AWS Key Management Service (AWS KMS) entre las dos cuentas.
    Nota: Si usas mysqldump, continúa con el paso 14 después de importar los datos a la instancia de base de datos de la cuenta B.

  12. Comparte la instantánea de base de datos con la cuenta B.
    Nota: Si la instantánea de base de datos está cifrada, también debes compartir la clave de AWS KMS con la cuenta B. Para obtener más información, consulta Uso compartido de instantáneas cifradas para Amazon RDS.

  13. Restaura la instantánea de base de datos en la cuenta B.
    Nota: No se puede restaurar una instancia de base de datos a partir de una instantánea cifrada compartida. En su lugar, copia la instantánea de base de datos y, a continuación, restaura la instancia de base de datos a partir de la versión copiada.

  14. Configura el acceso a la red entre la cuenta A y la cuenta B para permitir que el tráfico fluya entre las dos cuentas.

  15. Configura las reglas del grupo de seguridad entrante en la instancia de base de datos primaria de la cuenta A para permitir el tráfico a la Internet pública desde la instancia de base de datos de la cuenta B.
    Nota: Para el tráfico de replicación privada, debes crear y aceptar una conexión de emparejamiento de nube virtual privada (VPC) entre las dos cuentas.

  16. Para configurar la replicación externa en la instancia de base de datos de destino para la cuenta B, ejecuta el siguiente comando como superusuario.
    Versiones 8.0 y anteriores de MySQL:

mysql> CALL mysql.rds_set_external_master ('host_name', 'host_port', 'repl_user_name', 'replication_user_password', 'mysql_binary_log_file_name', 'mysql_binary_log_file_location');

Versiones 8.4 y posteriores de MySQL:

mysql> CALL mysql.rds_set_external_source ('host_name', 'host_port', 'repl_user_name', 'replication_user_password', 'mysql_binary_log_file_name', 'mysql_binary_log_file_location');

Nota: Sustituye host_name por el punto de enlace de la instancia de base de datos primaria y host_port por el puerto de la instancia de base de datos primaria. Sustituye replication_user_name y replication_user_password por el nombre de dominio y la contraseña que has creado en el paso 3. Sustituye mysql_binary_log_file_name por el nombre del archivo de registro binario y mysql_binary_log_file_location por las coordenadas del registro binario que has anotado en el paso 9. Ejecuta el siguiente comando para iniciar la replicación en la instancia de base de datos restaurada para la cuenta B:

CALL mysql.rds_start_replication;

Ejemplo de resultado:

+-------------------------+  
| Message                 |  
+-------------------------+  
| Replica running normally. |  
+-------------------------+
  1. Ejecuta el siguiente comando para comprobar el estado de la réplica de la cuenta B.
    Versiones 8.0 y anteriores de MySQL:
mysql> show slave status \G

Versiones 8.4 y posteriores de MySQL:

mysql> show replica status \G
  1. Elimina la réplica de lectura que has creado en el paso 5.
OFICIAL DE AWSActualizada hace un año