Zum Inhalt springen
Alle Anleitungen

Apps ·

MySQL- oder MariaDB-Datenbank erstellen und verbinden

Eine verwaltete MariaDB oder MySQL bestellen, Host, Port, Benutzer und Passwort finden, mit geprüftem Zertifikat verbinden, auf MySQL die erste Datenbank anlegen und wissen, wo sich die beiden unterscheiden.

MariaDB und MySQL sind die Datenbanken hinter den meisten PHP-Anwendungen und einem guten Teil von allem anderen. Beide gibt es als verwaltete Instanz: im Panel bestellen, Verbindungsdaten kopieren, mit den üblichen Clients über TLS verbinden. Sie unterscheiden sich in einem Detail, über das man stolpert, deshalb behandelt diese Anleitung beide, einschließlich der Stelle, an der sie auseinandergehen.

Was du brauchst

  • Ein Headpat-Space-Konto mit bestätigter E-Mail-Adresse und ausgefüllten Rechnungsdaten.
  • Einen Client: die mariadb-Kommandozeile aus MariaDB oder mysql aus MySQL. Beide sprechen mit beiden Servern; nimm den zu deiner Datenbank passenden, um genau die Optionen von unten zu haben.

1. Datenbank bestellen

  1. Melde dich im Panel an, öffne Apps in der Seitenleiste und klicke auf App erstellen.
  2. Suche unter Vorlage nach MariaDB oder MySQL und wähle es aus.
  3. Wähle unter Paket ein Paket. single betreibt einen Server und reicht für die meisten Seiten. Die ha-Pakete betreiben drei Server, die sich gegenseitig replizieren und von selbst umschalten: MariaDB mit Galera, MySQL mit semisynchroner Replikation. Deine Verbindungsdaten bleiben in beiden Fällen gleich.
  4. Trage unter Details einen Anzeigenamen ein und wähle die Version, die deine Anwendung braucht, oder lass den Standard.
  5. Hake das Kästchen an, dass die Einrichtung sofort beginnen darf, klicke auf App bereitstellen und schließe die Zahlung ab.

MariaDB ist in etwa einer Minute bereit; MySQL braucht zwei bis drei, weil sich sein Cluster erst initialisiert. Warte, bis die App-Seite running zeigt.

2. Verbindungsdaten finden

Öffne die Datenbank unter Apps. Die Karte Datenbank-Verbindung hat alles Nötige: Host und Port. Der Port ist ein eigener, nicht 3306. Klicke auf Anzeigen neben Zugangsdaten, um die Anmeldung zu sehen:

MariaDBMySQL
Benutzernameappmoco-writable
Datenbankapp, für dich angelegtnoch keine; du legst selbst eine an (nächster Schritt)
Passwortfür deine Instanz erzeugtfür deine Instanz erzeugt

Der Verbindungs-String packt alles in eine Zeile. Jedes Feld hat einen Kopierknopf; klicke auf Verbergen, wenn du fertig bist. Behandle das Passwort wie jedes andere Geheimnis.

3. Verbinden

Der Server zeigt ein öffentlich vertrautes Zertifikat für seinen Hostnamen, dein Client kann es also mit den Zertifizierungsstellen prüfen, denen dein Betriebssystem ohnehin vertraut. Verlange diese Prüfung; sie kostet nichts und schließt eine manipulierte Verbindung aus.

MariaDB, mit dem mariadb-Client:

mariadb -h DEIN_HOST -P DEIN_PORT -u app -p --ssl-verify-server-cert --ssl-ca=/etc/ssl/certs/ca-certificates.crt app

MySQL, mit dem mysql-Client:

mysql -h DEIN_HOST -P DEIN_PORT -u moco-writable -p --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt

Der Pfad bei --ssl-ca ist das CA-Bündel auf Debian und Ubuntu; auf Fedora und RHEL ist es /etc/pki/tls/certs/ca-bundle.crt, auf macOS mit Homebrew /etc/ssl/cert.pem. Beide Clients verweigern die Verbindung, wenn das Zertifikat nicht zum Hostnamen passt, und genau das ist der Sinn: eine Verbindung über die IP-Adresse scheitert absichtlich.

Auf MySQL legst du als Erstes eine Datenbank an, denn der Server kommt ohne:

CREATE DATABASE shop;
CREATE USER 'shop'@'%' IDENTIFIED BY 'ein-langes-zufaelliges-passwort';
GRANT ALL ON shop.* TO 'shop'@'%';

