Replicación - Amazon Relational Database Service

Replicación

Los siguientes procedimientos almacenados controlan la forma en la que se replican las transacciones desde una base de datos externa en RDS para MySQL o desde RDS para MySQL a una base de datos externa. Para conocer cómo utilizar la replicación basada en identificadores de transacción global (GTID) con RDS para MySQL, consulte Uso de la replicación basada en GTID para Amazon RDS for MySQL.

mysql.rds_next_master_log

Cambia la posición del registro de instancia de base de datos de origen al inicio del siguiente registro binario en la instancia de base de datos de origen. Use este procedimiento únicamente si aparece el error de E/S de replicación 1236 en una réplica de lectura.

Sintaxis

CALL mysql.rds_next_master_log( curr_master_log );

Parámetros

curr_master_log

El índice del archivo de registro maestro actual. Por ejemplo, si el nombre del archivo actual es mysql-bin-changelog.012345, el índice es 12345. Para determinar el nombre del archivo de log maestro actual, ejecute el comando SHOW REPLICA STATUS y vea el campo Master_Log_File.

nota

Versiones anteriores de MySQL utilizaban SHOW SLAVE STATUS en lugar de SHOW REPLICA STATUS. Si usa una versión de MySQL anterior a la 8.0.23, utilice SHOW SLAVE STATUS.

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_next_master_log.

aviso

Llame a mysql.rds_next_master_log solo si la replicación deja de funcionar tras una conmutación por error de una instancia de base de datos Multi-AZ que es el origen de la replicación y el campo Last_IO_Errno de SHOW REPLICA STATUS muestra el error de E/S 1236.

La llamada a mysql.rds_next_master_log puede provocar una pérdida de datos en la réplica de lectura si las transacciones de la instancia de origen no se escribieron en el registro binario en el disco antes del evento de conmutación por error.

Puede reducir el riesgo de que esto ocurra configurando los parámetros de instancia de origen sync_binlog yinnodb_support_xa en 1, aunque esto puede reducir el rendimiento. Para obtener más información, consulte Solución de problemas de réplicas de lectura de MySQL.

Ejemplos

Supongamos que la replicación falla en una réplica de lectura de RDS para MySQL . La ejecución de SHOW REPLICA STATUS\G en la réplica de lectura devuelve el siguiente resultado:

*************************** 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

El campo Last_IO_Errno muestra que la instancia ha recibido el error de E/S 1236. El campo Master_Log_File muestra que el nombre de archivo es mysql-bin-changelog.012345, lo que significa que el índice del archivo de registro es 12345. Para resolver el error, puede llamar a mysql.rds_next_master_log con el siguiente parámetro:

CALL mysql.rds_next_master_log(12345);
nota

Versiones anteriores de MySQL utilizaban SHOW SLAVE STATUS en lugar de SHOW REPLICA STATUS. Si usa una versión de MySQL anterior a la 8.0.23, utilice SHOW SLAVE STATUS.

mysql.rds_reset_external_master

Vuelve a configurar una instancia de base de datos de RDS para MySQL para que deje de ser una réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS.

importante

Para ejecutar este procedimiento, autocommit debe estar habilitado. Para habilitarlo, establezca el parámetro autocommit en 1. Para obtener información acerca de cómo modificar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

Sintaxis

CALL mysql.rds_reset_external_master;

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_reset_external_master. Este procedimiento se debe ejecutar en la instancia de base de datos de MySQL que se va a eliminar como réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS.

nota

Recomendamos que utilice réplicas de lectura para administrar la replicación entre dos instancias de base de datos de Amazon RDS cuando sea posible. Cuando lo haga, recomendamos que solo utilice este y otros procedimientos almacenados relacionados de replicación. Estas prácticas permiten topologías de replicación más complejas entre instancias de base de datos de Amazon RDS. Ofrecemos estos procedimientos almacenados principalmente para habilitar la replicación con las instancias de MySQL que se ejecutan fuera de Amazon RDS. Para obtener información sobre la administración de la replicación entre instancias de base de datos de Amazon RDS, consulte Trabajo con réplicas de lectura de instancias de base de datos.

Para obtener más información acerca del uso de la replicación para importar los datos desde una instancia de MySQL que se ejecuta fuera de Amazon RDS, consulte Configuración de la replicación de posición de archivo de registro binario con una instancia de origen externa.

mysql.rds_set_external_master

