Configuración, inicio y detención de la replicación del registro binario (binlog)
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.
Temas
- mysql.rds_next_master_log
- mysql.rds_reset_external_master
- mysql.rds_set_external_master
- mysql.rds_set_external_master_with_auto_position
- mysql.rds_set_external_master_with_delay
- mysql.rds_set_external_source_gtid_purged
- mysql.rds_set_master_auto_position
- mysql.rds_set_source_delay
- mysql.rds_skip_repl_error
- mysql.rds_start_replication
- mysql.rds_start_replication_until
- mysql.rds_stop_replication
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 comandoSHOW REPLICA STATUS
y vea el campoMaster_Log_File
.nota
Versiones anteriores de MySQL utilizaban
SHOW SLAVE STATUS
en lugar deSHOW REPLICA STATUS
. Si usa una versión de MySQL anterior a la 8.0.23, utiliceSHOW 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 los parámetros de un grupo de parámetros de base de datos en Amazon RDS.
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 los parámetros de un grupo de parámetros de base de datos en Amazon RDS.
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
yREPLICATION 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
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.
-
En la instancia externa de MySQL, conceda a
REPLICATION CLIENT
y aREPLICATION SLAVE
privilegios para el usuario de replicación. En el siguiente ejemplo se conceden los privilegiosREPLICATION CLIENT
yREPLICATION 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 los parámetros de un grupo de parámetros de base de datos en Amazon RDS.
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
yREPLICATION 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
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'
-
En la instancia externa de MySQL, conceda a
REPLICATION CLIENT
y aREPLICATION SLAVE
privilegios para el usuario de replicación. En el siguiente ejemplo se conceden los privilegiosREPLICATION CLIENT
yREPLICATION 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.
Antes de llamar a mysql.rds_set_external_master_with_auto_position
, asegúrese de llamar a mysql.rds_set_external_source_gtid_purged para configurar la variable de sistema gtid_purged
con un rango de GTID especificado desde un origen externo.
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.
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 los parámetros de un grupo de parámetros de base de datos en Amazon RDS.
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
yREPLICATION 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
-
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'
-
En la instancia externa de MySQL, conceda a
REPLICATION CLIENT
y aREPLICATION SLAVE
privilegios para el usuario de replicación. En el siguiente ejemplo se conceden los privilegiosREPLICATION CLIENT
yREPLICATION 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.
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_external_source_gtid_purged
Establece la variable de sistema gtid_purgedgtid_purged
es necesario para configurar la replicación basada en GTID y reanudar la replicación mediante el posicionamiento automático.
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 los parámetros de un grupo de parámetros de base de datos en Amazon RDS.
Sintaxis
CALL mysql.rds_set_external_source_gtid_purged(
server_uuid
,start_pos
,end_pos
);
Parámetros
-
server_uuid
-
Es el identificador único universal (UUID) del servidor externo desde el que se importa el rango de GTID.
-
start_pos
-
La posición inicial del rango de GTID que se va a configurar.
-
end_pos
-
La posición inicial del rango de GTID que se va a configurar.
Notas de uso
El procedimiento mysql.rds_set_external_source_gtid_purged
solo está disponible con las versiones 8.0.37 y otras versiones 8.0 posteriores de MySQL.
Llame a mysql.rds_set_external_source_gtid_purged
antes de llamar a mysql.rds_set_external_master_with_auto_position o mysql.rds_set_external_source_with_auto_position_for_channel.
Antes de llamar a mysql.rds_set_external_source_gtid_purged
, asegúrese de detener todos los canales de replicación activos de la base de datos. Para comprobar el estado de un canal, utilice la instrucción de MySQL SHOW REPLICA STATUS
. Para detener la replicación en un canal, llame a mysql.rds_stop_replication_for_channel.
El rango de GTID que especifique debe ser un superconjunto del valor existente de GTID_PURGED
. Este procedimiento almacenado comprueba los siguientes valores antes de establecer el valor de GTID_PURGED
:
El
server_uuid
es válido.El valor de
start_pos
es mayor que0
y menor que el valor deend_pos
.El valor de
end_pos
es superior o igual al valor destart_pos
.
Si el conjunto de GTID de su servidor externo contiene varios rangos de valores, valore la posibilidad de llamar al procedimiento varias veces con valores de conjunto de GTID diferentes.
Cuando llama a mysql.rds_set_external_source_gtid_purged
, Amazon RDS registra la hora, el usuario y una acción set gtid_purged
en la tabla mysql.rds_history
.
Si no establece el valor de gtid_purged
adecuado para la copia de seguridad que utiliza en la replicación, es posible que falten transacciones o que se dupliquen durante el proceso de replicación. Siga estos pasos para corregir el valor de gtid_purged
.
Establecimiento del valor de gtid_purged en la réplica
Determine el momento o el archivo de copia de seguridad específico que se utilizará como punto de partida para la replicación. Puede ser una copia de seguridad lógica (un archivo mysqldump) o una copia de seguridad física (una instantánea de Amazon RDS).
Determine el valor de
gtid_executed
. Este valor representa el conjunto de todos los GTID que se confirmaron en el servidor. Para recuperar este valor, en la instancia de origen, realice una de las siguientes operaciones:Ejecute la instrucción de SQL
SELECT @@GLOBAL.GTID_EXECUTED;
en el momento en que se realizó la copia de seguridad.Si se incluye alguna opción relacionada en la utilidad de copia de seguridad correspondiente, extraiga el valor del archivo de copia de seguridad. Para obtener más información, consulte la opción set-gtid-purged
en la documentación de MySQL.
Determine el valor de
gtid_purged
que se utilizará para la llamada amysql.rds_set_external_source_gtid_purged
. El valor degtid_purged
debe incluir todos los GTID que se ejecutaron en la instancia de origen y que ya no se necesitan para la replicación. Por lo tanto, el valor degtid_purged
debe ser un subconjunto del valor degtid_executed
que ha recuperado en el paso anterior.Para determinar el valor de
gtid_purged
, identifique los GTID que no están incluidos en la copia de seguridad y que ya no se necesitan para la replicación. Puede hacerlo analizando los registros binarios o utilizando una herramienta como mysqlbinlog para buscar los GTID que se purgaron desde los registros binarios.Si dispone de una copia de seguridad uniforme que incluya todos los registros binarios hasta el punto de copia de seguridad, también puede configurar el valor de
gtid_purged
para que sea el mismo que el degtid_executed
en el momento de la copia de seguridad.Tras determinar el valor de
gtid_purged
adecuado que sea coherente con la copia de seguridad, llame al procedimiento almacenadomysql.rds_set_external_source_gtid_purged
en la instancia de base de datos de RDS para MySQL a fin de establecer el valor.
Ejemplos
Cuando se ejecuta en una instancia de base de datos de MySQL, el siguiente ejemplo establece el rango de GTID desde un servidor MySQL externo con el UUID 12345678-abcd-1234-efgh-123456789abc
, una posición inicial 1
y una posición final 100
. El valor de GTID resultante se establece en +12345678-abcd-1234-efgh-123456789abc:1-100
.
CALL mysql.rds_set_external_source_gtid_purged('12345678-abcd-1234-efgh-123456789abc', 1, 100);
mysql.rds_set_master_auto_position
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 es0
. -
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.
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_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
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_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.