Conectar un data warehouse de MySQL / MariaDB
Esta guía le acompaña al conectar una base de datos MySQL o MariaDB a Saiku Cloud, de principio a fin. Cinco minutos si su data warehouse ya es público; diez si necesita configurar un usuario de solo lectura.
Impacto en niveles: todos los niveles de Saiku Cloud (Starter, Team, Business) admiten BYOC con MySQL.
Driver: Saiku Cloud incluye MariaDB Connector/J, que habla los protocolos de transporte tanto de MySQL como de MariaDB. Puede pegar tanto jdbc:mysql://... como jdbc:mariadb://... y nos encargamos del resto.
Lo que necesitará
- Una instancia MySQL 5.7+ o MariaDB 10.3+ accesible desde una dirección IPv4 pública. Los clientes de Saiku Cloud alojado en la nube en Starter/Team/Business necesitan esto — los clientes Enterprise que tienen una configuración de VPC peering privada obtienen accesibilidad de red privada en su lugar.
- Acceso de administrador a su data warehouse para poder crear un usuario de solo lectura (o las credenciales de un usuario de solo lectura existente).
- Cinco minutos.
Paso 1 — Permitir nuestra IP de egreso
Todas las consultas de Saiku Cloud a su data warehouse provienen de una única IP estática:
87.99.153.244Añada esta al firewall / grupo de seguridad / lista de permitidos de red de su data warehouse antes de probar la conexión. Lugares comunes para la lista de permitidos:
- AWS RDS / Aurora MySQL: Regla entrante del grupo de seguridad de la VPC → puerto 3306 → origen
87.99.153.244/32. - Google Cloud SQL: Connectivity → Authorized networks → añada
87.99.153.244/32. - Azure Database for MySQL: Networking → Firewall rules → añada una regla que permita de
87.99.153.244a87.99.153.244. - PlanetScale: Allowed IPs en la configuración de la base de datos → añada
87.99.153.244. PlanetScale también requiere?sslMode=VERIFY_IDENTITYen la URL JDBC — consulte el Paso 3. - Autoalojado:
bind-address = 0.0.0.0(o su NIC pública) enmy.cnf, la regla de firewall público delante, y un patrón de grant a nivel de host que permita el rol desde87.99.153.244.
La IP es estable — sobrevive a reinicios y reconstrucciones de imagen. Nos comprometemos a al menos 30 días de aviso antes de cualquier rotación. Política completa: nuestro compromiso de estabilidad de IP de egreso.
Paso 2 — Cree un usuario de solo lectura en MySQL
Saiku Cloud solo lee de su data warehouse — nunca escribe, nunca altera schemas, nunca crea objetos. La forma de mínimo privilegio es un usuario de solo lectura dedicado:
-- As a MySQL user with the GRANT OPTION privilege:CREATE USER 'saiku_read'@'%' IDENTIFIED BY 'pick-something-strong-here';
-- Grant SELECT on the database(s) you want Saiku to see. Adjust-- 'analytics' to the database name in your JDBC URL.GRANT SELECT ON analytics.* TO 'saiku_read'@'%';
-- Reload the privilege tables.FLUSH PRIVILEGES;Unas notas:
- El wildcard de host
'%'permite al usuario conectarse desde cualquier IP. Si su MySQL está bloqueado a IPs de origen específicas a nivel de usuario (además del firewall), use'saiku_read'@'87.99.153.244'en su lugar. - Si sus datos están repartidos en varias bases de datos, repita el bloque
GRANT SELECTpara cada una. - Aurora MySQL trata los grants de forma ligeramente diferente — consulte los documentos de Aurora para la receta equivalente.
- PlanetScale usa su propio sistema de roles — cree un rol “read-only” en la consola de PlanetScale y capture el usuario + contraseña generados en lugar de ejecutar
CREATE USER.
Paso 3 — Construya la URL JDBC
La forma:
jdbc:mysql://<host>:<port>/<database>?sslMode=REQUIRED&serverTimezone=UTCDos parámetros que vale la pena entender (el placeholder del asistente incluye ambos):
serverTimezone=UTC
sslMode=REQUIRED
Fuerza TLS para la conexión JDBC. La mayoría de los servicios MySQL gestionados imponen TLS del lado del servidor de todas formas; REQUIRED hace que el cliente rechace el fallback a texto plano.
Variantes:
sslMode=REQUIRED— el certificado del servidor es de confianza pero no se verifica el hostname. Buen valor por defecto.sslMode=VERIFY_CA— verifica que el certificado del servidor encadena a una CA en la que confiamos. Funciona para servicios gestionados que usan CAs públicas.sslMode=VERIFY_IDENTITY— también verifica que el hostname del certificado del servidor coincide con el host de la URL JDBC. Requerido para PlanetScale.sslMode=DISABLED— texto plano. No lo haga.
Ejemplos concretos
- AWS RDS MySQL:
jdbc:mysql://mydb.abc123.us-east-1.rds.amazonaws.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC - Aurora MySQL: Misma forma; use el endpoint writer del cluster.
- Google Cloud SQL:
jdbc:mysql://1.2.3.4:3306/sales?sslMode=REQUIRED&serverTimezone=UTC(use la IP pública de la consola de Cloud SQL) - Azure Database for MySQL:
jdbc:mysql://mydb.mysql.database.azure.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC - PlanetScale:
jdbc:mysql://aws.connect.psdb.cloud:3306/analytics?sslMode=VERIFY_IDENTITY&serverTimezone=UTC - MariaDB: Use
jdbc:mariadb://...si su servicio usa parámetros de URL específicos de MariaDB; en caso contrariojdbc:mysql://también funciona contra MariaDB. - MySQL/MariaDB autoalojado:
jdbc:mysql://db.yourcompany.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC
Paso 4 — Conecte mediante el asistente de Saiku Cloud
-
Inicie sesión en
https://cloud.saiku.bi/. -
Vaya a Conexiones en la barra lateral izquierda.
-
En 1. Elegir tipo de data warehouse, haga clic en el tile MySQL / MariaDB.
-
Rellene:
- URL JDBC — la URL del Paso 3.
- Username —
saiku_read(o como haya llamado al usuario en el Paso 2). - Password — la contraseña del Paso 2.
-
Haga clic en Probar conexión.
Si todo está bien conectado, verá un banner verde de resultado: ✓ Connection successful más la versión de MySQL/MariaDB detectada. Continúe con el Paso 5.
Si ve un banner rojo de resultado, consulte Solución de problemas más abajo.
Paso 5 — Guarde la conexión
Tras una prueba exitosa, el asistente muestra una sección 3. Guardar conexión. Rellene:
- Contraseña (vuelva a introducir para guardar) — la misma contraseña con la que probó. No almacenamos la contraseña del formulario de prueba para evitar que una credencial viaje por el estado de la página.
- Etiqueta — un nombre legible como
Production warehouseoMarketing analytics. Se muestra en la lista de conexiones + el diseñador de cubos.
Haga clic en Guardar conexión. Le redirigimos al diseñador de schemas.
Solución de problemas
✗ Connection failed (HOST_UNREACHABLE) o (TIMEOUT)
No pudimos alcanzar el host en el puerto que especificó. Causas más comunes:
- Firewall / lista de permitidos — el Paso 1 no se hizo o no se hizo para la IP correcta. Confirme que
87.99.153.244/32está en la lista de permitidos de su data warehouse + aplicado. - DNS — el hostname en la URL JDBC no resuelve, o resuelve a una IP privada. Verifique desde su portátil:
nslookup <host>. Nos negamos a conectar a direcciones RFC1918 / loopback / link-local por razones de protección frente a SSRF —HOST_DENIED(noHOST_UNREACHABLE) es la superficie en ese caso. - Puerto incorrecto — MySQL por defecto usa 3306. Algunos servicios gestionados usan un puerto personalizado (el endpoint primario de PlanetScale es 3306, pero algunas regiones ponen un balanceador en 443 — consulte la página de connection-strings en su consola).
✗ Connection failed (AUTH_FAILED)
Error 1045 de MySQL — el usuario o la contraseña son incorrectos. El asistente intencionadamente no distingue entre “usuario incorrecto” y “contraseña incorrecta” — eso es defensa contra ataques de credential-stuffing.
- Vuelva a comprobar el nombre de usuario. Los nombres de usuario de MySQL SON sensibles a mayúsculas/minúsculas en configuraciones estándar.
- Confirme que el usuario está permitido desde
'%'o específicamente desde'87.99.153.244'. La forma más común de este fallo:CREATE USER 'saiku_read'@'localhost'solo permite conexiones locales; Saiku Cloud conecta desde87.99.153.244, que no coincide conlocalhost. - Pruebe a conectar desde su portátil con
mysql -h <host> -u saiku_read -p <database>para confirmar que las credenciales funcionan fuera de Saiku.
✗ Connection failed (DATABASE_NOT_FOUND)
Error 1049 de MySQL — el host acepta sus credenciales pero el nombre de base de datos en la URL JDBC no existe. Verifíquelo:
-- From mysql CLI, as any user with login:SHOW DATABASES;Los timestamps se desplazan algunas horas extrañas tras importar
Olvidó serverTimezone=UTC. Añádalo a la URL JDBC (Paso 3), pruebe, guarde. Los cubos existentes construidos contra la zona horaria antigua (incorrecta) necesitarán volverse a renderizar.
El cubo se renderiza pero con 'NULL' (literal de cadena) en lugar de NULL reales
Su MySQL está en modo SQL ANSI + el XML del schema tiene nullValue="" configurado. O:
- Cambie el servidor a modo
TRADITIONAL(SET GLOBAL sql_mode = 'TRADITIONAL';), O - Edite el XML del schema para usar
nullValue="\\N"según la guía específica de MySQL de Mondrian.
Cualquier otra cosa
Haga una captura de pantalla del asistente con el banner rojo de resultado visible (línea Kind: ... en particular) y envíela a support@saiku.bi.
Enterprise: red privada
Para clientes Enterprise que tienen una configuración de red privada, la regla de IP de egreso se reemplaza por VPC peering o PrivateLink a su instancia MySQL. El flujo del asistente de conexión es por lo demás idéntico. Contacte con su equipo de cuenta para aprovisionar el peering.
Pruebe con FoodMart
¿Quiere probar Saiku Cloud con este dialecto antes de conectar sus propios datos? Descargue el dataset de muestra FoodMart empaquetado para MySQL: