MariaDB ist ein MySQL-kompatibler Datenbankserver. Websites, Gameserver, Discord-Bots und Plugins nutzen ihn. Wir zeigen zwei Installationswege und behandeln dann Absicherung, Verwaltung von Datenbanken und Benutzern, sicheren Zugriff von Ihrem Computer und Backups.
Was Sie brauchen
- Ein StormHost-VPS mit Ubuntu 24.04 oder Debian 13
- Für die manuellen Schritte eine SSH-Verbindung als root (Anleitung)
- Etwa 25 Minuten
So funktioniert es#
MariaDB läuft auf dem VPS als Dienst mariadb und nimmt standardmäßig nur Verbindungen vom VPS selbst an (Adresse 127.0.0.1, Port 3306 und ein lokaler Socket). Apps auf demselben VPS können sich verbinden, niemand im Internet erreicht die Datenbank. Belassen Sie es dabei, bis Sie den Zugriff von außen wirklich brauchen.
Die Version hängt vom System ab: Ubuntu 24.04 installiert MariaDB 10.11, Debian 13 MariaDB 11.8. Für nichts in dieser Anleitung macht der Unterschied etwas aus.
Sowohl unter Ubuntu als auch unter Debian authentifiziert sich der Datenbankbenutzer root über Unix-Socket: Nur wer am VPS als System-root angemeldet ist, kommt als root in die Datenbank. Es gibt kein Passwort zu erraten, weil es keines gibt.
Option A: die Registerkarte Datenbank im Kundenbereich#
Der schnellste Weg, keine Befehlszeile nötig.
- Öffnen Sie im Kundenbereich Meine Dienste, klicken Sie auf Ihren VPS und wechseln Sie zur Registerkarte Datenbank.
- Läuft auf dem VPS keine Datenbank, sehen Sie „Auf diesem VPS läuft noch kein Datenbankserver“. Klicken Sie auf MariaDB installieren. Die Installation läuft im Hintergrund und dauert in der Regel 1–3 Minuten; die Seite aktualisiert sich von selbst.
- Klicken Sie auf Automatisch verbinden. Der Kundenbereich verbindet sich über eine gesicherte Verbindung in den VPS mit der Datenbank, sodass die Datenbank nicht aus dem Internet erreichbar sein muss.
- Sie haben jetzt diese Unter-Registerkarten:
| Unter-Registerkarte | Was Sie dort tun können |
|---|---|
| Datenbanken | Eine Datenbank anlegen (Neue Datenbank) oder löschen. Die Option „Auch einen Benutzer mit demselben Namen und vollem Zugriff anlegen“ legt sofort einen Benutzer mit Passwort an. |
| Benutzer | Einen Benutzer anlegen, ihm Zugriff auf eine Datenbank geben, ein neues Passwort erzeugen oder ihn löschen. |
| Browser | Tabellen und ihre Zeilen durchsuchen. |
| SQL | Eine beliebige SQL-Abfrage ausführen (Strg+Eingabe). Es werden höchstens die ersten 500 Zeilen des Ergebnisses angezeigt. Abfragen, die Daten löschen, müssen bestätigt werden. |
Wichtige Details:
- Ein Datenbankname darf nur Buchstaben ohne Umlaute, Ziffern und Unterstriche enthalten und nicht mit einer Ziffer beginnen.
- Datenbanken werden mit der Kodierung
utf8mb4angelegt (unterstützt ganz Unicode, einschließlich Emoji). - Nachdem Sie einen Benutzer angelegt haben, wird das Passwort nur einmal angezeigt („Speichern Sie diese Zugangsdaten — das Passwort sehen Sie nicht noch einmal“). Speichern Sie es in einem Passwort-Manager.
- Die Option Remote-Verbindungen erlauben legt einen Benutzer an, der sich von überall verbinden kann (Host
%). Damit das funktioniert, muss MariaDB auf einer öffentlichen Adresse lauschen (bind-address), und der Port muss in der Firewall erlaubt sein. Die Schritte stehen unten unter Direkter Fernzugriff. Brauchen Sie keine Remote-Verbindungen, lassen Sie diese Option abgehakt.
Das Dienstkonto des Kundenbereichs
Beim automatischen Verbinden legen wir in MariaDB ein Konto stormhost_panel mit vollen Rechten an, das sich nur vom VPS selbst anmelden kann. Über dieses Konto verwaltet der Kundenbereich Ihre Datenbanken. In der Benutzerliste ist es als System markiert. Löschen Sie es nicht, sonst kann sich die Registerkarte Datenbank nicht mit der Datenbank verbinden. Sie können die Datenbank mit der Schaltfläche Trennen vom Kundenbereich trennen; die Datenbanken auf dem VPS bleiben unberührt.
Der Rest dieser Anleitung behandelt dieselben Dinge von der Befehlszeile aus. Das ist nützlich, wenn Sie die volle Kontrolle über die Datenbank möchten oder Dinge brauchen, die die Registerkarte nicht kann (Backups, Tuning, SSH-Tunnel).
Option B: manuelle Installation#
Funktioniert unter Ubuntu 24.04 und Debian 13:
apt update
apt -y install mariadb-serverapt update– lädt die aktuelle Paketliste.apt -y install mariadb-server– installiert den Datenbankserver und den Clientmariadb. Der Dienst startet nach der Installation von selbst und ist beim Booten des VPS aktiviert.
Prüfen Sie, dass er läuft:
systemctl status mariadb
mariadb --versionSie sehen Active: active (running) und die Versionsnummer (10.11 unter Ubuntu, 11.8 unter Debian). Schließen Sie die Ausgabe von systemctl mit q.
Absicherung: mariadb-secure-installation#
Das Skript mariadb-secure-installation entfernt Testreste, die in der Produktion nichts zu suchen haben. Führen Sie es aus:
mariadb-secure-installationAntworten Sie gemäß der Tabelle:
| Frage | Antwort | Warum |
|---|---|---|
Enter current password for root (enter for none): | Eingabe | Root meldet sich über Unix-Socket an und hat kein Passwort. Das Skript gibt OK, successfully used password, moving on... aus. |
Switch to unix_socket authentication [Y/n] | n | Root verwendet den Unix-Socket bereits. Das Skript sagt es selbst: „You already have your root account protected, so you can safely answer 'n'.“ |
Change the root password? [Y/n] | n | Root braucht kein Passwort; nur der System-root kann sich anmelden. Verlangt ein Programm ausdrücklich das Root-Passwort, legen Sie stattdessen einen eigenen Benutzer dafür an. |
Remove anonymous users? [Y/n] | Y | Ein anonymer Benutzer würde die Anmeldung ohne Namen erlauben. |
Disallow root login remotely? [Y/n] | Y | Root darf sich nur vom VPS anmelden, nicht über das Netz. |
Remove test database and access to it? [Y/n] | Y | Löscht die Datenbank test, auf die jeder zugreifen kann. |
Reload privilege tables now? [Y/n] | Y | Die Änderungen wirken sofort. |
Am Ende sehen Sie All done!.
Anmeldung an der MariaDB-Konsole#
Als root auf dem VPS:
mariadbDie Eingabeaufforderung MariaDB [(none)]> erscheint. SQL-Anweisungen enden mit einem Semikolon ;. Die Konsole verlassen Sie mit exit.
Als anderer Datenbankbenutzer:
mariadb -u <BENUTZER> -p-u <BENUTZER>– der Name des Datenbankbenutzers.-p– fragt nach dem Passwort (es wird bei der Eingabe nicht angezeigt).
Als normaler Benutzer mit sudo
Sind Sie als normaler Benutzer mit sudo statt als root angemeldet, führen Sie sudo mariadb aus. Der Befehl mariadb -u root -p scheitert mit Access denied, weil sich root nicht mit Passwort anmeldet.
Eine Datenbank und ein Benutzer für Ihre App#
Jede App sollte ihre eigene Datenbank und ihren eigenen Benutzer mit Rechten nur auf diese Datenbank haben. Kompromittiert jemand die App, kommt er nur an deren Daten.
Führen Sie Folgendes in der MariaDB-Konsole (mariadb) aus. Ersetzen Sie <STARKES_PASSWORT> durch ein Passwort aus dem Passwortgenerator (nur Buchstaben und Ziffern, mindestens 24 Zeichen):
CREATE DATABASE aplikace CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'aplikace'@'localhost' IDENTIFIED BY '<STARKES_PASSWORT>';
GRANT ALL PRIVILEGES ON aplikace.* TO 'aplikace'@'localhost';
SHOW GRANTS FOR 'aplikace'@'localhost';| Anweisung | Was sie tut |
|---|---|
CREATE DATABASE aplikace | Legt die Datenbank aplikace an. |
CHARACTER SET utf8mb4 | Kodierung für ganz Unicode (Umlaute, Emoji). Das ältere utf8 in MariaDB verarbeitet nur 3-Byte-Zeichen und kann keine Emoji speichern. |
COLLATE utf8mb4_unicode_ci | Regeln zum Sortieren und Vergleichen von Text; ci = ohne Unterscheidung der Groß- und Kleinschreibung. |
CREATE USER 'aplikace'@'localhost' | Ein Benutzer aplikace, der sich nur vom VPS verbinden darf. |
IDENTIFIED BY '…' | Das Passwort des Benutzers. |
GRANT ALL PRIVILEGES ON aplikace.* | Alle Rechte, aber nur auf die Datenbank aplikace (.* = alle Tabellen). |
SHOW GRANTS FOR … | Zeigt, welche Rechte der Benutzer hat (eine Prüfung). |
Vergeben Sie Rechte danach, was die App braucht:
| Rechte | Was sie erlauben | Wann vergeben |
|---|---|---|
ALL PRIVILEGES ON db.* | Alles in einer Datenbank, einschließlich Schemaänderungen. | Eine typische App, die ihre eigenen Tabellen anlegt (WordPress, Plugins, Bots). |
SELECT, INSERT, UPDATE, DELETE ON db.* | Nur Lesen und Schreiben von Daten, keine Tabellenänderungen. | Eine App mit fertigem Schema; ein Berichtskonto. |
SELECT ON db.* | Nur lesen. | Statistiken, Exporte, Vorschauen. |
ALL PRIVILEGES ON *.* | Alles auf dem ganzen Server. | Nur Administratoren, nie eine App. |
WITH GRANT OPTION | Darf anderen Rechte erteilen. | Nur Werkzeuge, die selbst Datenbanken und Benutzer anlegen (zum Beispiel ein Game-Panel auf dem eigenen VPS). |
Weitere nützliche Anweisungen:
SHOW DATABASES;
SELECT User, Host FROM mysql.user;
ALTER USER 'aplikace'@'localhost' IDENTIFIED BY '<NEUES_PASSWORT>';
REVOKE ALL PRIVILEGES ON aplikace.* FROM 'aplikace'@'localhost';
DROP USER 'aplikace'@'localhost';SHOW DATABASES;– listet Datenbanken auf.SELECT User, Host FROM mysql.user;– listet Benutzer und die Hosts auf, von denen sie sich verbinden dürfen.ALTER USER … IDENTIFIED BY– ändert das Passwort.REVOKE …– entzieht Rechte.DROP USER …– löscht den Benutzer (die Datenbank bleibt).
Das Löschen einer Datenbank ist unumkehrbar
DROP DATABASE aplikace; löscht die Datenbank mit allen Tabellen und Daten ohne Rückfrage. Erstellen Sie vor dem Löschen ein Backup (siehe Datenbank-Backups).
Der Host des Benutzers: woher er sich verbinden darf#
Ein MariaDB-Benutzer ist nicht nur ein Name, sondern ein Paar aus Name + Host. 'jan'@'localhost' und 'jan'@'%' sind zwei verschiedene Benutzer, jeder mit eigenem Passwort und eigenen Rechten.
| Host | Woher sich der Benutzer verbinden kann | Typische Verwendung |
|---|---|---|
localhost | Vom VPS über den Socket oder TCP zu 127.0.0.1 | Eine App auf demselben VPS. Der empfohlene Standard. |
127.0.0.1 | Vom VPS über TCP | Apps, die sich ausschließlich mit 127.0.0.1 verbinden. |
198.51.100.25 | Nur von dieser IP-Adresse | Ihr Computer oder ein anderer Server mit statischer IP. |
172.18.0.% | Aus einem ganzen Bereich (Platzhalter %) | Docker-Container auf demselben VPS. |
% | Von überall | Nur wenn es nicht anders geht, und immer mit Firewall. |
Zugriff von Ihrem Computer#
Möchten Sie die Datenbank mit einem Programm wie HeidiSQL oder DBeaver ansehen? Sie haben zwei Möglichkeiten. Wir empfehlen einen SSH-Tunnel: Die Datenbank bleibt aus dem Internet unerreichbar, und die Verbindung ist verschlüsselt.
SSH-Tunnel (empfohlen)#
Ein SSH-Tunnel leitet einen Port auf Ihrem Computer über eine verschlüsselte SSH-Verbindung an den Datenbankport auf dem VPS weiter.
Öffnen Sie auf Ihrem Computer ein Terminal (Windows Terminal, PowerShell, macOS Terminal) und führen Sie aus:
bash ssh -L 3307:127.0.0.1:3306 -N [email protected]ssh– verbindet sich per SSH mit dem VPS.-L 3307:127.0.0.1:3306– Port3307auf Ihrem Computer wird an die Adresse127.0.0.1, Port3306aus Sicht des VPS weitergeleitet (also an MariaDB). Port 3307 wird verwendet, damit er nicht mit einer eventuell auf Ihrem Computer laufenden Datenbank kollidiert.-N– keinen Befehl auf dem VPS ausführen, nur den Tunnel offen halten.[email protected]– Benutzer und IP-Adresse Ihres VPS (aus der Registerkarte Netzwerk).
Nach der Anmeldung gibt das Terminal nichts aus und scheint zu „hängen“. Das ist richtig: Der Tunnel läuft, bis Sie das Fenster schließen oder Strg+C drücken.
Verbinden Sie sich in Ihrem Datenbankprogramm mit Host
127.0.0.1, Port3307, mit einem Datenbankbenutzer und Passwort (zum Beispielaplikace).
HeidiSQL und DBeaver können den Tunnel auch selbst aufbauen. Wählen Sie in HeidiSQL den Netzwerktyp MariaDB/MySQL über SSH-Tunnel (… (SSH tunnel)), tragen Sie auf der Registerkarte SSH tunnel die IP-Adresse des VPS, Port 22, Benutzer und Passwort oder SSH-Schlüssel ein und setzen Sie in den Haupteinstellungen 127.0.0.1 als Datenbankhost. Fügen Sie in DBeaver in den Verbindungseinstellungen SSH hinzu (Plus-Schaltfläche, Option SSH) und haken Sie Use SSH Tunnel an.
Direkter Fernzugriff#
Verwenden Sie das nur, wenn sich ein anderer Server oder ein Programm, das keine Tunnel beherrscht, mit der Datenbank verbinden muss. Beschränken Sie den Zugriff immer auf eine bestimmte IP-Adresse.
Lassen Sie MariaDB im Netz lauschen. Erstellen Sie die Datei
nano /etc/mit diesem Inhalt:mysql/ mariadb. conf. d/ 60-remote-access. cnf /etc/ mysql/ inimariadb.conf.d/ 60-remote-access.cnf [mysqld] bind-address = 0.0.0.0[mysqld]– die Optionsgruppe für den Datenbankserver.bind-address = 0.0.0.0– auf allen IPv4-Adressen des VPS lauschen (das überschreibt den Standard127.0.0.1aus50-server.cnf, weil die Dateien alphabetisch gelesen werden und die spätere gewinnt).
Starten Sie MariaDB neu und prüfen Sie, wo es lauscht:
bash systemctl restart mariadb ss -tlnp | grep 3306Sie sehen
0.0.0.0:3306.Legen Sie einen Benutzer mit der IP-Adresse an, von der Sie sich verbinden (zum Beispiel Ihre öffentliche IP
198.51.100.25):SQL CREATE USER 'jan'@'198.51.100.25' IDENTIFIED BY '<STARKES_PASSWORT>'; GRANT ALL PRIVILEGES ON aplikace.* TO 'jan'@'198.51.100.25';Erlauben Sie Port
3306in der Firewall des Kundenbereichs nur von dieser IP-Adresse (Anleitung): Regel Eingehend · Erlauben · TCP · Port3306· Quell-IP / Bereich198.51.100.25. Verwenden Sie den Modus Alles erlauben, fügen Sie darunter zusätzlich eine Regel hinzu: Eingehend · Verwerfen · TCP · Port3306ohne Quell-IP. Regeln werden von oben nach unten ausgewertet, und der erste Treffer gewinnt, sodass Ihre IP durchkommt und alle anderen nicht.Wenn Sie UFW verwenden, erlauben Sie den Port auch dort:
bash ufw allow from 198.51.100.25 to any port 3306 proto tcpallow from 198.51.100.25– nur von Ihrer IP-Adresse.to any port 3306 proto tcp– zu TCP-Port 3306.
Dynamische IP-Adresse
Heimanschlüsse wechseln ihre IP-Adresse oft. Nach einem Wechsel können Sie sich nicht verbinden und müssen die Regeln aktualisieren. Deshalb ist ein SSH-Tunnel für die Verbindung von zu Hause die bessere Wahl.
Datenbank-Backups#
Das Programm mariadb-dump speichert eine Datenbank in eine SQL-Datei, aus der Sie sie jederzeit wiederherstellen können.
Eine Datenbank sichern:
mariadb-dump --single-transaction --routines --events aplikace > /root/aplikace-$(date +%F).sql--single-transaction– erstellt ein konsistentes Backup von InnoDB-Tabellen ohne Sperren, sodass die App weiterlaufen kann.--routines– schließt gespeicherte Prozeduren und Funktionen ein (ohne dieses Flag werden sie nicht gesichert).--events– schließt geplante Ereignisse ein (sonst ebenfalls nicht gesichert). Trigger werden automatisch gesichert.aplikace– der Datenbankname.> /root/aplikace-$(date +%F).sql– speichert die Ausgabe in eine Datei mit dem heutigen Datum im Namen.
Alle Datenbanken auf einmal sichern, komprimiert:
mariadb-dump --single-transaction --routines --events --all-databases | gzip > /root/vsechny-db-$(date +%F).sql.gz--all-databases– alle Datenbanken, einschließlich der Anweisungen zu ihrer Erstellung.| gzip >– komprimiert die Ausgabe; SQL schrumpft in der Regel auf einen Bruchteil seiner Größe.
Wiederherstellen:
mariadb aplikace < /root/aplikace-2026-10-01.sql
gunzip < /root/vsechny-db-2026-10-01.sql.gz | mariadb- Die erste Zeile lädt das Backup einer Datenbank in die bestehende Datenbank
aplikace(existiert sie nicht, legen Sie sie zuerst mitCREATE DATABASEan). - Die zweite stellt das Backup aller Datenbanken wieder her; die Datenbanken legt sie selbst an.
Die Wiederherstellung überschreibt
Die Wiederherstellung aus einem Backup überschreibt die im Backup enthaltenen Tabellen mit ihrem Stand aus dem Backup. Neuere Daten darin gehen verloren. Sind Sie unsicher, stellen Sie das Backup zuerst in eine neue Datenbank wieder her (zum Beispiel aplikace_test) und vergleichen Sie.
Automatische nächtliche Backups und deren Übertragung vom VPS weg behandelt Backups auf einem VPS.
Grundlagen des Performance-Tunings#
Die wichtigste Leistungseinstellung ist innodb_buffer_pool_size: wie viel RAM MariaDB als Cache für Daten und Indizes verwenden darf. Der Standard ist 128 MB.
[mysqld]
innodb_buffer_pool_size = 1G| Einstellung | Was sie tut | Empfohlener Wert | Wann ändern |
|---|---|---|---|
innodb_buffer_pool_size | Größe des Caches für InnoDB-Daten und -Indizes. Je mehr Daten hineinpassen, desto weniger wird von der Festplatte gelesen. | Auf einem VPS, der auch andere Dienste betreibt: ungefähr die Größe Ihrer Datenbanken, höchstens ein Viertel des RAM (zum Beispiel 1G auf einem VPS mit 8 GB). Auf einem reinen Datenbank-VPS bis zu 80 % des RAM. | Wenn die Datenbanken wachsen und Abfragen langsamer werden. Verringern, wenn dem VPS der Speicher ausgeht. |
Starten Sie MariaDB nach der Änderung neu: systemctl restart mariadb. Die Größe Ihrer Datenbanken finden Sie mit dieser Abfrage:
SELECT table_schema AS db, ROUND(SUM(data_length + index_length) / 1024 / 1024) AS mb FROM information_schema.tables GROUP BY table_schema;Überprüfung#
systemctl is-active mariadbgibtactiveaus.mariadb -u aplikace -p aplikace -e "SELECT 1;"gibt nach Eingabe des Passworts eine Tabelle mit der Zahl1aus.ss -tlnp | grep 3306zeigt127.0.0.1:3306(nur lokal) oder0.0.0.0:3306, wenn Sie den direkten Zugriff aktiviert haben.
Fehlerbehebung#
ERROR 1698 (28000): Access denied for user 'root'@'localhost'#
Sie melden sich als Datenbank-root mit Passwort an (mariadb -u root -p) oder als normaler Systembenutzer. Root authentifiziert sich über Unix-Socket: Melden Sie sich am VPS als root an und führen Sie nur mariadb aus, oder verwenden Sie sudo mariadb.
ERROR 1045 (28000): Access denied for user 'aplikace'@'localhost' (using password: YES)#
Falsches Passwort, oder es existiert kein Benutzer mit diesem Host. Prüfen Sie SELECT User, Host FROM mysql.user;. Verbindet sich die App über 127.0.0.1 und der Fehler nennt 'aplikace'@'127.0.0.1', legen Sie den Benutzer auch mit Host 127.0.0.1 an und erteilen Sie ihm dieselben Rechte. Das Passwort können Sie mit ALTER USER erneut setzen.
ERROR 1130 (HY000): Host '198.51.100.25' is not allowed to connect to this MariaDB server#
Für diese IP-Adresse existiert kein Benutzer. Legen Sie einen Benutzer mit einem zu Ihrer IP passenden Host an (siehe Direkter Fernzugriff) oder verwenden Sie einen SSH-Tunnel.
ERROR 2002 (HY000): Can't connect to local … server through socket '/run/mysqld/mysqld.sock' #
MariaDB läuft nicht. Prüfen Sie Status und Log:
systemctl status mariadb
journalctl -u mariadb -n 50journalctl -u mariadb -n 50– die letzten 50 Zeilen des Dienst-Logs. Nach einer Konfigurationsänderung ist die Ursache oft ein Tippfehler in einer.cnf-Datei; das Log nennt die betroffene Zeile.
ERROR 2003 (HY000): Can't connect to … server on '203.0.113.10'#
Die Remote-Verbindung kam nicht durch. Prüfen Sie, dass MariaDB auf 0.0.0.0 lauscht (ss -tlnp | grep 3306), dass sowohl die Firewall im Kundenbereich als auch UFW Port 3306 für Ihre IP erlauben und dass sich Ihre IP-Adresse nicht geändert hat.
Der Import eines Backups meldet Unknown command '\-'#
Neuere Versionen von mariadb-dump fügen am Anfang der Datei eine Zeile ein, die den „Sandbox-Modus“ aktiviert, den weder der MySQL-Client noch ältere MariaDB-Clients verstehen. Importieren Sie das Backup mit einem mariadb-Client derselben oder einer neueren Version. Müssen Sie in MySQL importieren, löschen Sie in einer Kopie der Datei die erste Zeile mit enable the sandbox mode.
Zusammenfassung
- Installieren Sie MariaDB in der Registerkarte Datenbank (MariaDB installieren) oder mit
apt -y install mariadb-server. - Root meldet sich ohne Passwort über Unix-Socket an (
mariadbals root); Apps erhalten eigene Benutzer mit Rechten nur auf ihre eigene Datenbank. - Legen Sie Datenbanken mit
utf8mb4an. - Verbinden Sie sich von Ihrem Computer über einen SSH-Tunnel; direkter Zugriff nur mit
bind-address, einem Benutzer für eine bestimmte IP und einer Firewall. - Sichern Sie mit
mariadb-dump --single-transactionund bewahren Sie Kopien auch außerhalb des VPS auf.
Weiterführende Links#
- MariaDB: mariadb-secure-installation (öffnet sich in einem neuen Fenster)
- MariaDB: mariadb-dump (öffnet sich in einem neuen Fenster)
- MariaDB: Remote connection guide (öffnet sich in einem neuen Fenster)
- MariaDB: InnoDB-Systemvariablen (öffnet sich in einem neuen Fenster)
- HeidiSQL: Hilfe (öffnet sich in einem neuen Fenster)