Zum Inhalt springen
CitexNode
Alle Anleitungen

MariaDB einrichten

Installieren, absichern, Datenbank und Benutzer anlegen, Zugriff von außen nur gezielt, Sicherung mit mariadb-dump.

5 Min. Lesezeit

MariaDB ist der Datenbankserver, den die meisten PHP-Anwendungen wie WordPress erwarten. Diese Anleitung installiert ihn aus den Paketquellen deiner Distribution.

Gilt für Debian 12 und 13, Ubuntu 22.04 und 24.04, AlmaLinux 9 und Rocky Linux 9. Alle Befehle laufen als root, Anmeldung siehe Per SSH verbinden.

Installieren

Debian und Ubuntu:

bash
apt update
apt install -y mariadb-server

AlmaLinux und Rocky Linux:

bash
dnf install -y mariadb-server
systemctl enable --now mariadb

Läuft der Dienst?

bash
systemctl status mariadb
mariadb --version

Absichern

bash
mariadb-secure-installation

Das Skript stellt ein paar Fragen. Gute Antworten für einen neuen Server:

FrageAntwort
Enter current password for rooteinfach Enter
Switch to unix_socket authenticationn (root meldet sich schon über den Socket an)
Change the root passwordn
Remove anonymous usersy
Disallow root login remotelyy
Remove test databasey
Reload privilege tablesy

Danach kommt root nur noch lokal als Linux-root in die Datenbank, ohne Passwort:

bash
mariadb

Mit exit verlässt du die Konsole wieder.

Datenbank und Benutzer anlegen

Jede Anwendung bekommt eine eigene Datenbank und einen eigenen Benutzer. Nimm nie root für eine Anwendung. Erzeug zuerst ein starkes Passwort:

bash
openssl rand -base64 24

Dann in der MariaDB-Konsole (mariadb), mit deinen Namen und dem Passwort:

sql
CREATE DATABASE meineapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'meineapp'@'localhost' IDENTIFIED BY 'DEIN-PASSWORT';
GRANT ALL PRIVILEGES ON meineapp.* TO 'meineapp'@'localhost';
FLUSH PRIVILEGES;

'meineapp'@'localhost' heißt: Der Benutzer darf sich nur vom Server selbst anmelden. Für eine Anwendung auf demselben vServer ist das richtig.

Prüfen, ob es geklappt hat

bash
mariadb -u meineapp -p meineapp -e 'SELECT CURRENT_USER(), DATABASE();'

Nach dem Passwort sollte meineapp@localhost und meineapp erscheinen.

Zugriff von außen, nur wenn nötig

Läuft die Anwendung auf demselben Server, lass diesen Abschnitt weg. MariaDB hört dann nur auf 127.0.0.1, und das ist der sicherste Zustand.

Brauchst du den Zugriff von einem anderen Rechner, dann nur von einer festen Adresse aus. Als Beispiel steht 203.0.113.10 für die Adresse, von der aus du zugreifst.

  1. MariaDB auf alle Adressen hören lassen. Die Datei ist je nach System eine andere:

    • Debian und Ubuntu: /etc/mysql/mariadb.conf.d/50-server.cnf
    • AlmaLinux und Rocky Linux: /etc/my.cnf.d/mariadb-server.cnf

    Im Abschnitt [mysqld] (Debian/Ubuntu) bzw. [mariadb] oder [mysqld] (Alma/Rocky):

    ini
    bind-address = 0.0.0.0

    Dann systemctl restart mariadb.

  2. Einen Benutzer nur für diese Adresse anlegen:

    sql
    CREATE USER 'meineapp'@'203.0.113.10' IDENTIFIED BY 'DEIN-PASSWORT';
    GRANT ALL PRIVILEGES ON meineapp.* TO 'meineapp'@'203.0.113.10';
    FLUSH PRIVILEGES;

    Nimm nicht '%' als Host. Das erlaubt Anmeldeversuche von überall.

  3. Port 3306 in der Firewall nur für diese Adresse öffnen.

    Debian und Ubuntu mit ufw:

    bash
    ufw allow from 203.0.113.10 to any port 3306 proto tcp

    AlmaLinux und Rocky Linux mit firewalld:

    bash
    firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="3306" protocol="tcp" accept'
    firewall-cmd --reload

Sichern mit mariadb-dump

Ein Dump ist eine SQL-Datei, aus der du die Datenbank wiederherstellen kannst. Leg einen Ordner an und sichere eine Datenbank:

bash
mkdir -p /var/backups/mariadb
chmod 700 /var/backups/mariadb
mariadb-dump --single-transaction --routines --triggers meineapp | gzip > /var/backups/mariadb/meineapp-$(date +%F).sql.gz

Alle Datenbanken auf einmal:

bash
mariadb-dump --single-transaction --routines --triggers --all-databases | gzip > /var/backups/mariadb/alle-$(date +%F).sql.gz

--single-transaction erstellt einen stimmigen Stand, ohne die Tabellen zu sperren (für InnoDB, den Standard).

Zurückspielen in eine leere Datenbank:

bash
gunzip -c /var/backups/mariadb/meineapp-2026-11-05.sql.gz | mariadb meineapp

Ein Dump auf demselben Server schützt nicht, wenn der Server weg ist. Wie du ihn jede Nacht automatisch anlegst und außer Haus kopierst, steht in Cronjobs und Timer und Backups einrichten.

Häufige Fehler

  • ERROR 1045 (28000): Access denied. Falsches Passwort, oder der Benutzer existiert nur für einen anderen Host. SELECT User, Host FROM mysql.user; zeigt, welche es gibt.
  • ERROR 2002: Can't connect to local server through socket. Der Dienst läuft nicht. systemctl status mariadb und journalctl -u mariadb zeigen den Grund, oft eine volle Platte (df -h).
  • Von außen kommt keine Verbindung. Prüf mit ss -tlnp | grep 3306, ob MariaDB auf 0.0.0.0 hört, dann die Firewall und den Host des Benutzers.
  • Umlaute oder Emojis kaputt. Die Datenbank wurde nicht mit utf8mb4 angelegt. Für neue Datenbanken die Zeile oben nehmen.

Wie es weitergeht

Kommst du nicht weiter, schreib uns ein Ticket.