Przejdź do głównej zawartości

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.244

Dodaj 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.244 do 87.99.153.244.
  • PlanetScale: Allowed IPs w ustawieniach bazy → dodaj 87.99.153.244. PlanetScale wymaga też ?sslMode=VERIFY_IDENTITY w JDBC URL — zobacz Krok 3.
  • Self-hosted: bind-address = 0.0.0.0 (lub Twój publiczny NIC) w my.cnf, reguła publicznego firewalla z przodu i wzorzec grantu na poziomie hosta pozwalający roli z 87.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 SELECT dla 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=UTC

Dwa 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 razie jdbc: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

  1. Zaloguj się na https://cloud.saiku.bi/.

  2. Idź do Połączenia na lewym pasku bocznym.

  3. Pod 1. Wybierz typ hurtowni kliknij kafelek MySQL / MariaDB.

  4. Uzupełnij:

    • JDBC URL — URL z Kroku 3.
    • Usernamesaiku_read (lub jakkolwiek nazwałeś użytkownika w Kroku 2).
    • Password — hasło z Kroku 2.
  5. 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 warehouse lub Marketing 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:

  1. Firewall / allowlist — Krok 1 nie był zrobiony lub nie był zrobiony dla właściwego IP. Potwierdź, że 87.99.153.244/32 jest w allowliście Twojej hurtowni + zastosowane.
  2. 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 (nie HOST_UNREACHABLE) to powierzchnia w tym przypadku.
  3. 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ę z 87.99.153.244, co nie pasuje do localhost.
  • 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:

Przykładowy zbiór FoodMart dla MySQL