Configura una instancia de base de datos de RDS para MySQL para que sea una réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS.

importante

Para ejecutar este procedimiento, autocommit debe estar habilitado. Para habilitarlo, establezca el parámetro autocommit en 1. Para obtener información acerca de cómo modificar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

nota

Puede utilizar el procedimiento almacenado mysql.rds_set_external_master_with_delay para configurar una instancia de base de datos de origen externo y replicación retardada.

Sintaxis

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 );

Parámetros

host_name

El nombre de host o la dirección IP de la instancia de MySQL que se ejecuta fuera de Amazon RDS para convertirse en instancia de base de datos de origen.

host_port

El puerto usado por la instancia de MySQL que se ejecuta fuera de Amazon RDS que se configurará como instancia de base de datos de origen. Si la configuración de la red incluye la replicación de puertos SSH (Secure Shell) que convierte el número de puerto, especifique el número de puerto expuesto por SSH.

replication_user_name

El ID de un usuario con permisos REPLICATION CLIENT y REPLICATION SLAVE en la instancia de MySQL que se ejecuta fuera de Amazon RDS. Es recomendable que proporcione una cuenta que se use solo para la replicación con la instancia externa.

replication_user_password

La contraseña del ID de usuario especificado en replication_user_name.

mysql_binary_log_file_name

El nombre del registro binario de la instancia de base de datos de origen que contiene la información de replicación.

mysql_binary_log_file_location

La ubicación del registro binario mysql_binary_log_file_name en la que la replicación empieza a leer la información de la replicación.

Para determinar el nombre y la ubicación del archivo binlog, puede ejecutar SHOW MASTER STATUS en la instancia de base de datos de origen.

ssl_encryption

Valor que especifica si el cifrado de la capa de conexión segura (SSL) se usa en la conexión de reproducción. El 1 especifica que se usa el cifrado SSL; el 0 especifica que no se usa el cifrado. El valor predeterminado es 0.

nota

La opción MASTER_SSL_VERIFY_SERVER_CERT no es compatible. Esta opción se establece en 0, lo que significa que la conexión está cifrada, pero los certificados no se verifican.

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_set_external_master. Este procedimiento se debe ejecutar en la instancia de base de datos de MySQL que se va a configurar como réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS.

Antes de ejecutar mysql.rds_set_external_master, debe configurar la instancia de MySQL que se ejecuta fuera de Amazon RDS como instancia de base de datos de origen. Para conectarse a la instancia de MySQL que se ejecuta fuera de Amazon RDS, debe especificar los valores de replication_user_name y replication_user_password que indican un usuario de replicación que tiene los permisos REPLICATION CLIENT y REPLICATION SLAVE en la instancia externa de MySQL.

Para configurar una instancia externa de MySQL como instancia de base de datos de origen
  1. Con el cliente de MySQL que prefiera, conéctese a la instancia externa de MySQL y cree una cuenta de usuario que se usará para la replicación. A continuación, se muestra un ejemplo.

    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';
    nota

    Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.

  2. En la instancia externa de MySQL, conceda a REPLICATION CLIENT y a REPLICATION SLAVE privilegios para el usuario de replicación. En el siguiente ejemplo se conceden los privilegios REPLICATION CLIENT y REPLICATION SLAVE en todas las bases de datos al usuario "repl_user" de su dominio.

    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';

Para utilizar la replicación cifrada, configure la instancia de base de datos de origen para que utilice conexiones SSL.

nota

Recomendamos que utilice réplicas de lectura para administrar la replicación entre dos instancias de base de datos de Amazon RDS cuando sea posible. Cuando lo haga, recomendamos que solo utilice este y otros procedimientos almacenados relacionados de replicación. Estas prácticas permiten topologías de replicación más complejas entre instancias de base de datos de Amazon RDS. Ofrecemos estos procedimientos almacenados principalmente para habilitar la replicación con las instancias de MySQL que se ejecutan fuera de Amazon RDS. Para obtener información sobre la administración de la replicación entre instancias de base de datos de Amazon RDS, consulte Trabajo con réplicas de lectura de instancias de base de datos.

Después de llamar a mysql.rds_set_external_master para configurar una instancia de base de datos de Amazon RDS como réplica de lectura, puede llamar a mysql.rds_start_replication en la réplica de lectura para iniciar el proceso de replicación. Puede llamar a mysql.rds_reset_external_master para eliminar la configuración de la réplica de lectura.

Cuando se llama a mysql.rds_set_external_master, Amazon RDS registra la hora, el usuario y una acción set master en las tablas mysql.rds_history y mysql.rds_replication_status.

Ejemplos

Cuando se ejecuta en una instancia de base de datos de MySQL, el siguiente ejemplo configura la instancia de base de datos como réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS.

call mysql.rds_set_external_master( 'Externaldb.some.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.0777', 120, 0);

mysql.rds_set_external_master_with_auto_position

Configura una instancia de base de datos de RDS for MySQL para que sea una réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS. Este procedimiento también configura la replicación retrasada y la replicación basada en identificadores de transacciones globales (GTID).

importante

Para ejecutar este procedimiento, autocommit debe estar habilitado. Para habilitarlo, establezca el parámetro autocommit en 1. Para obtener información acerca de cómo modificar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

Sintaxis

CALL mysql.rds_set_external_master_with_auto_position ( host_name , host_port , replication_user_name , replication_user_password , ssl_encryption , delay );

Parámetros

host_name

El nombre de host o la dirección IP de la instancia de MySQL que se ejecuta fuera de Amazon RDS para convertirse en instancia de base de datos de origen.

host_port

El puerto usado por la instancia de MySQL que se ejecuta fuera de Amazon RDS que se configurará como instancia de base de datos de origen. Si la configuración de la red incluye la replicación de puertos SSH (Secure Shell) que convierte el número de puerto, especifique el número de puerto expuesto por SSH.

replication_user_name

El ID de un usuario con permisos REPLICATION CLIENT y REPLICATION SLAVE en la instancia de MySQL que se ejecuta fuera de Amazon RDS. Es recomendable que proporcione una cuenta que se use solo para la replicación con la instancia externa.

replication_user_password

La contraseña del ID de usuario especificado en replication_user_name.

ssl_encryption

Valor que especifica si el cifrado de la capa de conexión segura (SSL) se usa en la conexión de reproducción. El 1 especifica que se usa el cifrado SSL; el 0 especifica que no se usa el cifrado. El valor predeterminado es 0.

nota

La opción MASTER_SSL_VERIFY_SERVER_CERT no es compatible. Esta opción se establece en 0, lo que significa que la conexión está cifrada, pero los certificados no se verifican.

delay

El número mínimo de segundos para retrasar la replicación desde la instancia de base de datos de origen.

El límite de este parámetro es de un día (86400 segundos).

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_set_external_master_with_auto_position. Este procedimiento se debe ejecutar en la instancia de base de datos de MySQL que se va a configurar como réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS.

Este procedimiento es compatible con todas las versiones de RDS para MySQL 5.7 y con las versiones de RDS para MySQL 8.0.26 y posteriores.

Antes de ejecutar mysql.rds_set_external_master_with_auto_position, debe configurar la instancia de MySQL que se ejecuta fuera de Amazon RDS como instancia de base de datos de origen. Para conectarse a la instancia de MySQL que se ejecuta fuera de Amazon RDS, debe especificar valores para replication_user_name y replication_user_password. Estos valores deben indicar a un usuario de replicación que tiene permisos REPLICATION CLIENT y REPLICATION SLAVE en la instancia externa de MySQL.

Para configurar una instancia externa de MySQL como instancia de base de datos de origen
  1. Con el cliente de MySQL que prefiera, conéctese a la instancia externa de MySQL y cree una cuenta de usuario que se usará para la replicación. A continuación se muestra un ejemplo.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. En la instancia externa de MySQL, conceda a REPLICATION CLIENT y a REPLICATION SLAVE privilegios para el usuario de replicación. En el siguiente ejemplo se conceden los privilegios REPLICATION CLIENT y REPLICATION SLAVE en todas las bases de datos al usuario 'repl_user' de su dominio.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'

Para obtener más información, consulte Configuración de la replicación de posición de archivo de registro binario con una instancia de origen externa.

nota

Recomendamos que utilice réplicas de lectura para administrar la replicación entre dos instancias de base de datos de Amazon RDS cuando sea posible. Cuando lo haga, recomendamos que solo utilice este y otros procedimientos almacenados relacionados de replicación. Estas prácticas permiten topologías de replicación más complejas entre instancias de base de datos de Amazon RDS. Ofrecemos estos procedimientos almacenados principalmente para habilitar la replicación con las instancias de MySQL que se ejecutan fuera de Amazon RDS. Para obtener información sobre la administración de la replicación entre instancias de base de datos de Amazon RDS, consulte Trabajo con réplicas de lectura de instancias de base de datos.

