Zum Inhalt springen

Ein MySQL- / MariaDB-Warehouse verbinden

Diese Anleitung führt Sie durch das End-to-End-Verbinden einer MySQL- oder MariaDB-Datenbank mit Saiku Cloud. Fünf Minuten, wenn Ihr Warehouse bereits öffentlich ist; zehn, wenn Sie einen Read-only-Benutzer einrichten müssen.

Plan-Auswirkung: Jeder Saiku-Cloud-Plan (Starter, Team, Business) unterstützt MySQL-BYOC.

Treiber: Saiku Cloud liefert MariaDB Connector/J, der sowohl MySQL- als auch MariaDB-Wire-Protokolle spricht. Sie können entweder jdbc:mysql://... oder jdbc:mariadb://... einfügen, und wir handhaben den Rest.

Was Sie brauchen

  • Eine MySQL 5.7+- oder MariaDB 10.3+-Instanz, die von einer öffentlichen IPv4-Adresse erreichbar ist. Cloud-gehostete Saiku-Cloud-Kunden auf Starter/Team/Business brauchen dies — Enterprise-Kunden mit einem privaten VPC-Peering-Setup erhalten stattdessen private-Netzwerk-Erreichbarkeit.
  • Admin-Zugriff auf Ihr Warehouse, damit Sie einen Read-only-Benutzer erstellen können (oder die Anmeldedaten eines bestehenden Read-only-Benutzers).
  • Fünf Minuten.

Schritt 1 — Unsere Egress-IP auf die Allowlist setzen

Die Queries von Saiku Cloud an Ihr Warehouse stammen alle von einer einzigen statischen IP:

87.99.153.244

Fügen Sie diese zur Firewall / Security Group / Netzwerk-Allowlist Ihres Warehouses hinzu, bevor Sie die Verbindung testen. Häufige Allowlist-Orte:

  • AWS RDS / Aurora MySQL: VPC-Security-Group Inbound Rule → Port 3306 → Source 87.99.153.244/32.
  • Google Cloud SQL: Connectivity → Authorized networks → 87.99.153.244/32 hinzufügen.
  • Azure Database for MySQL: Networking → Firewall rules → Regel hinzufügen, die 87.99.153.244 bis 87.99.153.244 erlaubt.
  • PlanetScale: Allowed IPs in den Datenbankeinstellungen → 87.99.153.244 hinzufügen. PlanetScale erfordert außerdem ?sslMode=VERIFY_IDENTITY in der JDBC-URL — siehe Schritt 3.
  • Selbstgehostet: bind-address = 0.0.0.0 (oder Ihre öffentliche NIC) in my.cnf, die öffentliche Firewall-Regel davor und ein Host-Level-Grant-Muster, das die Rolle von 87.99.153.244 erlaubt.

Die IP ist stabil — sie übersteht Neustarts und Image-Rebuilds. Wir verpflichten uns zu mindestens 30 Tagen Vorlauf vor jeder Rotation. Vollständige Policy: unsere Verpflichtung zur Egress-IP-Stabilität.

Schritt 2 — Einen Read-only-Benutzer in MySQL erstellen

Saiku Cloud liest immer nur von Ihrem Warehouse — schreibt niemals, ändert niemals Schemas, erstellt niemals Objekte. Die Least-Privilege-Form ist ein dedizierter Read-only-Benutzer:

-- Als MySQL-Benutzer mit dem GRANT-OPTION-Privileg:
CREATE USER 'saiku_read'@'%' IDENTIFIED BY 'pick-something-strong-here';
-- SELECT auf die Datenbank(en) gewähren, die Saiku sehen soll.
-- Passen Sie 'analytics' an den Datenbanknamen in Ihrer JDBC-URL an.
GRANT SELECT ON analytics.* TO 'saiku_read'@'%';
-- Die Privilegien-Tabellen neu laden.
FLUSH PRIVILEGES;

