Controladores

Controlador MySQL

Esta página describe la implementación del controlador MySQL en Gigantics y cómo los parámetros de conexión se corresponden con los campos de la interfaz.

Parámetros de conexión

Campo UIImplementación técnicaDescripciónObligatorioValor por defecto
Hosthost en la configuración de mysql2Nombre o IP del servidor MySQLSílocalhost
Puertoport en la configuraciónPuerto donde escucha MySQLSí3306 (de driverPorts)
Base de datosdatabaseNombre de la base a conectarSí–
UsuariouserUsuario para autenticaciónSí–
ContraseñapasswordContraseña del usuarioSí–

Detalles técnicos

El controlador utiliza la biblioteca mysql2. Los parámetros anteriores se pasan tal cual al objeto de configuración.

Si se habilita un túnel SSH, primero se crea el túnel y después la conexión MySQL.

Opciones de autenticación

MySQL sólo requiere usuario y contraseña.

TipoCampos UIDescripción
Ninguno–Deshabilita autenticación (no recomendado)
ContraseñaUsuario / ContraseñaAutenticación estándar
Gestor de contraseñasCampos específicosObtiene credenciales de un gestor externo

Soporte de túnel SSH

El controlador admite túneles SSH para acceder a bases detrás de firewalls o redes privadas. Consulta la página de Túnel SSH para más información.

Puntos de la API que lo usan

  • Creación de Tap (descubrimiento de origen)
  • Creación de Sink (destino de datos anonimizados)
  • Ejecución de Pipelines (extracción y carga)

Tablas grandes y reanudación

Esta sección recoge solo lo propio de MySQL. Cómo funcionan la reanudación, los rangos paralelos y las estimaciones de filas en todos los controladores se explica en Bases de datos grandes.

Lectura

  • Las tablas se leen por bloques ordenados por la clave primaria, de modo que un job que se detiene se reanuda tras la última clave que guardó. Solo se usa la clave PRIMARY: una tabla sin ella se lee con un único cursor y empieza de nuevo si el job se detiene.
  • Todas las columnas de la clave primaria deben ser de tipo entero o de texto (char, varchar, text). No se usa una clave con alguna columna ENUM o SET (MySQL las ordena por posición, no por texto), ni con columnas decimal, numeric, float, double o de fecha u hora. Las claves BIGINT mayores que 2^53 se comparan con exactitud.

Rangos paralelos y estimación de filas

  • Solo se cortan rangos para una clave de una única columna entera, repartida a partes iguales entre su mínimo y su máximo. Las tablas con clave compuesta o de texto se leen en un único flujo, y se pueden reanudar igualmente.
  • La estimación de filas es TABLE_ROWS de INFORMATION_SCHEMA.TABLES, que en InnoDB es aproximada.

Carga

  • Cada sesión que carga datos ejecuta SET FOREIGN_KEY_CHECKS=0, así que las tablas se pueden cargar en cualquier orden. El ajuste solo dura lo que la sesión: si un job muere no queda nada desactivado. MySQL no comprueba después las filas cargadas contra las foreign keys.
  • La opción truncate ejecuta TRUNCATE TABLE con la comprobación de foreign keys desactivada, y DELETE si falla.
  • Los triggers siguen activos.

Permisos

Para un sink MySQL con la opción truncate, el usuario de base de datos necesita el privilegio DROP sobre las tablas, que MySQL exige para TRUNCATE TABLE.

Parámetros personalizados (YAML)

Se pueden definir parámetros avanzados en YAML para afinar la conexión, el pool, SSL, etc.

Parámetros de conexión

# Configuración SSL
ssl:
  rejectUnauthorized: false
  ca: |
    -----BEGIN CERTIFICATE-----
    # Contenido CA
    -----END CERTIFICATE-----
  key: |
    -----BEGIN PRIVATE KEY-----
    # Clave privada cliente
    -----END PRIVATE KEY-----
  cert: |
    -----BEGIN CERTIFICATE-----
    # Certificado cliente
    -----END CERTIFICATE-----
  ciphers: "ECDHE-RSA-AES256-SHA:AES256-SHA"
  minVersion: "TLSv1.2"
  maxVersion: "TLSv1.3"

# Autenticación multifactor
password1: primera_clave
password2: codigo_otp
password3: datos_biometricos

# Opciones avanzadas
connectTimeout: 10000
charset: "UTF8MB4_UNICODE_CI"
compress: true
multipleStatements: false
timezone: "+00:00"
enableKeepAlive: true
keepAliveInitialDelay: 10000
supportBigNumbers: true
bigNumberStrings: true
dateStrings: false

Configuración del pool

connectionLimit: 10
maxIdle: 10
idleTimeout: 60000
queueLimit: 0
waitForConnections: true

Ejemplos

SSL estricto

ssl:
  rejectUnauthorized: true
  ca: ${file:/ruta/ca.pem}
  cert: ${file:/ruta/cliente.pem}
  key: ${file:/ruta/clave.pem}

Soporte de números grandes

supportBigNumbers: true
bigNumberStrings: true
decimalNumbers: true
timezone: "UTC"
connectionLimit: 15
idleTimeout: 30000