Después de llamar a mysql.rds_set_external_master_with_auto_position para configurar una instancia de base de datos de Amazon RDS como réplica de lectura, puede llamar a mysql.rds_start_replication en la réplica de lectura para iniciar el proceso de replicación. Puede llamar a mysql.rds_reset_external_master para eliminar la configuración de la réplica de lectura.

Cuando se llama a mysql.rds_set_external_master_with_auto_position, Amazon RDS registra la hora, el usuario y una acción set master en las tablas mysql.rds_history y mysql.rds_replication_status.

Para la recuperación de desastres, puede utilizar este procedimiento con el procedimiento almacenado mysql.rds_start_replication_until o mysql.rds_start_replication_until_gtid. Puede ejecutar el procedimiento mysql.rds_set_external_master_with_auto_position para restaurar los cambios en una réplica de lectura retrasada al momento justo anterior de un desastre. Después de que el procedimiento mysql.rds_start_replication_until_gtid detenga la replicación, puede promocionar la réplica de lectura para que sea la nueva instancia de base de datos primaria utilizando las instrucciones de Promoción de una réplica de lectura para convertirla en una instancia de base de datos independiente.

Para utiliza el procedimiento mysql.rds_rds_start_replication_until_gtid, debe habilitarse la replicación basada en GTID. Para omitir una transacción específica basada en GTID que se sabe que causa un desastre, puede usar el procedimiento almacenado mysql.rds_skip_transaction_with_gtid. Para obtener más información sobre el uso de la replicación basada en GTID, consulte Uso de la replicación basada en GTID para Amazon RDS for MySQL.

Ejemplos

Cuando se ejecuta en una instancia de base de datos de MySQL, el siguiente ejemplo configura la instancia de base de datos como réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS. Establece el retraso de replicación mínimo en una hora (3600 segundos) para la instancia de base de datos de MySQL. Un cambio en la instancia de base de datos de origen de MySQL que se ejecuta de forma externa a Amazon RDS no se aplica en la réplica de lectura de la instancia de base de datos de MySQL hasta que haya transcurrido al menos una hora.

call mysql.rds_set_external_master_with_auto_position( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 0, 3600);

mysql.rds_set_external_master_with_delay

Configura una instancia de base de datos de RDS for MySQL para que sea una réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS y configura la reproducción retrasada.

importante

Para ejecutar este procedimiento, autocommit debe estar habilitado. Para habilitarlo, establezca el parámetro autocommit en 1. Para obtener información acerca de cómo modificar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

Sintaxis

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 );

Parámetros

host_name

El nombre del host o la dirección IP de la instancia de MySQL que se ejecuta fuera de Amazon RDS que se convertirá en instancia de base de datos de origen.

host_port

El puerto usado por la instancia de MySQL que se ejecuta fuera de Amazon RDS que se configurará como instancia de base de datos de origen. Si la configuración de la red incluye la replicación del puerto SSH que convierte el número de puerto, especifique el número de puerto expuesto por SSH.

replication_user_name

El ID de un usuario con permisos REPLICATION CLIENT y REPLICATION SLAVE en la instancia de MySQL que se ejecuta fuera de Amazon RDS. Es recomendable que proporcione una cuenta que se use solo para la replicación con la instancia externa.

replication_user_password

La contraseña del ID de usuario especificado en replication_user_name.

mysql_binary_log_file_name

El nombre del registro binario de la instancia de base de datos de origen contiene la información de replicación.

mysql_binary_log_file_location

La ubicación del registro binario mysql_binary_log_file_name en la que la replicación comenzará a leer la información de la replicación.

Para determinar el nombre y la ubicación del archivo binlog, puede ejecutar SHOW MASTER STATUS en la instancia de base de datos de origen.

ssl_encryption

Valor que especifica si el cifrado de la capa de conexión segura (SSL) se usa en la conexión de reproducción. El 1 especifica que se usa el cifrado SSL; el 0 especifica que no se usa el cifrado. El valor predeterminado es 0.

nota

La opción MASTER_SSL_VERIFY_SERVER_CERT no es compatible. Esta opción se establece en 0, lo que significa que la conexión está cifrada, pero los certificados no se verifican.

delay

El número mínimo de segundos para retrasar la replicación desde la instancia de base de datos de origen.

