MariaDB ist ein freies, zu MySQL kompatibles Datenbanksystem und die Standarddatenbank unter Debian und Ubuntu. Diese Anleitung zeigt, wie Sie MariaDB installieren, grundlegend absichern, eine Datenbank für eine Anwendung anlegen und regelmäßige Sicherungen einrichten.
Schritt 1: MariaDB installieren
sudo apt update
sudo apt install -y mariadb-server
sudo systemctl status mariadb --no-pager
Der Dienst wird automatisch gestartet und beim Booten aktiviert. Die installierte Version zeigt:
mariadb --version
Schritt 2: Grundabsicherung
MariaDB bringt ein Skript mit, das die wichtigsten Sicherheitseinstellungen vornimmt:
sudo mariadb-secure-installation
Empfohlene Antworten:
- Enter current password for root: einfach Enter drücken
- Switch to unix_socket authentication:
n, unter Debian und Ubuntu ist das bereits aktiv - Change the root password:
n. Root meldet sich über den Systembenutzer root an und braucht kein eigenes Passwort. - Remove anonymous users:
Y - Disallow root login remotely:
Y - Remove test database:
Y - Reload privilege tables:
Y
Als Root-Benutzer des Servers melden Sie sich nun ohne Passwort an der Datenbank an:
sudo mariadb
Schritt 3: Datenbank und Benutzer anlegen
Verwenden Sie für jede Anwendung eine eigene Datenbank und einen eigenen Benutzer mit nur den nötigen Rechten:
sudo mariadb <<'EOF'
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'EinSehrLangesPasswort!2026';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EOF
Ersetzen Sie Datenbankname, Benutzer und Passwort. Ein sicheres Passwort erzeugen Sie zum Beispiel mit openssl rand -base64 24.
Testen Sie die Anmeldung mit dem neuen Benutzer:
mariadb -u appuser -p appdb -e "SELECT DATABASE(), CURRENT_USER();"
Schritt 4: Netzwerkzugriff
Standardmäßig lauscht MariaDB nur auf 127.0.0.1 und ist von außen nicht erreichbar. Prüfen Sie das mit:
sudo ss -tlpn | grep 3306
Die Ausgabe sollte 127.0.0.1:3306 zeigen. Lassen Sie diese Einstellung möglichst unverändert. Für den Zugriff von Ihrem Computer, etwa mit HeidiSQL oder DBeaver, verwenden Sie einen SSH-Tunnel:
ssh -L 3306:127.0.0.1:3306 benutzer@IHRE-SERVER-IP
Ihr Datenbankprogramm verbindet sich dann mit 127.0.0.1:3306 auf Ihrem eigenen Computer. Viele Programme bieten die SSH-Verbindung auch direkt in den Verbindungseinstellungen an.
Wenn ein anderer Server zugreifen muss
Benötigt ein anderer Server direkten Zugriff, setzen Sie in /etc/mysql/mariadb.conf.d/50-server.cnf die Option bind-address auf die interne IP-Adresse des Servers. Legen Sie den Benutzer dann mit der IP-Adresse des zugreifenden Servers an, also 'appuser'@'10.0.0.5'. Erlauben Sie den Port 3306 in der Firewall nur für diese Adresse. Öffnen Sie den Datenbankport niemals für das gesamte Internet.
Schritt 5: Grundlegende Leistungseinstellungen
Der wichtigste Wert ist die Größe des Zwischenspeichers für Daten und Indizes, innodb_buffer_pool_size. Auf einem Server, der hauptsächlich als Datenbankserver dient, sind 50 bis 70 % des Arbeitsspeichers üblich. Läuft auf dem Server zusätzlich eine Webanwendung, wählen Sie einen kleineren Wert:
sudo tee /etc/mysql/mariadb.conf.d/99-custom.cnf > /dev/null <<'EOF'
[mysqld]
innodb_buffer_pool_size = 1G
max_connections = 100
EOF
sudo systemctl restart mariadb
Schritt 6: Regelmäßige Sicherung
Dieses Beispiel sichert alle Datenbanken täglich um 2:30 Uhr und bewahrt die Sicherungen 14 Tage lang auf:
sudo mkdir -p /var/backups/mariadb
sudo tee /etc/cron.d/mariadb-backup > /dev/null <<'EOF'
30 2 * * * root mariadb-dump --all-databases --single-transaction --routines --events | gzip > /var/backups/mariadb/all-$(date +\%F).sql.gz && find /var/backups/mariadb -name '*.sql.gz' -mtime +14 -delete
EOF
Die Option --single-transaction erstellt eine konsistente Sicherung, ohne InnoDB-Tabellen zu sperren. Kopieren Sie die Sicherungen zusätzlich auf einen externen Speicher, etwa mit restic, siehe Server-Backups mit restic auf ein externes Ziel.
Eine Sicherung spielen Sie so wieder ein:
gunzip < /var/backups/mariadb/all-2026-10-26.sql.gz | sudo mariadb
Updates
MariaDB erhält Sicherheitsupdates über die normalen Paketquellen Ihrer Distribution. Mit unattended-upgrades werden diese automatisch installiert. Versionssprünge, etwa bei einem Upgrade der Distribution, prüfen Sie vorher in einer Testumgebung.
Fehlerbehebung
„Access denied for user 'root'@'localhost'“
Melden Sie sich mit sudo mariadb an, nicht mit mariadb -u root -p. Root verwendet die Anmeldung über den Systembenutzer.
MariaDB startet nicht
Prüfen Sie die Fehlermeldung mit sudo journalctl -u mariadb -n 50. Häufige Ursachen sind eine volle Festplatte oder ein zu großer Wert für innodb_buffer_pool_size.
„Too many connections“
Ihre Anwendung öffnet mehr Verbindungen als erlaubt. Erhöhen Sie max_connections moderat oder prüfen Sie, ob die Anwendung Verbindungen richtig schließt.
Wie Sie dazu einen Webserver einrichten, zeigt der Artikel nginx mit PHP-FPM unter Debian und Ubuntu einrichten.
