Database Servers on SUSE: MariaDB & PostgreSQL (Artikel 162)
Betrieb von Datenbank-Servern unter SUSE. Erfahren Sie alles über MariaDB-Optimierung, PostgreSQL-Setup via YaST und den performanten Betrieb auf Btrfs und XFS.
# Database Services on SUSE: MariaDB und PostgreSQL Masterclass
TL;DR / Management Summary In der SUSE-Welt ist MariaDB der unangefochtene Standard für relationale Datenbanken (ersetzt das klassische MySQL). Für komplexere Enterprise-Szenarien bietet SUSE hervorragende Unterstützung für PostgreSQL. Ein Senior Admin muss wissen, dass Datenbank-Workloads auf dem Standard-Btrfs-Dateisystem Performance-Probleme verursachen können (CoW-Fragmentation). Wir lernen, wie man Datenbanken unter SUSE installiert, optimiert und sicher betreibt.
# 1. Einführung & Architektur
Die SUSE Datenbank-Philosophie.
SUSE liefert MariaDB und PostgreSQL in stabilen Versionen aus, die eng mit dem System-Logging und der Firewall verzahnt sind.
# Architektur-Übersicht (Mermaid)
graph LR
A[Applikation] -->|SQL| B[SUSE: MariaDB / PostgreSQL]
B --> C{Storage Choice}
C -->|Option A: Btrfs| D[Subvolume with +C NoCoW]
C -->|Option B: XFS| E[High-Performance Partition]
B --> F[Logging: Journald / messages]
G[YaST DB Module] --> B
# 2. MariaDB: Der SUSE Standard
Schnell installiert, sicher konfiguriert.
# Schritt 1: Installation
sudo zypper install mariadb mariadb-client
sudo systemctl enable --now mariadb
# Schritt 2: Hardening
sudo mariadb-secure-installation
# Tipp: Deaktivieren Sie Remote-Root-Logins und löschen Sie die Test-DB.
# 3. PostgreSQL: Die Enterprise Alternative
Kraftvoll und stabil.
# Installation
sudo zypper install postgresql15-server postgresql15-contrib
sudo postgresql-setup --initdb # Initialisiert die DB-Dateien
sudo systemctl enable --now postgresql
# Management via YaST
Für PostgreSQL bietet SUSE ein eigenes YaST-Modul zur Grundkonfiguration (Ports, IP-Binding).
sudo yast2 postgresql
# 4. Day-2 Operations: Performance & Storage
Den Flaschenhals Btrfs bändigen.
Wie in Artikel 153 beschrieben, ist Copy-on-Write (CoW) Gift für Datenbank-Files (Fragmentierung).
# Das NoCoW-Setup
Wenn Ihre Datenbank unter /var/lib/mysql liegt:
# Vor der ersten Daten-Erstellung!
sudo mkdir -p /var/lib/mysql
sudo chattr +C /var/lib/mysql
# Performance Check
Nutzen Sie mysqltuner (für MariaDB) oder pg_activity (für PostgreSQL), um Engpässe live zu identifizieren.
sudo zypper install mysqltuner
mysqltuner
# 5. Troubleshooting & “War Stories”
Wenn die DB steht.
# Story 1: “Der hängende Shutdown”
Symptom: systemctl stop mariadb dauert 10 Minuten oder bricht mit einem Fehler ab.
Ursache: Die Datenbank ist sehr groß und hat viele “Dirty Pages” im RAM (Buffer Pool), die erst auf die Disk geschrieben werden müssen.
Lösung: Erhöhen Sie den Timeout in der systemd-Unit oder führen Sie manuell SET GLOBAL innodb_fast_shutdown = 0; vor dem Stop aus, um einen sauberen Flush zu erzwingen.
# Story 2: “Postgres Peer Authentication Error”
Symptom: Ein lokaler User kann sich nicht mit psql einloggen, obwohl das Passwort stimmt.
Ursache: In RHEL/SUSE steht die pg_hba.conf standardmäßig auf peer. Das bedeutet, der Linux-Username muss exakt zum DB-Usernamen passen.
Lösung: Stellen Sie in /var/lib/pgsql/data/pg_hba.conf auf md5 oder scram-sha-256 um, wenn Sie Passwörter nutzen wollen.
# 6. Fazit & Empfehlung
- Dateisystem: Nutzen Sie XFS für dedizierte Datenbank-Partitionen. Es ist performanter als Btrfs für SQL-Workloads.
- Wahl: MariaDB für klassische CMS (WordPress, Drupal) und Web-Apps. PostgreSQL für komplexe Business-Logik und große Datenmengen.
- Backup: Nutzen Sie
mysqldumpoderpg_dumpfür logische Backups und VM-Snapshots für Desaster Recovery.
# Anhang: Cheatsheet
| Aufgabe | MariaDB | PostgreSQL |
|---|---|---|
| Status prüfen | mysqladmin status |
pg_isready |
| CLI Login | mariadb -u root -p |
sudo -u postgres psql |
| Version | mariadb --version |
psql --version |
| Log-Pfad | /var/log/mysql/ |
/var/lib/pgsql/data/log/ |
| Config-Check | mysqld --print-defaults |
sudo -u postgres postgres -C ... |
| Backup | mariadb-dump --all-databases |
pg_dumpall -U postgres |