moco-writable darf Datenbanken und Benutzer anlegen, hat aber keine Serververwaltungsrechte, kann dich also nicht aus deiner eigenen Instanz aussperren. Auf MariaDB existiert die Datenbank app bereits und gehört app; weitere Datenbanken und Benutzer kannst du trotzdem anlegen.

4. Aus der Anwendung verbinden

Die meisten Frameworks nehmen Host, Port, Benutzer, Passwort und Datenbank einzeln oder eine einzige URL:

DATABASE_URL=mysql://app:DEIN_PASSWORT@DEIN_HOST:DEIN_PORT/app

Schalte in den Optionen deiner Bibliothek die TLS-Prüfung ein. Das Serverzertifikat führt auf eine öffentliche Wurzel zurück, die Bibliothek auf das CA-Bündel des Systems zu zeigen genügt also; schalte die Prüfung nicht ab, um eine Verbindung hinzubekommen. Zwei Beispiele:

Node mit mysql2:

import mysql from "mysql2/promise";

const pool = mysql.createPool({
  host: process.env.DB_HOST,
  port: Number(process.env.DB_PORT),
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  ssl: { rejectUnauthorized: true },
});

Python mit PyMySQL:

import os
import pymysql

conn = pymysql.connect(
    host=os.environ["DB_HOST"],
    port=int(os.environ["DB_PORT"]),
    user=os.environ["DB_USER"],
    password=os.environ["DB_PASSWORD"],
    database=os.environ["DB_NAME"],
    ssl={"ca": "/etc/ssl/certs/ca-certificates.crt"},
)

Halte das Passwort in einer Umgebungsvariable oder einem Secret-Speicher, nicht im Code.

Zugriff einschränken

Standardmäßig nimmt der Server Verbindungen von jeder Adresse an, die ein Passwort kennt. Die Karte IP-Zulassungsliste auf der App-Seite grenzt das auf die eingetragenen Adressen ein, etwa die IP deines Anwendungsservers. Adresse eintragen, speichern, und die Karte zeigt den eingeschränkten Zugriff.

Sicherungen

Beide Engines werden nach dem Zeitplan deines Pakets in einen Speicher außerhalb des Clusters gesichert, mit der Aufbewahrung, die das Paket enthält.

  • MariaDB: die Karte Sicherungen listet jede Sicherung. Sicherung erstellen legt vor einer riskanten Änderung eine an; Wiederherstellen ersetzt die aktuellen Daten durch eine Sicherung, währenddessen ist die Datenbank nicht erreichbar. Details in App sichern und wiederherstellen.
  • MySQL: die geplanten Sicherungen laufen und werden aufbewahrt, aber das Panel listet sie noch nicht. Bis dahin ziehst du eigene Kopien mit mysqldump und spielst sie mit dem mysql-Client zurück.

Für eine Kopie auf dem eigenen Rechner lässt du in beiden Fällen das Dump-Werkzeug gegen denselben Host und Port laufen, mit den TLS-Optionen von oben: mariadb-dump für MariaDB, mysqldump für MySQL.

Ohne Client hineinschauen

Die Karte Datenbankkonsole auf der App-Seite listet die Tabellen mit Zeilenzahlen, blättert durch ihre Zeilen und führt eingetipptes SQL aus. Sie verbindet sich aus dem Server selbst mit vollen Rechten, also der schnellste Weg zu prüfen, was deine Anwendung geschrieben hat. Siehe Datenbank im Panel durchsuchen und abfragen.

Wenn etwas nicht funktioniert

  • Die Verbindung läuft in einen Timeout: prüfe den Port; es ist nicht 3306. Hast du eine IP-Zulassungsliste gesetzt, muss deine aktuelle Adresse darauf stehen.
  • Die Zertifikatprüfung scheitert: du hast über die IP-Adresse verbunden, oder der Client findet kein CA-Bündel unter dem angegebenen Pfad. Verbinde über den Hostnamen und zeige mit --ssl-ca auf das Bündel deines Systems.
  • "No database selected" auf MySQL: es gibt noch keine. Lege eine wie oben an und nenne sie in deiner Verbindung.
  • Access denied: das Passwort wurde mit Leerzeichen oder Zeilenumbruch kopiert, oder der Benutzer hat keine Rechte auf diese Datenbank. Lass dir die Zugangsdaten erneut anzeigen und kopiere mit dem Knopf.

Bereit, es auszuprobieren?

Brauchst du Hilfe?

Wenn etwas aus dieser Anleitung bei dir nicht klappt, schreib uns und wir helfen dir weiter.

Kontakt aufnehmen