Podłączanie hurtowni MySQL / MariaDB
Ten przewodnik prowadzi Cię przez podłączanie bazy MySQL lub MariaDB do Saiku Cloud, end-to-end. Pięć minut, jeśli Twoja hurtownia jest już publiczna; dziesięć, jeśli musisz skonfigurować użytkownika tylko do odczytu.
Wpływ na poziom: każdy poziom Saiku Cloud (Starter, Team, Business) obsługuje MySQL BYOC.
Sterownik: Saiku Cloud dostarcza MariaDB Connector/J, który mówi w obu protokołach wire MySQL i MariaDB. Możesz wkleić albo jdbc:mysql://..., albo jdbc:mariadb://..., a my zajmiemy się resztą.
Czego będziesz potrzebować
- Instancji MySQL 5.7+ lub MariaDB 10.3+ osiągalnej z publicznego adresu IPv4. Klienci hostowanego Saiku Cloud na Starter/Team/Business tego potrzebują — klienci Enterprise z prywatnym ustawieniem VPC peering dostają osiągalność prywatną zamiast.
- Dostępu admina do hurtowni, byś mógł utworzyć użytkownika tylko do odczytu (lub poświadczeń istniejącego).
- Pięciu minut.
Krok 1 — Wpisz nasze egress IP do allowlisty
Zapytania Saiku Cloud do Twojej hurtowni wszystkie pochodzą z jednego statycznego IP:
87.99.153.244Dodaj to do allowlisty firewalla / security group / sieci Twojej hurtowni przed testem połączenia. Typowe miejsca allowlisty:
- AWS RDS / Aurora MySQL: Reguła ruchu wejściowego VPC security group → port 3306 → źródło
87.99.153.244/32. - Google Cloud SQL: Connectivity → Authorized networks → dodaj
87.99.153.244/32. - Azure Database for MySQL: Networking → Firewall rules → dodaj regułę pozwalającą
87.99.153.244do87.99.153.244. - PlanetScale: Allowed IPs w ustawieniach bazy → dodaj
87.99.153.244. PlanetScale wymaga też?sslMode=VERIFY_IDENTITYw JDBC URL — zobacz Krok 3. - Self-hosted:
bind-address = 0.0.0.0(lub Twój publiczny NIC) wmy.cnf, reguła publicznego firewalla z przodu i wzorzec grantu na poziomie hosta pozwalający roli z87.99.153.244.
IP jest stabilne — przeżywa rebooty i przebudowy obrazów. Zobowiązujemy się do minimum 30 dni uprzedzenia przed jakąkolwiek rotacją. Pełna polityka: nasze zobowiązanie do stabilności egress IP.
Krok 2 — Utwórz użytkownika tylko do odczytu w MySQL
Saiku Cloud tylko czyta z Twojej hurtowni — nigdy nie pisze, nigdy nie zmienia schem, nigdy nie tworzy obiektów. Kształt najmniejszych uprawnień to dedykowany użytkownik tylko do odczytu:
-- Jako użytkownik MySQL z uprawnieniem GRANT OPTION:CREATE USER 'saiku_read'@'%' IDENTIFIED BY 'pick-something-strong-here';
-- Nadaj SELECT na bazy, które chcesz, by Saiku widziało. Dostosuj-- 'analytics' do nazwy bazy w Twoim JDBC URL.GRANT SELECT ON analytics.* TO 'saiku_read'@'%';
-- Przeładuj tabele uprawnień.FLUSH PRIVILEGES;Kilka uwag:
- Wildcard hosta
'%'pozwala użytkownikowi łączyć się z dowolnego IP. Jeśli Twoje MySQL jest zablokowane do konkretnych źródłowych IP na poziomie użytkownika (oprócz firewalla), użyj zamiast'saiku_read'@'87.99.153.244'. - Jeśli Twoje dane są rozsiane po wielu bazach, powtórz blok
GRANT SELECTdla każdej. - Aurora MySQL traktuje granty nieco inaczej — zobacz dokumentację Aurora dla równoważnego przepisu.
- PlanetScale używa własnego systemu ról — utwórz rolę „read-only” w konsoli PlanetScale i zbierz wygenerowaną nazwę użytkownika + hasło zamiast uruchamiać
CREATE USER.
Krok 3 — Zbuduj JDBC URL
Kształt:
jdbc:mysql://<host>:<port>/<database>?sslMode=REQUIRED&serverTimezone=UTCDwa parametry warte zrozumienia (placeholder kreatora zawiera oba):
serverTimezone=UTC
sslMode=REQUIRED
Wymusza TLS dla połączenia JDBC. Większość zarządzanych usług MySQL i tak wymusza TLS po stronie serwera; REQUIRED sprawia, że klient odrzuca fallback plaintext.
Warianty:
sslMode=REQUIRED— cert serwera jest zaufany, ale nie weryfikowany pod kątem hostname’a. Dobry domyślny.sslMode=VERIFY_CA— weryfikuje, że cert serwera buduje łańcuch do CA, któremu ufamy. Działa dla zarządzanych usług używających publicznych CA.sslMode=VERIFY_IDENTITY— także weryfikuje, że hostname certu serwera pasuje do hosta JDBC URL. Wymagane dla PlanetScale.sslMode=DISABLED— plaintext. Nie rób tego.
Konkretne przykłady
- AWS RDS MySQL:
jdbc:mysql://mydb.abc123.us-east-1.rds.amazonaws.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC - Aurora MySQL: Ten sam kształt; użyj endpointu writera klastra.
- Google Cloud SQL:
jdbc:mysql://1.2.3.4:3306/sales?sslMode=REQUIRED&serverTimezone=UTC(użyj publicznego IP z konsoli 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: Użyj
jdbc:mariadb://..., jeśli Twoja usługa używa parametrów URL specyficznych dla MariaDB; w przeciwnym raziejdbc:mysql://działa też względem MariaDB. - Self-hosted MySQL/MariaDB:
jdbc:mysql://db.yourcompany.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC
Krok 4 — Podłącz przez kreator Saiku Cloud
-
Zaloguj się na
https://cloud.saiku.bi/. -
Idź do Połączenia na lewym pasku bocznym.
-
Pod 1. Wybierz typ hurtowni kliknij kafelek MySQL / MariaDB.
-
Uzupełnij:
- JDBC URL — URL z Kroku 3.
- Username —
saiku_read(lub jakkolwiek nazwałeś użytkownika w Kroku 2). - Password — hasło z Kroku 2.
-
Kliknij Testuj połączenie.
Jeśli wszystko jest podłączone poprawnie, zobaczysz zielony banner wyniku: ✓ Connection successful plus wykryta wersja MySQL/MariaDB. Przejdź do Kroku 5.
Jeśli widzisz czerwony banner wyniku, zobacz Rozwiązywanie problemów poniżej.
Krok 5 — Zapisz połączenie
Po udanym teście kreator renderuje sekcję 3. Zapisz połączenie. Uzupełnij:
- Password (wpisz ponownie do zapisu) — to samo hasło, którym testowałeś. Nie przechowujemy hasła z formularza testu, by nie krążyć poświadczeniem przez stan strony.
- Label — czytelna nazwa typu
Production warehouselubMarketing analytics. Pokazywana na liście połączeń + w designerze kostek.
Kliknij Zapisz połączenie. Przekierujemy Cię do schema designera.
Rozwiązywanie problemów
✗ Connection failed (HOST_UNREACHABLE) lub (TIMEOUT)
Nie mogliśmy sięgnąć hosta na porcie, który podałeś. Najczęstsze przyczyny:
- Firewall / allowlist — Krok 1 nie był zrobiony lub nie był zrobiony dla właściwego IP. Potwierdź, że
87.99.153.244/32jest w allowliście Twojej hurtowni + zastosowane. - DNS — hostname w JDBC URL nie rozwiązuje się lub rozwiązuje się na prywatne IP. Zweryfikuj z laptopa:
nslookup <host>. Odmawiamy łączenia z adresami RFC1918 / loopback / link-local ze względów ochrony przed SSRF —HOST_DENIED(nieHOST_UNREACHABLE) to powierzchnia w tym przypadku. - Zły port — MySQL domyślnie 3306. Niektóre zarządzane usługi używają niestandardowego portu (główny endpoint PlanetScale to 3306, ale niektóre regiony stawiają load balancer na 443 — sprawdź stronę connection-strings w ich konsoli).
✗ Connection failed (AUTH_FAILED)
Błąd MySQL 1045 — nazwa użytkownika lub hasło jest złe. Kreator celowo nie rozróżnia „zły użytkownik” od „złe hasło” — to obrona przed atakami credential-stuffing.
- Sprawdź dwukrotnie nazwę użytkownika. Nazwy użytkowników MySQL SĄ case-sensitive w standardowych konfiguracjach.
- Potwierdź, że użytkownik jest dopuszczony z
'%'lub konkretnie z'87.99.153.244'. Najczęstszy kształt tej porażki:CREATE USER 'saiku_read'@'localhost'pozwala tylko na lokalne połączenia; Saiku Cloud łączy się z87.99.153.244, co nie pasuje dolocalhost. - Spróbuj połączyć się z laptopa przez
mysql -h <host> -u saiku_read -p <database>, by potwierdzić, że poświadczenia działają poza Saiku.
✗ Connection failed (DATABASE_NOT_FOUND)
Błąd MySQL 1049 — host akceptuje Twoje poświadczenia, ale nazwa bazy w JDBC URL nie istnieje. Zweryfikuj:
-- Z mysql CLI, jako dowolny użytkownik z loginem:SHOW DATABASES;Znaczniki czasu przesuwają się o jakąś dziwną liczbę godzin po imporcie
Zapomniałeś serverTimezone=UTC. Dodaj do JDBC URL (Krok 3), przetestuj, zapisz. Istniejące kostki zbudowane względem starej (złej) strefy czasowej będą wymagać ponownego renderu.
Kostka renderuje się, ale z 'NULL' (literałem stringowym) zamiast prawdziwych NULL-i
Twoje MySQL jest w trybie ANSI SQL + XML schemy ma skonfigurowane nullValue="". Albo:
- Przełącz serwer w tryb
TRADITIONAL(SET GLOBAL sql_mode = 'TRADITIONAL';), ALBO - Edytuj XML schemy, by używał
nullValue="\\N"zgodnie z wytycznymi Mondriana dla MySQL.
Cokolwiek innego
Zrób zrzut ekranu kreatora z widocznym czerwonym bannerem wyniku (linia Kind: ... w szczególności) i wyślij na support@saiku.bi.
Enterprise: sieć prywatna
Dla klientów Enterprise z ustawieniem sieci prywatnej reguła egress IP jest zastępowana peeringiem VPC lub PrivateLink do Twojej instancji MySQL. Reszta przepływu kreatora połączeń jest identyczna. Skontaktuj się z zespołem konta, by zaprowidować peering.
Spróbuj z FoodMart
Chcesz przetestować Saiku Cloud z tym dialektem przed podłączeniem własnych danych? Pobierz przykładowy zbiór FoodMart spakowany dla MySQL: