Replicación con una instancia de base de datos MySQL o MariaDB que se ejecuta fuera de Amazon RDS - Amazon Relational Database Service

Replicación con una instancia de base de datos MySQL o MariaDB que se ejecuta fuera de Amazon RDS

Puede configurar la replicación entre una instancia de base de datos MySQL o MariaDB en Amazon RDS y una instancia MySQL o MariaDB externa a Amazon RDS.

Antes de empezar

Puede configurar la replicación usando la posición de los archivos de registro binarios de transacciones replicadas. En la versión 5.7.23 y versiones posteriores de MySQL 5.7 en Amazon RDS, también puede configurar la replicación usando identificadores de transacciones globales (GTID).

Los permisos requeridos para comenzar la replicación en una instancia de base de datos de Amazon RDS están restringidos y no están disponibles para el usuario maestro de Amazon RDS. Por este motivo, asegúrese de usar los comandos mysql.rds_set_external_master y mysql.rds_start_replication de Amazon RDS para configurar la replicación entre la base de datos en funcionamiento y la base de datos de Amazon RDS.

Para establecer el formato de registro binario para una base de datos MySQL o MariaDB, actualice el parámetro binlog_format. Si su instancia de base de datos usa el grupo de parámetros de instancia de base de datos predeterminado, cree un nuevo grupo de parámetros de base de datos para modificar la configuración binlog_format. Recomendamos que utilice la configuración predeterminada para binlog_format, que es MIXED. Sin embargo, también puede configurar binlog_format como ROW o STATEMENT si necesita un formato binlog concreto. Reinicie la instancia de base de datos para que el cambio entre en vigor.

Para obtener más información sobre configurar el parámetro binlog_format, consulte Formato de registro binario. Para obtener más información acerca de las implicaciones de distintos tipos de replicación de MySQL, consulte Advantages and Disadvantages of Statement-Based and Row-Based Replication en la documentación de MySQL.

nota

El procedimiento expuesto en este tema permite configurar la replicación en todos los casos, excepto cuando la instancia externa sea de MariaDB versión 10.0.2 o superior y la instancia de Amazon RDS sea MariaDB. En tal caso, deberá aplicar el procedimiento descrito en Configuración de la replicación basada en GTID en una instancia de base de datos de MariaDB en Amazon RDS para configurar una replicación basada en GTID.

Configuración de la replicación de posición de archivo de registro binario con una instancia de origen externa

Siga estas directrices al configurar una instancia de origen externa y una réplica en Amazon RDS:

  • Monitorice los eventos de conmutación por error para la instancia de base de datos de Amazon RDS que usa como réplica. Si se produce una conmutación por error, la instancia de base de datos que es la réplica se puede volver a crear en un nuevo host con una dirección de red diferente. Para obtener información acerca de la monitorización de los eventos de conmutación por error, consulte Uso de las notificaciones de eventos de Amazon RDS.

  • Mantenga los registros binarios (binlogs) en la instancia de origen hasta que haya verificado que se han aplicado en la réplica. Este mantenimiento garantiza que se pueda restaurar la instancia de origen en caso de error.

  • Active las copias de seguridad automatizadas para la instancia de base de datos de Amazon RDS. La activación de las copias de seguridad automatizadas garantiza que puede restaurar su réplica a un momento dado si necesita volver a sincronizar la instancia de origen y la réplica. Para obtener información acerca de las copias de seguridad y la restauración a un momento dado, consulte Copia de seguridad y restauración de una instancia de base de datos de Amazon RDS.

