Conectar um data warehouse MySQL / MariaDB
Este guia mostra como conectar um banco MySQL ou MariaDB ao Saiku Cloud, de ponta a ponta. Cinco minutos se o seu data warehouse já é público; dez se precisar configurar um usuário somente leitura.
Impacto no tier: todos os tiers do Saiku Cloud (Starter, Team, Business) suportam BYOC do MySQL.
Driver: o Saiku Cloud traz o MariaDB Connector/J, que fala os protocolos de transporte do MySQL e do MariaDB. Você pode colar jdbc:mysql://... ou jdbc:mariadb://... e nós cuidamos do resto.
O que você vai precisar
- Uma instância MySQL 5.7+ ou MariaDB 10.3+ alcançável por um endereço IPv4 público. Clientes do Saiku Cloud hospedado nos tiers Starter/Team/Business precisam disso — clientes Enterprise rodando em VPC peering privado ganham acessibilidade por rede privada.
- Acesso admin ao seu data warehouse para criar um usuário somente leitura (ou as credenciais de um usuário somente leitura existente).
- Cinco minutos.
Passo 1 — Allowlist do nosso IP de egress
Todas as consultas do Saiku Cloud para o seu data warehouse saem de um único IP estático:
87.99.153.244Adicione isso ao firewall / security group / allowlist de rede do seu data warehouse antes de testar a conexão. Lugares comuns de allowlist:
- AWS RDS / Aurora MySQL: regra de entrada do security group da VPC → porta 3306 → origem
87.99.153.244/32. - Google Cloud SQL: Connectivity → Authorized networks → adicione
87.99.153.244/32. - Azure Database for MySQL: Networking → Firewall rules → adicione uma regra permitindo
87.99.153.244para87.99.153.244. - PlanetScale: IPs permitidos nas configurações do banco → adicione
87.99.153.244. O PlanetScale também exige?sslMode=VERIFY_IDENTITYna URL JDBC — veja o passo 3. - Self-hosted:
bind-address = 0.0.0.0(ou sua NIC pública) emmy.cnf, a regra de firewall público na frente e um grant pattern em nível de host que permita o papel de87.99.153.244.
O IP é estável — sobrevive a reboots e reconstruções de imagem. Nos comprometemos a dar ao menos 30 dias de aviso antes de qualquer rotação. Política completa: nosso compromisso de estabilidade do IP de egress.
Passo 2 — Crie um usuário somente leitura no MySQL
O Saiku Cloud só lê do seu data warehouse — nunca escreve, nunca altera schemas, nunca cria objetos. O formato de menor privilégio é um usuário somente leitura 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;Algumas notas:
- O wildcard
'%'permite que o usuário conecte de qualquer IP. Se o seu MySQL é restrito a IPs de origem específicos no nível do usuário (além do firewall), use'saiku_read'@'87.99.153.244'. - Se seus dados estão espalhados por múltiplos bancos, repita o bloco
GRANT SELECTpara cada um. - Aurora MySQL trata grants de forma um pouco diferente — veja os docs do Aurora para a receita equivalente.
- PlanetScale usa seu próprio sistema de papéis — crie um papel “read-only” no console do PlanetScale e capture o usuário + senha gerados em vez de rodar
CREATE USER.
Passo 3 — Monte a URL JDBC
O formato:
jdbc:mysql://<host>:<port>/<database>?sslMode=REQUIRED&serverTimezone=UTCDois parâmetros que vale a pena entender (o placeholder do wizard inclui ambos):
serverTimezone=UTC
sslMode=REQUIRED
Força TLS para a conexão JDBC. A maioria dos serviços MySQL gerenciados já força TLS do lado do servidor; REQUIRED faz o cliente rejeitar fallback em plaintext.
Variantes:
sslMode=REQUIRED— o cert do servidor é confiável mas não verificado por hostname. Bom default.sslMode=VERIFY_CA— verifica que o cert do servidor cadeia até uma CA em que confiamos. Funciona para serviços gerenciados que usam CAs públicas.sslMode=VERIFY_IDENTITY— também verifica que o hostname do cert do servidor bate com o host da URL JDBC. Obrigatório para PlanetScale.sslMode=DISABLED— plaintext. Não use.
Exemplos concretos
- AWS RDS MySQL:
jdbc:mysql://mydb.abc123.us-east-1.rds.amazonaws.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC - Aurora MySQL: Mesmo formato; use o endpoint writer do cluster.
- Google Cloud SQL:
jdbc:mysql://1.2.3.4:3306/sales?sslMode=REQUIRED&serverTimezone=UTC(use o IP público do console do 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://...se o seu serviço usa parâmetros de URL específicos do MariaDB; senãojdbc:mysql://funciona contra MariaDB também. - MySQL/MariaDB self-hosted:
jdbc:mysql://db.yourcompany.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC
Passo 4 — Conecte pelo wizard do Saiku Cloud
-
Faça login em
https://cloud.saiku.bi/. -
Vá em Conexões na barra lateral esquerda.
-
Em 1. Escolha o tipo de data warehouse, clique no tile MySQL / MariaDB.
-
Preencha:
- URL JDBC — a URL do passo 3.
- Usuário —
saiku_read(ou o que tiver nomeado o usuário no passo 2). - Senha — a senha do passo 2.
-
Clique em Testar conexão.
Se tudo estiver corretamente ligado, você verá um banner verde de resultado: ✓ Connection successful mais a versão detectada do MySQL/MariaDB. Siga para o passo 5.
Se você vir um banner vermelho de resultado, veja Solução de problemas abaixo.
Passo 5 — Salve a conexão
Após um teste bem-sucedido, o wizard renderiza uma seção 3. Salvar conexão. Preencha:
- Senha (digite de novo para salvar) — a mesma senha que você testou. Não armazenamos a senha do formulário de teste para evitar trafegar uma credencial pelo estado da página.
- Rótulo — um nome legível como
Production warehouseouMarketing analytics. Mostrado na lista de conexões + designer de cubo.
Clique em Salvar conexão. Vamos te redirecionar para o schema designer.
Solução de problemas
✗ Connection failed (HOST_UNREACHABLE) ou (TIMEOUT)
Não conseguimos alcançar o host na porta que você especificou. Causas mais comuns:
- Firewall / allowlist — o passo 1 não foi feito ou não foi feito para o IP certo. Confirme que
87.99.153.244/32está na allowlist do seu data warehouse + aplicado. - DNS — o hostname na URL JDBC não resolve, ou resolve para um IP privado. Verifique do seu laptop:
nslookup <host>. Nos recusamos a conectar a endereços RFC1918 / loopback / link-local por razões de proteção anti-SSRF —HOST_DENIED(nãoHOST_UNREACHABLE) é o resultado nesse caso. - Porta errada — o MySQL default é 3306. Alguns serviços gerenciados usam uma porta custom (o endpoint primário do PlanetScale é 3306, mas algumas regiões fronteam um load-balancer na 443 — confira a página de connection-strings no console deles).
✗ Connection failed (AUTH_FAILED)
Erro MySQL 1045 — usuário ou senha errados. O wizard intencionalmente não distingue “usuário errado” de “senha errada” — isso é defesa contra ataques de credential-stuffing.
- Confira o usuário. Nomes de usuário do MySQL SÃO sensíveis a maiúsculas em configurações padrão.
- Confirme que o usuário tem permissão a partir de
'%'ou especificamente de'87.99.153.244'. O formato mais comum dessa falha:CREATE USER 'saiku_read'@'localhost'só permite conexões locais; o Saiku Cloud conecta de87.99.153.244, que não bate comlocalhost. - Tente conectar do seu laptop com
mysql -h <host> -u saiku_read -p <database>para confirmar que as credenciais funcionam fora do Saiku.
✗ Connection failed (DATABASE_NOT_FOUND)
Erro MySQL 1049 — o host aceita suas credenciais, mas o nome do banco na URL JDBC não existe. Verifique:
-- From mysql CLI, as any user with login:SHOW DATABASES;Timestamps se deslocam por um número estranho de horas após o import
Você esqueceu serverTimezone=UTC. Adicione à URL JDBC (passo 3), teste, salve. Cubos existentes construídos contra o timezone antigo (errado) precisarão de re-renderização.
O cubo renderiza mas com 'NULL' (literal string) em vez de NULLs reais
Seu MySQL está em modo SQL ANSI + o XML de schema tem nullValue="" configurado. Ou:
- Troque o servidor para modo
TRADITIONAL(SET GLOBAL sql_mode = 'TRADITIONAL';), OR - Edite o XML de schema para usar
nullValue="\\N"conforme a orientação específica do Mondrian para MySQL.
Qualquer outra coisa
Tire um screenshot do wizard com o banner vermelho de resultado visível (especificamente a linha Kind: ...) e mande para support@saiku.bi.
Enterprise: rede privada
Para clientes Enterprise rodando uma configuração de rede privada, a regra do IP de egress é substituída por VPC peering ou PrivateLink para a sua instância MySQL. O fluxo do wizard de conexão é, fora isso, idêntico. Entre em contato com seu account team para provisionar o peering.
Teste com FoodMart
Quer testar o Saiku Cloud com esse dialeto antes de conectar seus próprios dados? Baixe o dataset de exemplo FoodMart empacotado para MySQL: