En esta sección, se incluye la siguiente información:
- El comportamiento de Datastream cuando controla los datos que se extraen de una base de datos de MySQL de origen
- Las versiones de la base de datos de MySQL que Datastream admite
- Las limitaciones conocidas para usar la base de datos de MySQL como fuente
- Una descripción general de cómo configurar una base de datos de MySQL de origen para que los datos se puedan transmitir a un destino
Comportamiento
En esta sección, se describe el comportamiento de las fuentes de MySQL cuando replicas datos con Datastream. Cuando ingresas datos de bases de datos de MySQL, puedes usar la replicación basada en binlog o la replicación basada en identificadores de transacciones globales (GTID). Seleccionas tu método de CDC cuando lo creas.
Replicación basada en binlog
Datastream puede usar archivos de registro binario para mantener un registro de los cambios de datos en las bases de datos de MySQL. Luego, la información contenida en estos archivos de registro se replica en el destino para reproducir los cambios realizados en la fuente.
Las características clave de la replicación basada en binlog en Datastream son las siguientes:
- Se pueden seleccionar todas las bases de datos o las bases de datos específicas de una fuente de MySQL determinada, así como todas las tablas de las bases de datos o tablas específicas.
- Se replican todos los datos históricos.
- Se replican todos los cambios del lenguaje de manipulación de datos (DML), como las inserciones, las actualizaciones y las eliminaciones de las bases de datos y las tablas especificadas.
- Solo se replican los cambios confirmados.
Replicación basada en identificador de transacciones globales (GTID)
Datastream también admite la replicación basada en identificadores globales (GTID).
El identificador de transacciones globales (GTID) es un identificador único que se crea y se asocia con cada transacción confirmada en una fuente de MySQL. Este identificador es único no solo para la fuente en la que se originó, sino también en todos los servidores de una topología de replicación determinada, a diferencia de la replicación basada en registros binarios, en la que cada nodo del clúster de base de datos mantiene sus propios archivos binlog, con su propia numeración. Mantener archivos binlog y numeración separados puede convertirse en un problema en caso de falla o tiempo de inactividad planificado, ya que se interrumpe la continuidad del binlog y falla la replicación basada en binlog.
La replicación basada en GTID admite conmutaciones por error, clústeres de bases de datos autoadministradas y sigue funcionando independientemente de los cambios en el clúster de base de datos.
Las características clave de la replicación basada en GTID en Datastream son las siguientes:
- Se pueden seleccionar todas las bases de datos o las bases de datos específicas de una fuente de MySQL determinada, así como todas las tablas de las bases de datos o tablas específicas.
- Se replican todos los datos históricos.
- Se replican todos los cambios del lenguaje de manipulación de datos (DML), como las inserciones, las actualizaciones y las eliminaciones de las bases de datos y las tablas especificadas.
- Solo se replican los cambios confirmados.
- Compatibilidad sencilla con conmutaciones por error.
Cambia de la replicación basada en binlog a la replicación basada en GTID
Si deseas actualizar tu transmisión y cambiar de la replicación basada en binlog a la replicación basada en GTID sin necesidad de realizar un reabastecimiento, sigue estos pasos:
- Asegúrate de que se cumplan todos los requisitos para la replicación basada en GTID. Para obtener más información, consulta Configura una base de datos de MySQL de origen.
- De forma opcional, crea y ejecuta una transmisión de prueba basada en GTID. Para obtener más información, consulta Crea una transmisión.
- Crea una transmisión basada en GTID. No la inicies todavía.
- Detén el tráfico de la aplicación a la base de datos de origen.
- Pausa la transmisión existente basada en binlog. Para obtener más información, consulta Pausa la transmisión.
- Espera unos minutos para asegurarte de que Datastream se haya puesto al día con la base de datos. Puedes verificar esto con las métricas de la pestaña Monitoring en la página Detalles de la transmisión. Los valores de Actualidad de los datos y Capacidad de procesamiento deben ser
0. - Inicia la transmisión basada en GTID. Para obtener más información, consulta Inicia la transmisión.
- Reanuda el tráfico a la base de datos de origen.
Si realizar un reabastecimiento no es un problema, puedes truncar tus tablas en BigQuery, borrar la transmisión anterior y comenzar una nueva con reabastecimiento. Para obtener más información sobre la administración del reabastecimiento, consulta Administra el reabastecimiento de los objetos de una transmisión.
Versiones
Datastream admite las siguientes versiones de la base de datos de MySQL:
- MySQL 5.6
- MySQL 5.7
- MySQL 8.0
MySQL 8.4 (solo compatible con la replicación basada en GTID)
Datastream admite los siguientes tipos de bases de datos de MySQL:
- MySQL autoalojado
- Cloud SQL para MySQL
- Amazon RDS para MySQL
- Amazon Aurora MySQL
- MariaDB
- Alibaba Cloud PolarDB
- Percona Server para MySQL
Prácticas recomendadas
En esta sección, se describen las prácticas recomendadas para configurar tu fuente de MySQL para usarla con Datastream.
Usa GTID para configuraciones de alta disponibilidad
Si tu fuente de MySQL de producción usa réplicas o cualquier otra configuración de alta disponibilidad, usa la replicación basada en GTID.
La replicación basada en archivos binlog y posiciones puede interrumpirse durante una conmutación por error de la base de datos porque, cuando falla la instancia principal, la nueva instancia principal tiene un historial de binlog diferente. En ese caso, Datastream pierde su posición y no puede reanudarse.
GTID asigna un ID único a cada transacción en toda la topología de replicación (instancia principal y réplicas). Después de una conmutación por error, Datastream puede reanudarse desde el último GTID registrado en la nueva instancia principal, sin necesidad de conocer el archivo binlog ni la posición.
Recomendación: Para cualquier fuente de MySQL de producción con una réplica o configuración de alta disponibilidad, es obligatorio usar el método de CDC de GTID para la replicación de datos resistente y confiable.
Ajusta correctamente el tamaño de tu réplica de lectura
Si configuras Datastream para que se replique desde una réplica de lectura, puedes encontrar un retraso doble, que es una combinación del retraso de replicación de MySQL (de la instancia principal a la réplica) y el retraso de replicación de Datastream (de la réplica al destino). Las réplicas de lectura suelen aprovisionarse con menos recursos (CPU, RAM, IOPS) que las instancias principales para ahorrar costos, lo que puede hacer que se retrasen con respecto a la instancia principal durante los períodos de escritura alta.
Recomendación: Cuando uses una réplica de lectura como fuente para Datastream, aprovisiónala con recursos comparables a la instancia principal, de modo que la réplica pueda mantener el ritmo de la capacidad de procesamiento de escritura de la instancia principal.
Aumenta la capacidad de procesamiento para el método de CDC de binlog
Si usas la replicación basada en binlog y experimentas una latencia alta debido a grandes volúmenes de escritura de origen que generan archivos binlog más rápido de lo que puede procesar una sola tarea, aumenta la capacidad de procesamiento ajustando el parámetro maxConcurrentCdcTasks.
Este parámetro controla la cantidad de tareas de CDC que ejecuta una transmisión en paralelo. Aumentar el valor de este parámetro permite que Datastream procese más archivos binlog de forma simultánea.
Recomendación: Para determinar el valor adecuado para la actualidad de los datos, supervisa la tasa de generación de binlog de tu servidor MySQL durante las horas pico. Para ello, observa la tasa a la que se crean y rotan los archivos binlog nuevos en el directorio de datos de MySQL o usa herramientas de supervisión de MySQL para hacer un seguimiento del crecimiento de los registros binarios. Si, por ejemplo, tu fuente genera 10 archivos binlog por minuto durante las horas pico, establecer maxConcurrentCdcTasks en un valor como 10-15 permite que Datastream procese estos archivos en paralelo, lo que evita una acumulación.
Puedes aumentar maxConcurrentCdcTasks hasta el valor máximo admitido de 50, siempre que la carga en la base de datos de origen permanezca bajo control.
Para obtener más información, consulta
Controles de simultaneidad de transmisión.
Ajusta correctamente el tamaño del parámetro max_allowed_packet
El parámetro de configuración max_allowed_packet predeterminado en MySQL (por ejemplo, 16 MB a 64 MB) puede ser demasiado pequeño. Si una sola fila con campos grandes de tipo BLOB, JSON o TEXT, o una sola transacción grande supera este tamaño, MySQL finaliza la conexión de Datastream, lo que hace que la transmisión falle con errores como Packet for query is too large o Got a packet bigger than
'max_allowed_packet' bytes.
Recomendación: Establece el parámetro max_allowed_packet en tu servidor MySQL en su valor máximo permitido de 1 G. Esto garantiza que el servidor pueda controlar cualquier fila o transacción grande que Datastream necesite leer del binlog.
Limitaciones conocidas
Entre las limitaciones conocidas para usar la base de datos de MySQL como fuente, se incluyen las siguientes:
- Las transmisiones se limitan a 10,000 tablas.
- Las tablas replicadas deben usar el motor de almacenamiento
InnoDB. No se admiten las tablas que usan el motor de almacenamientoMyISAMy fallan en la validación de la transmisión. - No se pueden reabastecer las tablas que tienen una clave primaria definida como
INVISIBLE. - No se puede reabastecer una tabla que tenga más de 500 millones de filas, a menos que se cumplan las siguientes condiciones:
- La tabla tiene un índice único.
- Ninguna de las columnas del índice puede aceptar valores nulos.
- El índice no es descendente.
- Todas las columnas del índice se incluyen en la transmisión.
- Datastream recupera periódicamente el esquema más reciente de la fuente a medida que se procesan los eventos. Si cambia un esquema, Datastream detecta el cambio y activa una recuperación del esquema. Sin embargo, es posible que algunos eventos se procesen de forma incorrecta o se descarten entre las recuperaciones del esquema, lo que puede causar discrepancias en los datos.
- No todos los cambios en el esquema de origen se pueden detectar automáticamente, en cuyo caso pueden ocurrir daños en los datos. Los siguientes cambios de esquema pueden causar daños en los datos o que no se puedan procesar los eventos en etapas posteriores:
- Descarta columnas
- Agregar columnas en medio de una tabla
- Cambiar el tipo de datos de una columna
- Reordenar las columnas
- Descarta tablas (relevante si la misma tabla se vuelve a crear con datos nuevos agregados)
- Truncar tablas
- Datastream no admite la replicación de vistas.
- Datastream no admite columnas de tipos de datos espaciales, por ejemplo,
GEOMETRY,POINT,LINESTRING,POLYGON. Los valores de estas columnas se reemplazan por valoresNULL. - Datastream no admite el valor cero (
0000-00-00 00:00:00) en columnas de los tipos de datosDATETIME,DATEoTIMESTAMP. El valor cero se reemplaza por el valorNULL. - Datastream no admite la replicación de filas que incluyen los siguientes valores en columnas
JSON:DECIMAL,NEWDECIMAL,TIME,TIME2DATETIME,DATETIME2,DATE,TIMESTAMPoTIMESTAMP2. Se descartan los eventos que contienen esos valores. - Datastream no admite la compresión de transacciones de registros binarios .
- Datastream no admite cadenas de certificados SSL en los perfiles de conexión de MySQL de origen. Solo se admiten certificados únicos con codificación PEM x509.
- Datastream no admite operaciones en cascada:
ON UPDATE CASCADEyON DELETE CASCADE. Esos eventos no se escriben en el registro binario y, como resultado, no se propagan al destino. Como solución alternativa, puedes reemplazar las operaciones en cascada por activadores de base de datos. - Datastream no admite operaciones
DROP PARTITION. Esas operaciones son solo de metadatos y no se replican. No se ven afectados otros eventos y la transmisión se ejecuta correctamente. - Es posible que experimentes problemas de conectividad cuando repliques tablas
FEDERATED. Si eso sucede, quita todas las tablasFEDERATEDde la configuración de la base de datos de origen y aumenta los valores de los parámetrosconnect_timeout,net_read_timeoutymax_allowed_packetpara mitigar los problemas de tiempo de espera durante el reabastecimiento. - Las instancias de Cloud SQL Enterprise Plus deben usar la replicación basada en GTID porque están sujetas a un mantenimiento con un tiempo de inactividad casi nulo. La replicación basada en registros binarios se interrumpe en las conmutaciones por error, por lo que recomendamos usar la replicación basada en GTID para casos de uso de alta disponibilidad.
- Para las versiones 8.0 y posteriores de MySQL, la variable
binlog_row_value_optionsdebe establecerse en un valor vacío. Este es el valor predeterminado para la mayoría de las versiones, pero para algunas, por ejemplo, las fuentes de MySQL en Oracle Cloud Infrastructure (OCI), debes configurarlo de forma explícita. Para obtener más información, consulta Configura una base de datos de MySQL autoadministrada. - Limitaciones de MariaDB:
- La replicación basada en GTID no es compatible con MariaDB. Debes configurar las transmisiones de MariaDB para que usen la replicación basada en binlog.
- Para las versiones 11.4 a 12.2 de MariaDB, debes habilitar la variable de sistema
binlog_legacy_event_posen la base de datos de origen para garantizar la compatibilidad con Datastream.
Limitaciones adicionales para la replicación basada en GTID
- La recuperación de transmisiones que usan la replicación basada en GTID solo está disponible cuando se usa la API de Datastream.
- No se admite la creación de tablas a partir de otras tablas con las instrucciones
CREATE TABLE ... SELECT. - Datastream no admite GTID etiquetados.
- Para conocer las restricciones de MySQL que se aplican a la replicación basada en GTID, consulta la documentación de MySQL.
¿Qué sigue?
- Obtén información para configurar una fuente de MySQL para usarla con Datastream.