Uso de la replicación basada en GTID
El siguiente contenido explica cómo utilizar los identificadores de transacciones globales (GTID) con replicación de registro binario (binlog) entre instancias de base de datos de Amazon RDS para MySQL
Si utiliza la replicación del binlog y no está familiarizado con la replicación basada en GTID con MySQL, consulte Replication with global transaction identifiers
La replicación basada en GTID es compatible con todas las versiones de RDS para MySQL 5.7, RDS para MySQL versión 8.0.26 y versiones posteriores de MySQL 8.0. Todas las instancias de base de datos de MySQL en una configuración de reproducción deben cumplir este requisito.
Temas
- Información general de identificadores de transacciones globales (GTID)
- Parámetros de replicación basada en GTID
- Configuración de la replicación basada en GTID para nuevas réplicas de lectura
- Configuración de la replicación basada en GTID para las réplicas de lectura existentes.
- Desactivación de la reproducción basada en GTID para una instancia de base de datos de MySQL de RDS con réplicas de lectura
Información general de identificadores de transacciones globales (GTID)
Los identificadores de transacciones globales (GTID) son indentificadores únicos generados por transacciones confirmadas por MySQL. Puede utilizar GTID para que la replicación del binlog sea más simple y sencilla para la solución de problemas.
MySQL usa dos tipos distintos de transacciones para la replicación del binlog:
-
Transacciones de GTID: transacciones que se identifican mediante GTID.
-
Transacciones anónimas: transacciones que no tienen un GTID asignado.
En una configuración de replicación, los GTID son únicos en todas las instancias de base de datos. Los GTID simplifican la configuración de replicación porque cuando se usan no es necesario hacer referencia a las posiciones de los archivos de registro. Los GTID también simplifican el seguimiento de las transacciones replicadas y determinan si las instancias de origen y las réplicas son coherentes.
Puede usar una replicación basada en GTID para replicar los datos con réplicas de lectura de RDS for MySQL. Puede configurar la replicación basada en GTID cuando cree réplicas de lectura nuevas o puede convertir las réplicas de lectura existentes para que usen la replicación basada en GTID.
También puede usar la replicación basada en GTID en una configuración de replicación retrasada con RDS for MySQL. Para obtener más información, consulte Configuración de la replicación retrasada con MySQL.
Parámetros de replicación basada en GTID
Use los parámetros siguientes para configurar replicación basada en GTID.
Parámetro | Valores válidos | Descripción |
---|---|---|
|
|
|
|
|
|
nota
En la AWS Management Console, el parámetro gtid_mode
aparece como gtid-mode
.
Para la replicación basada en GTID, utilice esta configuración para el grupo de parámetros para su instancia de base de datos o réplica de lectura:
-
ON
yON_PERMISSIVE
se aplican solo a la replicación saliente de una instancia de base de datos de RDS. Estos valores provocan que su instancia de base de datos de RDS utilicen GTID para transacciones que se replican.ON
requiere que la base de datos externa también utilice la replicación basada en GTID.ON_PERMISSIVE
hace que la replicación basada en GTID sea opcional en la base de datos externa. -
Si se establece
OFF_PERMISSIVE
, significa que sus instancias de base de datos de RDS pueden aceptar la replicación entrante de una base de datos externa. Esto se puede realizar sin importar si la base de datos de origen utiliza la replicación basada en GTID. -
Si se establece
OFF
, significa que su instancia de base de datos de RDS solo acepta la replicación entrante desde bases de datos externas que no utilizan la replicación basada en GTID.
Para obtener más información acerca de los grupos de parámetros, consulte Working with parameter groups (Trabajar con grupos de parámetros).
Configuración de la replicación basada en GTID para nuevas réplicas de lectura
Cuando la reproducción basada en GTID esté habilitada para una instancia de base de datos de MySQL de RDS, la reproducción basada en GTID se configura automáticamente para las réplicas de lectura de la instancia de base de datos.
Para habilitar la replicación basada en GTID para nuevas réplicas de lectura
-
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_mode
–ON
oON_PERMISSIVE
-
enforce_gtid_consistency
–ON
Para obtener más información sobre el establecimiento de parámetros de configuración con grupos de consultas, consulte Working with parameter groups (Trabajar con grupos de parámetros).
-
-
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 acerca de cómo hacerlo, consulte Reinicio de una instancia de base de datos.
-
Cree una o varias réplicas de lectura de la instancia de base de datos. Para obtener más información acerca de cómo hacerlo, consulte Creación de una réplica de lectura.
Amazon RDS intenta establecer la replicación basada en GTID entre la instancia de base de datos de MySQL y las réplicas de lectura usando MASTER_AUTO_POSITION
. Si el intento produce un error, Amazon RDS usa las posiciones de los archivos de registro para la replicación con las réplicas de lectura. Para obtener más información acerca de MASTER_AUTO_POSITION
, consulte GTID Auto-Positioning
Configuración de la replicación basada en GTID para las réplicas de lectura existentes.
Para una instancia de base de datos de MySQL existente con réplicas de lectura que no utilice la reproducción basada en GTID, puede configurar la reproducción basada en GTID entre la instancia de base de datos y las réplicas de lectura.
Para habilitar la replicación basada en GTID para las réplicas de lectura existentes
-
Si la instancia de base de datos o cualquier réplica de lectura utiliza RDS for MySQL 8.0 o versiones anteriores a 8.0.26, actualice la instancia de base de datos o la réplica de lectura a la versión 8.0.26 o a versiones posteriores a 8.0 de MySQL. Todas las versiones de RDS para MySQL 5.7 admiten la replicación basada en GTID.
Para obtener más información, consulte Actualización del motor de base de datos MySQL.
-
De manera opcional, restablezca los parámetros de GTID y pruebe el comportamiento de la instancia de base de datos y las réplicas de lectura:
-
Asegúrese de que el grupo de parámetros asociado a la instancia de base de datos y cada réplica de lectura tiene el parámetro
enforce_gtid_consistency
establecido enWARN
.Para obtener más información sobre el establecimiento de parámetros de configuración con grupos de consultas, consulte Working with parameter groups (Trabajar con grupos de parámetros).
-
Si ha cambiado el grupo de parámetros de la instancia de base de datos, reinicie la instancia de base de datos. Si ha cambiado el grupo de parámetros de una réplica de lectura, reinicie la réplica de lectura.
Para obtener más información, consulte Reinicio de una instancia de base de datos.
-
Ejecute la instancia de base de datos y las réplicas de lectura con su carga de trabajo normal y monitoree los archivos de registro.
Si ve advertencias sobre las transacciones incompatibles con GTID, ajuste su aplicación de forma que solo use características compatibles con GTID. Asegúrese de que la instancia de base de datos no está generando ningún aviso sobre transacciones incompatibles con GTID antes de continuar al paso siguiente.
-
-
Restablezca los parámetros de GTID para la replicación basada en GTID que permite las transacciones anónimas hasta que las réplicas de lectura las hayan procesado todas.
-
Asegúrese de que el grupo de parámetros asociado a la instancia de base de datos y cada réplica de lectura tienen la siguiente configuración de parámetros:
-
gtid_mode
–ON_PERMISSIVE
-
enforce_gtid_consistency
–ON
-
-
Si ha cambiado el grupo de parámetros de la instancia de base de datos, reinicie la instancia de base de datos. Si ha cambiado el grupo de parámetros de una réplica de lectura, reinicie la réplica de lectura.
-
-
Espere a que todas las transacciones anónimas se hayan replicado. Para comprobar que se han replicado, haga lo siguiente:
-
Ejecute la siguiente instrucción en su instancia de base de datos de origen:
SHOW MASTER STATUS;
Anote los valores de las columnas
File
yPosition
. -
En cada réplica de lectura, use la información de archivo y posición de su instancia de origen en el paso anterior para ejecutar la siguiente consulta.
SELECT MASTER_POS_WAIT('
file
',position
);Por ejemplo, si el nombre del archivo es
mysql-bin-changelog.000031
y la posición es107
, ejecute la siguiente instrucción.SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
Si la réplica de lectura está después de la posición especificada, la consulta devuelve resultados inmediatamente. De no hacerlo, la función espera. Continúe al siguiente paso cuando la consulta haya devuelto resultados para todas las réplicas de lectura.
-
-
Restablezca los parámetros de GTID solo para la replicación basada en GTID.
-
Asegúrese de que el grupo de parámetros asociado a la instancia de base de datos y cada réplica de lectura tienen la siguiente configuración de parámetros:
-
gtid_mode
–ON
-
enforce_gtid_consistency
–ON
-
-
Reinicie la instancia de base de datos y cada réplica de lectura.
-
-
En cada réplica de lectura, ejecute el siguiente procedimiento.
CALL mysql.rds_set_master_auto_position(1);
Desactivación de la reproducción basada en GTID para una instancia de base de datos de MySQL de RDS con réplicas de lectura
Puede desactivar la reproducción basada en GTID para una instancia de base de datos de MySQL con réplicas de lectura.
Para desactivar la replicación basada en GTID para una instancia de base de datos de MySQL con réplicas de lectura
-
En cada réplica de lectura, ejecute el siguiente procedimiento:
CALL mysql.rds_set_master_auto_position(0);
-
Restablezca
gtid_mode
enON_PERMISSIVE
.-
Asegúrese de que el grupo de parámetros asociado a la instancia de base de datos de MySQL y cada réplica de lectura tiene el parámetro
gtid_mode
establecido enON_PERMISSIVE
.Para obtener más información sobre el establecimiento de parámetros de configuración con grupos de consultas, consulte Working with parameter groups (Trabajar con grupos de parámetros).
-
Reinicie la instancia de base de datos de MySQL y cada réplica de lectura. Para obtener más información acerca del reinicio, consulte Reinicio de una instancia de base de datos.
-
-
Restablezca
gtid_mode
enOFF_PERMISSIVE
.-
Asegúrese de que el grupo de parámetros asociado a la instancia de base de datos de MySQL y cada réplica de lectura tiene el parámetro
gtid_mode
establecido enOFF_PERMISSIVE
. -
Reinicie la instancia de base de datos de MySQL y cada réplica de lectura.
-
-
Espere a que todas las transacciones de GTID se hayan replicado a todas las réplicas de lectura. Para comprobar que se hayan aplicado, realice los siguientes pasos:
-
En la instancia principal de Aurora de la , ejecute el comando
SHOW MASTER STATUS
.El resultado debería ser similar al que se indica a continuación.
File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
Tenga en cuenta el archivo y la posición en su resultado.
-
En cada réplica de lectura, use la información de archivo y posición de su instancia de origen en el paso anterior para ejecutar la siguiente consulta:
Para las versiones MySQL 8.0.26, MySQL 8.0 y posteriores
SELECT SOURCE_POS_WAIT('
file
',position
);Para las versiones MySQL 5.7
SELECT MASTER_POS_WAIT('
file
',position
);Por ejemplo, si el nombre del archivo es
mysql-bin-changelog.000031
y la posición es107
, ejecute la siguiente instrucción:Para las versiones MySQL 8.0.26, MySQL 8.0 y posteriores
SELECT SOURCE_POS_WAIT('mysql-bin-changelog.000031', 107);
Para las versiones MySQL 5.7
SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
-
-
Restablezca los parámetros de GTID para deshabilitar la replicación basada en GTID.
-
Asegúrese de que el grupo de parámetros asociado a la instancia de base de datos de MySQL y cada réplica de lectura tienen la siguiente configuración de parámetros:
-
gtid_mode
–OFF
-
enforce_gtid_consistency
–OFF
-
-
Reinicie la instancia de base de datos de MySQL y cada réplica de lectura.
-