El límite de este parámetro es de un día (86400 segundos).

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_set_external_master_with_delay. Este procedimiento se debe ejecutar en la instancia de base de datos de MySQL que se va a configurar como réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS.

Antes de ejecutar mysql.rds_set_external_master_with_delay, debe configurar la instancia de MySQL que se ejecuta fuera de Amazon RDS como instancia de base de datos de origen. Para conectarse a la instancia de MySQL que se ejecuta fuera de Amazon RDS, debe especificar valores para replication_user_name y replication_user_password. Estos valores deben indicar a un usuario de replicación que tiene permisos REPLICATION CLIENT y REPLICATION SLAVE en la instancia externa de MySQL.

Para configurar una instancia externa de MySQL como instancia de base de datos de origen
  1. Con el cliente de MySQL que prefiera, conéctese a la instancia externa de MySQL y cree una cuenta de usuario que se usará para la replicación. A continuación se muestra un ejemplo.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. En la instancia externa de MySQL, conceda a REPLICATION CLIENT y a REPLICATION SLAVE privilegios para el usuario de replicación. En el siguiente ejemplo se conceden los privilegios REPLICATION CLIENT y REPLICATION SLAVE en todas las bases de datos al usuario 'repl_user' de su dominio.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'

Para obtener más información, consulte Configuración de la replicación de posición de archivo de registro binario con una instancia de origen externa.

nota

Recomendamos que utilice réplicas de lectura para administrar la replicación entre dos instancias de base de datos de Amazon RDS cuando sea posible. Cuando lo haga, recomendamos que solo utilice este y otros procedimientos almacenados relacionados de replicación. Estas prácticas permiten topologías de replicación más complejas entre instancias de base de datos de Amazon RDS. Ofrecemos estos procedimientos almacenados principalmente para habilitar la replicación con las instancias de MySQL que se ejecutan fuera de Amazon RDS. Para obtener información sobre la administración de la replicación entre instancias de base de datos de Amazon RDS, consulte Trabajo con réplicas de lectura de instancias de base de datos.

Después de llamar a mysql.rds_set_external_master_with_delay para configurar una instancia de base de datos de Amazon RDS como réplica de lectura, puede llamar a mysql.rds_start_replication en la réplica de lectura para iniciar el proceso de replicación. Puede llamar a mysql.rds_reset_external_master para eliminar la configuración de la réplica de lectura.

Cuando se llama a mysql.rds_set_external_master_with_delay, Amazon RDS registra la hora, el usuario y una acción set master en las tablas mysql.rds_history y mysql.rds_replication_status.

Para la recuperación de desastres, puede utilizar este procedimiento con el procedimiento almacenado mysql.rds_start_replication_until o mysql.rds_start_replication_until_gtid. Puede ejecutar el procedimiento mysql.rds_set_external_master_with_delay para restaurar los cambios en una réplica de lectura retrasada al momento justo anterior de un desastre. Después de que el procedimiento mysql.rds_start_replication_until detenga la replicación, puede promocionar la réplica de lectura para que sea la nueva instancia de base de datos primaria utilizando las instrucciones de Promoción de una réplica de lectura para convertirla en una instancia de base de datos independiente.

Para utiliza el procedimiento mysql.rds_rds_start_replication_until_gtid, debe habilitarse la replicación basada en GTID. Para omitir una transacción específica basada en GTID que se sabe que causa un desastre, puede usar el procedimiento almacenado mysql.rds_skip_transaction_with_gtid. Para obtener más información sobre el uso de la replicación basada en GTID, consulte Uso de la replicación basada en GTID para Amazon RDS for MySQL.

El procedimiento mysql.rds_set_external_master_with_delay está disponible en estas versiones de RDS for MySQL:

  • Versión de MySQL 8.0.26 y posteriores a la 8.0

  • Todas las versiones 5.7

Ejemplos

Cuando se ejecuta en una instancia de base de datos de MySQL, el siguiente ejemplo configura la instancia de base de datos como réplica de lectura de una instancia de MySQL que se ejecuta fuera de Amazon RDS. Establece el retraso de replicación mínimo en una hora (3600 segundos) para la instancia de base de datos de MySQL. Un cambio en la instancia de base de datos de origen de MySQL que se ejecuta de forma externa a Amazon RDS no se aplica en la réplica de lectura de la instancia de base de datos de MySQL hasta que haya transcurrido al menos una hora.