Ein paar Hinweise:

  • Der '%'-Host-Platzhalter lässt den Benutzer von jeder IP verbinden. Wenn Ihr MySQL auf Benutzerebene auf bestimmte Quell-IPs gesperrt ist (zusätzlich zur Firewall), verwenden Sie stattdessen 'saiku_read'@'87.99.153.244'.
  • Wenn Ihre Daten über mehrere Datenbanken verteilt sind, wiederholen Sie den GRANT SELECT-Block für jede.
  • Aurora MySQL behandelt Grants leicht anders — siehe die Aurora-Dokumentation für das äquivalente Rezept.
  • PlanetScale verwendet sein eigenes Rollensystem — erstellen Sie eine „Read-only”-Rolle in der PlanetScale-Konsole und erfassen Sie den generierten Benutzernamen + das Passwort statt CREATE USER auszuführen.

Schritt 3 — Die JDBC-URL bauen

Die Form:

jdbc:mysql://<host>:<port>/<database>?sslMode=REQUIRED&serverTimezone=UTC

Zwei Parameter, die es zu verstehen lohnt (der Platzhalter des Wizards enthält beide):

serverTimezone=UTC

sslMode=REQUIRED

Erzwingt TLS für die JDBC-Verbindung. Die meisten managed MySQL-Services erzwingen TLS ohnehin serverseitig; REQUIRED lässt den Client den Klartext-Fallback ablehnen.

Varianten:

  • sslMode=REQUIRED — Server-Zertifikat wird vertraut, aber nicht für den Hostnamen verifiziert. Guter Standard.
  • sslMode=VERIFY_CA — verifiziert, dass das Server-Zertifikat zu einer CA gehört, der wir vertrauen. Funktioniert für managed Services mit öffentlichen CAs.
  • sslMode=VERIFY_IDENTITY — verifiziert auch, dass der Hostname des Server-Zertifikats zum Host der JDBC-URL passt. Erforderlich für PlanetScale.
  • sslMode=DISABLED — Klartext. Nicht.

Konkrete Beispiele

  • AWS RDS MySQL: jdbc:mysql://mydb.abc123.us-east-1.rds.amazonaws.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC
  • Aurora MySQL: Gleiche Form; verwenden Sie den Cluster-Writer-Endpunkt.
  • Google Cloud SQL: jdbc:mysql://1.2.3.4:3306/sales?sslMode=REQUIRED&serverTimezone=UTC (verwenden Sie die Public IP aus der Cloud-SQL-Konsole)
  • 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: Verwenden Sie jdbc:mariadb://..., wenn Ihr Service MariaDB-spezifische URL-Parameter verwendet; ansonsten funktioniert jdbc:mysql:// auch gegen MariaDB.
  • Selbstgehostetes MySQL/MariaDB: jdbc:mysql://db.yourcompany.com:3306/sales?sslMode=REQUIRED&serverTimezone=UTC

Schritt 4 — Verbinden über den Saiku-Cloud-Wizard

  1. Melden Sie sich bei https://cloud.saiku.bi/ an.

  2. Navigieren Sie zu Verbindungen in der linken Seitenleiste.

  3. Klicken Sie unter 1. Warehouse-Typ wählen auf das MySQL / MariaDB-Kachel.

  4. Füllen Sie aus:

    • JDBC-URL — die URL aus Schritt 3.
    • Benutzernamesaiku_read (oder wie Sie den Benutzer in Schritt 2 benannt haben).
    • Passwort — das Passwort aus Schritt 2.
  5. Klicken Sie auf Verbindung testen.

Wenn alles korrekt verdrahtet ist, sehen Sie einen grünen Ergebnis-Banner: ✓ Connection successful plus die erkannte MySQL/MariaDB-Version. Weiter zu Schritt 5.

Wenn Sie einen roten Ergebnis-Banner sehen, siehe Fehlerbehebung unten.

Schritt 5 — Die Verbindung speichern

Nach einem erfolgreichen Test rendert der Wizard einen Abschnitt 3. Verbindung speichern. Füllen Sie aus:

  • Passwort (zum Speichern erneut eingeben) — dasselbe Passwort, mit dem Sie getestet haben. Wir speichern das Passwort des Test-Formulars nicht, um zu vermeiden, ein Credential durch den Page-State zurückzureichen.
  • Label — ein menschenlesbarer Name wie Production warehouse oder Marketing analytics. Wird in der Verbindungsliste + im Cube-Designer angezeigt.

