Uso de la replicación basada en GTID - Amazon Relational Database Service

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 en la documentación de MySQL.

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.

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

gtid_mode

OFF, OFF_PERMISSIVE, ON_PERMISSIVE, ON

OFF especifica que las nuevas transacciones son anónimas (es decir, no tienen GTID) y que una transacción debe ser anónima para replicarse.

OFF_PERMISSIVE especifica que las nuevas transacciones son anónimas, pero que todas las transacciones pueden replicarse.

ON_PERMISSIVE especifica que las nuevas transacciones son de GTID, pero que todas las transacciones pueden replicarse.

ON especifica que las nuevas transacciones son de GTID y que una transacción debe ser de GTID para poder replicarse.

enforce_gtid_consistency

OFF, ON, WARN

OFF permite que las transacciones infrinjan la uniformidad de GTID.

ON evita que las transacciones infrinjan la uniformidad de GTID.

WARN permite que las transacciones infrinjan la uniformidad de GTID, pero genera un aviso cuando se proudce una infracció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 y ON_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
  1. Asegúrese de que el grupo de parámetros asociado a la instancia de base de datos tiene la siguiente configuración de parámetros:

    • gtid_modeON o ON_PERMISSIVE

    • enforce_gtid_consistencyON

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

  2. 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.

  3. 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 en la documentación de MySQL.

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
  1. 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.

  2. 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:

    1. 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 en WARN.

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

    2. 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.

    3. 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.

  3. 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.

    1. 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_modeON_PERMISSIVE

      • enforce_gtid_consistencyON

    2. 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.

  4. Espere a que todas las transacciones anónimas se hayan replicado. Para comprobar que se han replicado, haga lo siguiente:

    1. Ejecute la siguiente instrucción en su instancia de base de datos de origen:

      SHOW MASTER STATUS;

      Anote los valores de las columnas File y Position.

    2. 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 es 107, 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.

  5. Restablezca los parámetros de GTID solo para la replicación basada en GTID.

    1. 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_modeON

      • enforce_gtid_consistencyON

    2. Reinicie la instancia de base de datos y cada réplica de lectura.

  6. 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
  1. En cada réplica de lectura, ejecute el siguiente procedimiento:

    CALL mysql.rds_set_master_auto_position(0);
  2. Restablezca gtid_mode en ON_PERMISSIVE .

    1. 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 en ON_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).

    2. 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.

  3. Restablezca gtid_mode en OFF_PERMISSIVE .

    1. 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 en OFF_PERMISSIVE.

    2. Reinicie la instancia de base de datos de MySQL y cada réplica de lectura.

  4. 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:

    1. 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.

    2. 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 es 107, 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);
  5. Restablezca los parámetros de GTID para deshabilitar la replicación basada en GTID.

    1. 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_modeOFF

      • enforce_gtid_consistencyOFF

    2. Reinicie la instancia de base de datos de MySQL y cada réplica de lectura.