call mysql.rds_set_external_master_with_delay( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 'mysql-bin-changelog.000777', 120, 0, 3600);

mysql.rds_set_master_auto_position

Establece el modo de replicación en el que se debe basar ya sea en posiciones de archivos de registros binarios o en identificadores de transacciones globales (GTID).

Sintaxis

CALL mysql.rds_set_master_auto_position ( auto_position_mode );

Parámetros

auto_position_mode

Un valor que indicar si debe usarse la replicación de posición de los archivos de registro o la replicación basada en GTID:

  • 0: utilice el método de replicación basado en la posición del archivo de registro binario. El valor predeterminado es 0.

  • 1: utilice el método de replicación basado en GTID.

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_set_master_auto_position.

Este procedimiento es compatible con todas las versiones de RDS para MySQL 5.7 y con las versiones de RDS para MySQL 8.0.26 y posteriores.

mysql.rds_set_source_delay

Establece el número mínimo de segundos para retrasar la replicación desde la instancia de base de datos de origen a la réplica de lectura actual. Use este procedimiento cuando esté conectado a una réplica de lectura para retrasar la replicación desde su instancia de base de datos de origen.

Sintaxis

CALL mysql.rds_set_source_delay( delay );

Parámetros

delay

El número mínimo de segundos para retrasar la replicación desde la instancia de base de datos de origen.

El límite de este parámetro es de un día (86400 segundos).

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_set_source_delay.

Para la recuperación de desastres, puede utilizar este procedimiento con el procedimiento almacenado mysql.rds_start_replication_until o el procedimiento almacenado mysql.rds_start_replication_until_gtid. Puede ejecutar el procedimiento mysql.rds_set_source_delay para restaurar los cambios en una réplica de lectura retrasada al momento justo anterior de un desastre. Después de que el procedimiento mysql.rds_start_replication_until o mysql.rds_start_replication_until_gtid detenga la replicación, puede promocionar la réplica de lectura para que sea la nueva instancia de base de datos primaria utilizando las instrucciones de Promoción de una réplica de lectura para convertirla en una instancia de base de datos independiente.

Para utiliza el procedimiento mysql.rds_rds_start_replication_until_gtid, debe habilitarse la replicación basada en GTID. Para omitir una transacción específica basada en GTID que se sabe que causa un desastre, puede usar el procedimiento almacenado mysql.rds_skip_transaction_with_gtid. Para obtener más información acerca de la replicación basada en GTID, consulte Uso de la replicación basada en GTID para Amazon RDS for MySQL.

El procedimiento mysql.rds_set_source_delay está disponible en estas versiones de RDS for MySQL:

  • Versión de MySQL 8.0.26 y posteriores a la 8.0

  • Todas las versiones 5.7

Ejemplos

Para retrasar la replicación desde la instancia de base de datos de origen a la réplica de lectura actual durante al menos una hora (3600 segundos), puede llamar a mysql.rds_set_source_delay con el siguiente parámetro:

CALL mysql.rds_set_source_delay(3600);

mysql.rds_skip_transaction_with_gtid

Omite la replicación de una transacción con el identificador de transacción global (GTID) especificado en una instancia de base de datos de MySQL.

Puede utilizar este procedimiento para la recuperación de desastres cuando se sabe que una transacción de GTID específica causa un problema. Utilice este procedimiento almacenado para omitir la transacción problemática. Entre los ejemplos de transacciones problemáticas se incluyen transacciones que inhabilitan la replicación, eliminan datos importantes o provocan que la instancia de base de datos no esté disponible.

Sintaxis

CALL mysql.rds_skip_transaction_with_gtid ( gtid_to_skip );

Parámetros

gtid_to_skip

El GTID de la transacción de replicación que se debe omitir.

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_skip_transaction_with_gtid.

Este procedimiento es compatible con todas las versiones de RDS para MySQL 5.7 y con las versiones de RDS para MySQL 8.0.26 y posteriores.

Ejemplos

En el ejemplo siguiente se omite la replicación de la transacción con el GTID 3E11FA47-71CA-11E1-9E33-C80AA9429562:23.

call mysql.rds_skip_transaction_with_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');

mysql.rds_skip_repl_error

Omite y elimina un error de replicación en una réplica de lectura de base de datos de MySQL.

Sintaxis

