Server Tools: Datenbanken
MySQL/MariaDB mit Server Tools: Datenbank und User anlegen, Credential-Dateien, Rechtestufen, Löschen mit Backup der Credentials, Dumps, Restore, Import und Export, Auflisten und Info.
Datenbanken
Das Datenbank-Management arbeitet mit MySQL und MariaDB. Es braucht einen Client (mysql oder mariadb) und ein Dump-Tool (mysqldump oder mariadb-dump). Fehlt eines, melden die db-Befehle das und der Menüpunkt zeigt [mysql not installed]. Alle anderen Funktionen laufen weiter.
Die Zugangsdaten holt das Tool aus der Options-Datei ST_MYSQL_CONFIG_FILE (Standard /root/.my.cnf), siehe Installation. Vor jeder Abfrage testet es die Verbindung mit SELECT 1.
Namen und Rechte-Host
| Wert | Erlaubt |
|---|---|
| Datenbankname | a-z, A-Z, 0-9, _, -, 1 bis 64 Zeichen |
| User-Name | a-z, A-Z, 0-9, _, -, 1 bis 32 Zeichen |
Alle User und Rechte beziehen sich auf den Host localhost. Andere Hosts kann das Tool nicht anlegen.
Datenbank und User anlegen
server-tools db create --name shop_db --user shop_user
server-tools db create --name shop_db --user shop_user --password 'ein-langes-passwort'
Ablauf:
- Namen werden validiert. Ein eigenes Passwort muss mindestens
ST_PASSWORD_MIN_LENGTHZeichen haben, ohne Passwort erzeugt das Tool eines mitST_PASSWORD_LENGTHZeichen. - Die Datenbank wird mit
ST_DEFAULT_CHARSETundST_DEFAULT_COLLATIONangelegt. Existiert sie schon, bricht der Befehl ab. - Der User wird mit
CREATE USER IF NOT EXISTSangelegt. Schlägt das fehl, wird die gerade angelegte Datenbank wieder gelöscht. - Der User erhält
ALL PRIVILEGESauf diese Datenbank. - Die Credential-Datei wird geschrieben und der Vorgang im Audit-Log vermerkt.
Existiert der User bereits, bleibt sein Passwort unverändert (
IF NOT EXISTS). Die Credential-Datei enthält trotzdem das neu übergebene oder erzeugte Passwort. Für vorhandene User legst du die Datenbank deshalb mitdb create-for-useran.
Das Passwort wird am Ende nur angezeigt, wenn stdout ein Terminal ist. Sonst steht dort (hidden - see credentials file).
Credential-Datei
Pfad: <ST_CREDENTIAL_DIR>/<datenbank>.txt, Rechte aus ST_CREDENTIAL_FILE_PERMISSIONS (600 oder 400). Das Beispiel zeigt den Aufbau:
# Database Credentials for: shop_db
# Created: 2026-01-15 10:30:00
# =========================================
Database: shop_db
Username: shop_user
Password: <passwort>
# Connection Strings
# ------------------
# PDO DSN:
# mysql:host=localhost;dbname=shop_db;charset=utf8mb4
#
# Symfony DATABASE_URL:
# mysql://shop_user:<passwort>@localhost:3306/shop_db?charset=utf8mb4
Host localhost, Port 3306 und utf8mb4 sind fest in der Datei eingetragen, unabhängig von der Konfiguration. Das Passwort steht in der DATABASE_URL unverändert. Enthält ein eigenes Passwort Sonderzeichen wie @ oder /, musst du es dort selbst URL-kodieren.
Datenbank für vorhandenen User
server-tools db create-for-user --name shop_staging --user shop_user
Legt nur die Datenbank an und gibt dem vorhandenen User ALL PRIVILEGES. Existiert der User nicht, bricht der Befehl ab. Die Credential-Datei enthält als Passwort den Text (existing user - no password stored).
Rechte vergeben
server-tools db grant --name shop_db --user report_user --level readonly
| Stufe | SQL-Rechte |
|---|---|
all (Standard) |
ALL PRIVILEGES |
readonly |
SELECT |
readwrite |
SELECT, INSERT, UPDATE, DELETE |
Datenbank und User müssen existieren. Vergebene Rechte werden addiert: Wer erst all und danach readonly vergibt, behält ALL PRIVILEGES. Rechte entziehen geht nur über db delete (siehe unten) oder im Menü über "Reassign database to different user".
server-tools db grants --user shop_user
zeigt die GRANT-Anweisungen des Users.
Im Menü gibt es zusätzlich "Reassign database to different user": Es entzieht dem alten User die Rechte und gibt sie dem neuen. Schlägt das Vergeben fehl, bekommt der alte User seine Rechte zurück.
Löschen
# Datenbank löschen, Rechte von shop_user entziehen, User behalten
server-tools db delete --name shop_db --user shop_user
# Datenbank und User löschen
server-tools db delete --name shop_db --user shop_user --drop-user
Ablauf:
- Die Datenbank muss existieren.
- Ist
ST_AUTO_BACKUP=trueund die Credential-Datei vorhanden, wird sie alsdb_<name>_<zeitstempel>.tar.gzinST_BACKUP_DIRgesichert. Das passiert vor der Rückfrage. - Rückfrage
Delete database '<name>'? (y/N):. - Ohne
--drop-user: Existiert der mit--usergenannte User, werden zuerst seine Rechte an der Datenbank entzogen und danach folgtDROP DATABASE. Mit--drop-user: Zuerst folgtDROP DATABASE, danach wird der User gelöscht. - Zum Schluss wird die Credential-Datei entfernt.
Gesichert wird nur die Credential-Datei, nicht der Inhalt der Datenbank. Mache vorher einen Dump mit
db backup.
--drop-user ohne --user löscht nur die Datenbank. Löschst du einen User, verliert er auch seine Rechte auf allen anderen Datenbanken.
Dumps und Backups
server-tools db backup --name shop_db
server-tools db backup-all
Ergebnis: <ST_DB_BACKUP_DIR>/db_<name>_<YYYYMMDD_HHMMSS>.sql.gz mit Rechten 600. Das Verzeichnis wird bei Bedarf mit Rechten 700 angelegt. Der Dump läuft mit --single-transaction --routines --triggers.
backup-all sichert alle Datenbanken außer information_schema, performance_schema, mysql und sys. Datenbanken mit ungültigem Namen werden übersprungen und als Fehler gezählt.
Aufgerufen als CLI-Befehl sichert
db backup-allderzeit nur die erste Datenbank und beendet sich dann mit Exit-Code 1. Im Menü ("Backup all databases") läuft es vollständig durch. Für Scripte sicherst du die Datenbanken einzeln mitdb backup.
Restore und Import
server-tools db restore --name shop_db --file /root/db-backups/db_shop_db_20260115_103000.sql.gz
server-tools db import --name shop_db --file dump.sql
db restore |
db import |
|
|---|---|---|
| Datenbank muss existieren | ja | ja |
| Rückfrage | ja, mit Warnung "will overwrite all data" | nein |
| Formate | .sql, .sql.gz, .sql.zip |
.sql, .sql.gz, .sql.zip |
Beide spielen die Datei einfach in die vorhandene Datenbank ein. Das Tool leert die Datenbank vorher nicht. Ob bestehende Tabellen ersetzt werden, bestimmt der Inhalt des Dumps. Mit mysqldump erzeugte Dumps enthalten standardmäßig DROP TABLE-Anweisungen vor CREATE TABLE.
Export
server-tools db export --name shop_db
server-tools db export --name shop_db --output /root/shop.sql.gz
Erlaubte Endungen sind .sql und .sql.gz. Ohne --output entsteht <ST_DB_BACKUP_DIR>/<name>_export_<zeitstempel>.sql.gz. Das Zielverzeichnis muss vorhanden sein, db export legt es nicht an. Die Datei hat Rechte 600.
Auflisten und Info
server-tools db list
server-tools db info --name shop_db
db list zeigt alle Datenbanken außer den Systemdatenbanken und alle User außer root, mysql.sys, mysql.session, mysql.infoschema und debian-sys-maint als user@host.
db info zeigt Größe in MB, Anzahl der Tabellen, die User mit Rechten auf dieser Datenbank und ob eine Credential-Datei existiert.