Klicken Sie auf Verbindung speichern. Wir leiten Sie zum Schema-Designer weiter.

Fehlerbehebung

✗ Connection failed (HOST_UNREACHABLE) oder (TIMEOUT)

Wir konnten den Host auf dem angegebenen Port nicht erreichen. Häufigste Ursachen:

  1. Firewall / Allowlist — Schritt 1 wurde nicht gemacht oder nicht für die richtige IP. Bestätigen Sie, dass 87.99.153.244/32 in der Allowlist Ihres Warehouses ist + dass sie angewandt wurde.
  2. DNS — der Hostname in der JDBC-URL löst nicht auf oder löst auf eine private IP auf. Verifizieren Sie von Ihrem Laptop: nslookup <host>. Wir verweigern aus SSRF-Schutz-Gründen die Verbindung zu RFC1918- / Loopback- / Link-Local-Adressen — HOST_DENIED (nicht HOST_UNREACHABLE) ist in diesem Fall die Oberfläche.
  3. Falscher Port — MySQL ist standardmäßig 3306. Manche managed Services verwenden einen Custom-Port (PlanetScales primärer Endpunkt ist 3306, aber einige Regionen stellen einen Load Balancer auf 443 vor — prüfen Sie die Connection-Strings-Seite in deren Konsole).

✗ Connection failed (AUTH_FAILED)

MySQL-Fehler 1045 — Benutzername oder Passwort ist falsch. Der Wizard unterscheidet absichtlich nicht zwischen „falscher Benutzer” und „falsches Passwort” — das ist Schutz gegen Credential-Stuffing-Angriffe.

  • Prüfen Sie den Benutzernamen doppelt. MySQL-Benutzernamen SIND in Standardkonfigurationen case-sensitiv.
  • Bestätigen Sie, dass der Benutzer von '%' oder spezifisch von '87.99.153.244' erlaubt ist. Häufigste Form dieses Fehlers: CREATE USER 'saiku_read'@'localhost' erlaubt nur lokale Verbindungen; Saiku Cloud verbindet von 87.99.153.244, was nicht zu localhost passt.
  • Versuchen Sie, von Ihrem Laptop mit mysql -h <host> -u saiku_read -p <database> zu verbinden, um zu bestätigen, dass die Anmeldedaten außerhalb von Saiku funktionieren.

✗ Connection failed (DATABASE_NOT_FOUND)

MySQL-Fehler 1049 — der Host akzeptiert Ihre Anmeldedaten, aber der Datenbankname in der JDBC-URL existiert nicht. Verifizieren Sie ihn:

-- Aus der MySQL-CLI, als beliebiger Benutzer mit Login:
SHOW DATABASES;

Timestamps verschieben sich nach dem Import um eine seltsame Stundenzahl

Sie haben serverTimezone=UTC vergessen. Fügen Sie es der JDBC-URL hinzu (Schritt 3), testen Sie, speichern Sie. Bestehende Cubes, gegen die alte (falsche) Zeitzone gebaut, benötigen ein erneutes Rendern.

Cube rendert, aber mit 'NULL' (String-Literal) statt tatsächlicher NULLs

Ihr MySQL ist im ANSI-SQL-Modus + die Schema-XML hat nullValue="" konfiguriert. Entweder:

Alles andere

Machen Sie einen Screenshot des Wizards mit sichtbarem rotem Ergebnis-Banner (Kind: ...-Zeile insbesondere) und senden Sie ihn an support@saiku.bi.

Enterprise: privates Netzwerk

Für Enterprise-Kunden mit einem privaten Netzwerk-Setup wird die Egress-IP-Regel durch VPC-Peering oder PrivateLink zu Ihrer MySQL-Instanz ersetzt. Der Flow des Connection-Wizards ist ansonsten identisch. Kontaktieren Sie Ihr Account-Team, um das Peering bereitzustellen.

Mit FoodMart ausprobieren

Möchten Sie Saiku Cloud mit diesem Dialekt testen, bevor Sie Ihre eigenen Daten verbinden? Laden Sie den FoodMart-Sample-Datensatz, gepackt für MySQL, herunter:

FoodMart-Sample-Datensatz für MySQL