CALL mysql.rds_skip_repl_error;

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_skip_repl_error en una réplica de lectura. Para obtener más información sobre este procedimiento, consulte Llamar al procedimiento mysql.rds_skip_repl_error (Omitir el error de replicación actual).

Para determinar si hay errores, ejecute el comando SHOW REPLICA STATUS\G de MySQL. Si un error de replicación no es crítico, puede ejecutar mysql.rds_skip_repl_error para omitir el error. Si hay varios errores, mysql.rds_skip_repl_error elimina el primer error y advierte de que hay otros presentes. A continuación, puede usar SHOW REPLICA STATUS\G para determinar la acción correcta para el siguiente error. Para obtener información acerca de los valores devueltos, consulte SHOW REPLICA STATUS statement (Instrucción SHOW REPLICA STATUS) en la documentación de MySQL.

nota

Versiones anteriores de MySQL utilizaban SHOW SLAVE STATUS en lugar de SHOW REPLICA STATUS. Si usa una versión de MySQL anterior a la 8.0.23, utilice SHOW SLAVE STATUS.

Para obtener más información acerca de la resolución de problemas de replicación con Amazon RDS, consulte Solución de problemas de réplicas de lectura de MySQL.

Error de replicación detenida

Al llamar al procedimiento mysql.rds_skip_repl_error, es posible que reciba un mensaje de error en el que se indica que la réplica tiene un error o está deshabilitada.

Este mensaje de error aparece si ejecuta el procedimiento en la instancia principal en lugar de en la réplica de lectura. Debe ejecutar este procedimiento en la réplica de lectura para que funcione.

Este mensaje de error también puede aparecer si ejecuta el procedimiento en la réplica de lectura, pero la replicación no se puede reiniciar correctamente.

Si tiene que omitir un número de errores elevado, el retardo de réplica puede aumentar por encima del periodo de retención predeterminado para los archivos de log binarios (binlog). En este caso, puede producirse un error fatal debido a que los archivos binlog se están limpiando antes de reproducirse de nuevo en la réplica de lectura. Esta limpieza hace que la replicación se detenga y ya no se puede llamar al comando mysql.rds_skip_repl_error para omitir los errores de replicación.

Puede mitigar este problema incrementando el número de horas que los archivos binlog se retienen en la instancia de base de datos de origen. Después de incrementar el tiempo de retención de los archivos binlog, puede reiniciar la replicación y llamar al comando mysql.rds_skip_repl_error si es necesario.

Para definir el tiempo de retención de binlog, use el procedimiento mysql.rds_set_configuration y especifique un parámetro de configuración de 'binlog retention hours' junto con el número de horas para retener los archivos binlog en el clúster de base de datos. El ejemplo siguiente define el periodo de retención de los archivos binlog en 48 horas.

CALL mysql.rds_set_configuration('binlog retention hours', 48);

mysql.rds_start_replication

Inicia la replicación desde una instancia de base de datos de RDS para MySQL.

nota

Puede utilizar el procedimiento almacenado mysql.rds_start_replication_until o mysql.rds_start_replication_until_gtid para iniciar la replicación desde una instancia de base de datos de RDS para MySQL y detener la replicación en la ubicación del archivo de registro binario especificado.

Sintaxis

CALL mysql.rds_start_replication;

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_start_replication.

Para importar datos desde una instancia de MySQL fuera de Amazon RDS, llame a mysql.rds_start_replication en la réplica de lectura para iniciar el proceso de replicación después de llamar a mysql.rds_set_external_master para crear la configuración de replicación. Para obtener más información, consulte Restauración de una copia de seguridad en una instancia de base de datos MySQL..

Para exportar datos a una instancia de MySQL externa a Amazon RDS, llame a mysql.rds_start_replication y a mysql.rds_stop_replication en la réplica de lectura para controlar algunas acciones de replicación, como la purga de registros binarios. Para obtener más información, consulte Exportación de datos desde una instancia de base de datos MySQL mediante replicación.

Puede llamar a mysql.rds_start_replication en la réplica de lectura para reiniciar cualquier proceso de replicación que haya detenido previamente llamando a mysql.rds_stop_replication. Para obtener más información, consulte Trabajo con réplicas de lectura de instancias de base de datos.

mysql.rds_start_replication_until

Inicia la replicación desde una instancia de base de datos de RDS para MySQL y detiene la replicación en la ubicación del archivo de registro binario especificado.

Sintaxis

CALL mysql.rds_start_replication_until ( replication_log_file , replication_stop_point );