Para configurar la replicación de archivos de registro binario con una instancia de origen externa

  1. Configure la instancia de base de datos MySQL o MariaDB de origen como de solo lectura.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. Ejecute el comando SHOW MASTER STATUS en la instancia de base de datos MySQL o MariaDB para determinar la ubicación del binlog.

    Se recibe un resultado similar al del siguiente ejemplo.

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. Copie la base de datos de la instancia externa a la instancia de Amazon RDS con mysqldump. Para las bases de datos muy grandes, puede usar el procedimiento que se describe en Importación de datos a una instancia de base de datos MySQL o MariaDB en Amazon RDS con tiempo de inactividad reducido.

    Para Linux, macOS o Unix:

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Para Windows:

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    nota

    Asegúrese de que no haya ningún espacio entre la opción -p y la contraseña que haya escrito.

    Para especificar el nombre de host, el nombre de usuario, el puerto y la contraseña para conectarse a su instancia de base de datos en Amazon RDS, use las opciones --host, --user (-u), --port y -p en el comando mysql. El nombre de host es el nombre del servicio de nombre de dominio (DNS) tomado del punto de enlace de la instancia de base de datos de Amazon RDS, por ejemplo, myinstance.123456789012.us-east-1.rds.amazonaws.com. Puede encontrar el valor del punto de enlace en los detalles de la instancia en la Consola de administración de AWS.

  4. Haga que la instancia MySQL o MariaDB de origen vuelvan a admitir la escritura.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    Para obtener más información sobre cómo hacer copias de seguridad para su uso con replicación, consulte la documentación de MySQL.

  5. En la Consola de administración de AWS, añada la dirección IP del servidor que aloja la base de datos externa al grupo de seguridad de VPC configurado para la instancia de base de datos de Amazon RDS. Para obtener más información acerca de la modificación de un grupo de seguridad de VPC, consulte Grupos de seguridad de su VPC en la Guía del usuario de Amazon Virtual Private Cloud.

    La dirección IP puede cambiar cuando se cumplen las siguientes condiciones:

    • Está usando una dirección IP pública para la comunicación entre la instancia de origen externa y la instancia de base de datos.

    • La instancia de origen externa se detuvo y se reinició.

    Si se cumplen esas condiciones, compruebe la dirección IP antes de añadirla.

    Es posible que también necesite configurar su red local para permitir las conexiones desde la dirección IP de la instancia de base de datos de Amazon RDS. Eso se hace para que la red local se pueda comunicar con la instancia de MySQL o MariaDB externa. Para encontrar la dirección IP de la instancia de base de datos de Amazon RDS, use el comando host.

    host db_instance_endpoint

    El nombre de host es el nombre de DNS tomado del punto de conexión de la instancia de base de datos de Amazon RDS.

  6. Con el cliente que prefiera, conecte con la instancia externa y cree un usuario para la replicación. Use esta cuenta únicamente para la replicación y limítela a su dominio para mejorar la seguridad. A continuación se muestra un ejemplo.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  7. Para la instancia externa, conceda los privilegios REPLICATION CLIENT y REPLICATION SLAVE al usuario de replicación. Por ejemplo, para conceder los privilegios REPLICATION CLIENT y REPLICATION SLAVE en todas las bases de datos al usuario "repl_user" del dominio, ejecute el siguiente comando.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  8. Defina la instancia de base de datos de Amazon RDS como réplica, Para ello, en primer lugar, conéctese a la instancia de base de datos de Amazon RDS como usuario maestro. A continuación, identifique la base de datos MySQL o MariaDB externa como instancia de origen usando el comando mysql.rds_set_external_master. Use el nombre del archivo de registro maestro y la posición del registro maestro que determinó en el paso 2. A continuación se muestra un ejemplo.

    CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
    nota

    En MySQL de Amazon RDS, puede aplicar la replicación retrasada si lo desea ejecutando el procedimiento almacenado mysql.rds_set_external_master_with_delay en su lugar. Un motivo de usar la replicación retrasada es permitir la recuperación de desastres con el procedimiento almacenado mysql.rds_start_replication_until. Actualmente, la replicación retrasada no se admite en MariaDB en Amazon RDS.

  9. En la instancia de base de datos de Amazon RDS, ejecute el comando mysql.rds_start_replication para comenzar la replicación:

    CALL mysql.rds_start_replication;

Configuración de la replicación basada en GTID con una instancia de origen externa

Al configurar una instancia de origen externa y una réplica en Amazon RDS, monitoree los eventos de conmutación por error para la instancia de base de datos de Amazon RDS que sea su réplica. Si se produce una conmutación por error, la instancia de base de datos que es la réplica se puede volver a crear en un nuevo host con una dirección de red diferente. Para obtener información acerca de la monitorización de los eventos de conmutación por error, consulte Uso de las notificaciones de eventos de Amazon RDS.

importante

La replicación basada en GTID solo es compatible con la versión 5.7.23 de MySQL en Amazon RDS y versiones posteriores de MySQL 5.7. La replicación basada en GTID no es compatible con MySQL 5.5, 5.6 u 8.0 en Amazon RDS.

