En esta sección, se incluye información sobre lo siguiente:
- El comportamiento de Datastream en el manejo de 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
- Limitaciones conocidas del uso de 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 se replican datos con Datastream. Cuando transfieres datos desde bases de datos de MySQL, puedes usar la replicación basada en binlogs o la replicación basada en identificadores de transacciones globales (GTID). Seleccionas tu método de CDC cuando creas una transmisión.
Replicación basada en binlogs
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 que contienen 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 binlogs en Datastream son las siguientes:
- Se pueden seleccionar todas las bases de datos o 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 global (GTID)
Datastream también admite la replicación basada en identificadores globales (GTID).
El identificador de transacciones global (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 para todos los servidores en una topología de replicación determinada, a diferencia de la replicación basada en el registro binario, en la que cada nodo del clúster de la base de datos mantiene sus propios archivos de registro binario, con su propia numeración. Mantener archivos binlog separados y numerados 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 y clústeres de bases de datos autoadministradas, y sigue funcionando independientemente de los cambios en el clúster de bases 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 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 perfecta con las conmutaciones por error
Cómo cambiar de la replicación basada en registros binarios a la replicación basada en GTID
Si deseas actualizar tu transmisión y cambiar de la replicación basada en binlogs 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 manera opcional, crea y ejecuta una transmisión basada en el GTID de prueba. Para obtener más información, consulta Crea una transmisión.
- Crea una transmisión basada en GTID. No lo 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 binlogs. Para obtener más información, consulta Cómo pausar la transmisión.
- Espera unos minutos para asegurarte de que Datastream se haya actualizado con la base de datos. Puedes verificarlo con las métricas de la pestaña Monitoring en la página Detalles del flujo de tu flujo. Los valores de Actualidad de los datos y Rendimiento deben ser
0. - Inicia la transmisión basada en GTID. Para obtener más información, consulta Cómo iniciar 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 el reabastecimiento. Para obtener más información sobre cómo administrar el 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 la posición y el archivo binlog puede interrumpirse durante una conmutación por error de la base de datos, ya que, 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 reanudar la transmisión.
El GTID asigna un ID único a cada transacción en toda tu topología de replicación (primaria 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 una configuración de alta disponibilidad, es obligatorio usar el método de CDC basado en GTID para lograr una replicación de datos resiliente y confiable.
Redimensiona correctamente tu réplica de lectura
Si configuras Datastream para que realice la replicación desde una réplica de lectura, es posible que se produzca 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 los de la instancia principal para que la réplica pueda mantener el rendimiento de escritura de la instancia principal.
Aumenta la capacidad de procesamiento para el método CDC de binlog
Si utilizas la replicación basada en binlogs y experimentas una latencia alta debido a que los grandes volúmenes de escritura de origen generan archivos de binlog más rápido de lo que una sola tarea puede procesar, 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 de registro binario de forma simultánea.
Recomendación: Para determinar el valor adecuado para la actualidad de los datos, supervisa la tasa de generación de binlogs de tu servidor de MySQL durante las horas pico. Para ello, observa la velocidad a la que se crean y rotan los archivos binlog nuevos en el directorio de datos de MySQL, o bien usa las herramientas de supervisión de MySQL para hacer un seguimiento del crecimiento de los registros binarios. Por ejemplo, si tu fuente genera 10 archivos de registro binario 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 transmisiones.
Cómo establecer el tamaño correcto del parámetro max_allowed_packet
El parámetro de configuración max_allowed_packet predeterminado en MySQL (por ejemplo, de 16 a 64 MB) podría 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 provoca 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 del uso de la base de datos de MySQL como fuente, se incluyen las siguientes:
- Las transmisiones se limitan a 10,000 tablas.
- Las tablas que tienen una clave primaria definida como
INVISIBLEno se pueden reabastecer. - No se puede completar 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 admite 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
- Borrar tablas (relevante si luego se vuelve a crear la misma tabla con datos nuevos)
- Truncar tablas
- Datastream no admite la replicación de vistas.
- Datastream no admite columnas de tipos de datos espaciales. Los valores de estas columnas se reemplazan por valores de
NULL. - Datastream no admite el valor cero (
0000-00-00 00:00:00) en las 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 las columnas
JSON:DECIMAL,NEWDECIMAL,TIME,TIME2,DATETIME,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 la eliminación en cascada. Estos eventos no se escriben en el registro binario y, como resultado, no se propagan al destino.
- Datastream no admite operaciones de
DROP PARTITION. Estas operaciones son solo de metadatos y no se replican. Otros eventos no se ven afectados y la transmisión se ejecuta correctamente. - Es posible que experimentes problemas de conectividad cuando repliques tablas de
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 los casos de uso de alta disponibilidad.
- Para las versiones de MySQL 8.0 y posteriores, 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 establecerlo de forma explícita. Para obtener más información, consulta Configura una base de datos de MySQL autoadministrada.
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 GTIDs 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?
- Aprende a configurar una fuente de MySQL para usarla con Datastream.