Parámetros

replication_log_file

El nombre del registro binario de la instancia de base de datos de origen que contiene la información de replicación.

replication_stop_point

La ubicación del registro binario replication_log_file en la que la replicación se detendrá.

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_start_replication_until.

El procedimiento mysql.rds_start_replication_until está disponible en estas versiones de RDS for MySQL:

  • Versión de MySQL 8.0.26 y posteriores a la 8.0

  • Todas las versiones 5.7

Puede utilizar este procedimiento con la replicación retrasada para recuperación de desastres. Si ha configurado la replicación retrasada, puede utilizar este procedimiento para restaurar los cambios en una réplica de lectura retrasada al momento justo anterior de un desastre. Después de que este procedimiento detenga la replicación, puede promocionar la réplica de lectura para que sea la nueva instancia de base de datos primaria utilizando las instrucciones de Promoción de una réplica de lectura para convertirla en una instancia de base de datos independiente.

Puede configurar la replicación retrasada utilizando los procedimientos almacenados siguientes:

El nombre de archivo especificado para el parámetro replication_log_file debe coincidir con el nombre del archivo binlog de instancia de base de datos de origen.

Cuando el parámetro replication_stop_point especifica una ubicación de parada correspondiente al pasado, la replicación se detiene de inmediato.

Ejemplos

En el ejemplo siguiente se inicia la replicación y se replican los cambios hasta que alcanza la ubicación 120 del archivo registro binario mysql-bin-changelog.000777.

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

mysql.rds_start_replication_until_gtid

Inicia la replicación desde una instancia de base de datos de RDS para MySQL y detiene la replicación inmediatamente después del identificador de transacción global (GTID) especificado.

Sintaxis

CALL mysql.rds_start_replication_until_gtid(gtid);

Parámetros

gtid

El GTID después del cual debe detenerse la replicación.

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_start_replication_until_gtid.

Este procedimiento es compatible con todas las versiones de RDS para MySQL 5.7 y con las versiones de RDS para MySQL 8.0.26 y posteriores.

Puede utilizar este procedimiento con la replicación retrasada para recuperación de desastres. Si ha configurado la replicación retrasada, puede utilizar este procedimiento para restaurar los cambios en una réplica de lectura retrasada al momento justo anterior de un desastre. Después de que este procedimiento detenga la replicación, puede promocionar la réplica de lectura para que sea la nueva instancia de base de datos primaria utilizando las instrucciones de Promoción de una réplica de lectura para convertirla en una instancia de base de datos independiente.

Puede configurar la replicación retrasada utilizando los procedimientos almacenados siguientes:

Cuando el parámetro gtid especifica una transacción que ya ha ejecutado la réplica, la replicación se detiene de inmediato.

Ejemplos

En el ejemplo siguiente se inicia la replicación y se replican los cambios hasta que alcanza la ubicación de GTI 3E11FA47-71CA-11E1-9E33-C80AA9429562:23.

call mysql.rds_start_replication_until_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');

mysql.rds_stop_replication

Detiene la replicación desde una instancia de base de datos de MySQL.

Sintaxis

CALL mysql.rds_stop_replication;

Notas de uso

El usuario maestro debe ejecutar el procedimiento mysql.rds_stop_replication.

Si desea configurar la replicación para importar datos desde una instancia de MySQL que se ejecuta fuera de Amazon RDS, llame a mysql.rds_stop_replication en la réplica de lectura para detener el proceso de replicación una vez completada la importación. Para obtener más información, consulte Restauración de una copia de seguridad en una instancia de base de datos MySQL..

Si desea configurar la replicación para exportar datos a una instancia de MySQL externa a Amazon RDS, llame a mysql.rds_start_replication y a mysql.rds_stop_replication en la réplica de lectura para controlar algunas acciones de replicación, como la limpieza de registros binarios. Para obtener más información, consulte Exportación de datos desde una instancia de base de datos MySQL mediante replicación.

También puede usar mysql.rds_stop_replication para detener la replicación entre dos instancias de base de datos de Amazon RDS. Normalmente, se detiene la replicación para realizar una operación con un tiempo de ejecución largo en la réplica de lectura, como crear un índice grande en la réplica de lectura. Puede reiniciar cualquier proceso de replicación que haya detenido llamando a mysql.rds_start_replication en la réplica de lectura. Para obtener más información, consulte Trabajo con réplicas de lectura de instancias de base de datos.