Para configurar la replicación basada en GTID con una instancia de origen externa

  1. Prepare la replicación basada en GTID:

    1. Asegúrese de que la base de datos MySQL o MariaDB externa tienen la replicación basada en GTID habilitada. Para ello, asegúrese de que la base de datos externa tiene los siguientes parámetros establecidos en los valores especificados:

      gtid_modeON

      enforce_gtid_consistencyON

      Para obtener más información, consulte Replication with Global Transaction Identifiers en la documentación de MySQL o Global Transaction ID en la documentación de MariaDB.

    2. Asegúrese de que el grupo de parámetros asociado a la instancia de base de datos tiene la siguiente configuración de parámetros:

      • gtid_modeON, ON_PERMISSIVE o OFF_PERMISSIVE

      • enforce_gtid_consistencyON

      Para obtener más información acerca de los grupos de parámetros, consulte Trabajo con los grupos de parámetros de base de datos.

    3. Si ha cambiado el grupo de parámetros de la instancia de base de datos, reinicie la instancia de base de datos. Para obtener más información, consulte Reinicio de una instancia de base de datos.

  2. Configure la instancia de base de datos MySQL o MariaDB de origen como de solo lectura.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  3. Copie la base de datos de la instancia externa a la instancia de Amazon RDS con mysqldump. Para las bases de datos muy grandes, puede usar el procedimiento que se describe en Importación de datos a una instancia de base de datos MySQL o MariaDB en Amazon RDS con tiempo de inactividad reducido.

    Para Linux, macOS o Unix:

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Para Windows:

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    nota

    Asegúrese de que no haya ningún espacio entre la opción -p y la contraseña que haya escrito.

    Para especificar el nombre de host, el nombre de usuario, el puerto y la contraseña para conectarse a su instancia de base de datos en Amazon RDS, use las opciones --host, --user (-u), --port y -p en el comando mysql. El nombre de host es el nombre de DNS tomado del punto de enlace de la instancia de base de datos de Amazon RDS, por ejemplo myinstance.123456789012.us-east-1.rds.amazonaws.com. Puede encontrar el valor del punto de enlace en los detalles de la instancia en la Consola de administración de AWS.

  4. Haga que la instancia MySQL o MariaDB de origen vuelvan a admitir la escritura.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    Para obtener más información sobre cómo hacer copias de seguridad para su uso con replicación, consulte la documentación de MySQL.

  5. En la Consola de administración de AWS, añada la dirección IP del servidor que aloja la base de datos externa al grupo de seguridad de VPC configurado para la instancia de base de datos de Amazon RDS. Para obtener más información acerca de la modificación de un grupo de seguridad de VPC, consulte Grupos de seguridad de su VPC en la Guía del usuario de Amazon Virtual Private Cloud.

    La dirección IP puede cambiar cuando se cumplen las siguientes condiciones:

    • Está usando una dirección IP pública para la comunicación entre la instancia de origen externa y la instancia de base de datos.

    • La instancia de origen externa se detuvo y se reinició.

    Si se cumplen esas condiciones, compruebe la dirección IP antes de añadirla.

    Es posible que también necesite configurar su red local para permitir las conexiones desde la dirección IP de la instancia de base de datos de Amazon RDS. Eso se hace para que la red local se pueda comunicar con la instancia de MySQL o MariaDB externa. Para encontrar la dirección IP de la instancia de base de datos de Amazon RDS, use el comando host.

    host db_instance_endpoint

    El nombre de host es el nombre de DNS tomado del punto de conexión de la instancia de base de datos de Amazon RDS.

  6. Con el cliente que prefiera, conecte con la instancia externa y cree un usuario para la replicación. Use esta cuenta únicamente para la replicación y limítela a su dominio para mejorar la seguridad. A continuación se muestra un ejemplo.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  7. Para la instancia externa, conceda los privilegios REPLICATION CLIENT y REPLICATION SLAVE al usuario de replicación. Por ejemplo, para conceder los privilegios REPLICATION CLIENT y REPLICATION SLAVE en todas las bases de datos al usuario "repl_user" del dominio, ejecute el siguiente comando.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  8. Defina la instancia de base de datos de Amazon RDS como réplica, Para ello, en primer lugar, conéctese a la instancia de base de datos de Amazon RDS como usuario maestro. A continuación, identifique la base de datos MySQL o MariaDB externa que va a actuar como instancia de replicación principal usando el comando mysql.rds_set_external_master_with_auto_position. A continuación se muestra un ejemplo.

    CALL mysql.rds_set_external_master_with_auto_position ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 0, 0);
    nota

    En MySQL de Amazon RDS, puede aplicar la replicación retrasada si lo desea ejecutando el procedimiento almacenado mysql.rds_set_external_master_with_delay en su lugar. Un motivo de usar la replicación retrasada es permitir la recuperación de desastres con el procedimiento almacenado mysql.rds_start_replication_until_gtid. Actualmente, la replicación retrasada no se admite en MariaDB en Amazon RDS.

  9. En la instancia de base de datos de Amazon RDS, ejecute el comando mysql.rds_start_replication para comenzar la replicación.

    CALL mysql.rds_start_replication;