Nachdem ich meine Projektstruktur und Virtual Hosts automatisiert hatte, fehlte noch ein entscheidender Schritt:
👉 Datenbank + Benutzer anlegen
Manuell bedeutet das jedes Mal:
- MySQL öffnen
- Datenbank erstellen
- User anlegen
- Rechte setzen
👉 fehleranfällig und nervig.
💡 Ziel
Ein Skript, das:
- Credentials aus
.envnutzt - Datenbank + User erstellt
- sicher und reproduzierbar ist
🔧 Das Skript
#!/usr/bin/env bash
set -euo pipefail
NAME="${1:-}"
NAME="${NAME%/}"
if [[ -z "$NAME" ]]; then
echo "Usage: create_database.sh <name>"
exit 1
fi
WP_DIR="$HOME/www/$NAME"
ENV_FILE="$WP_DIR/.env"
mkdir -p "$WP_DIR"
cd "$WP_DIR"
# --- .env pr�fen ---
if [[ ! -f "$ENV_FILE" ]]; then
echo "? .env nicht gefunden in $WP_DIR"
exit 1
fi
# shellcheck disable=SC1090
source "$ENV_FILE"
# --- Variablen pr�fen ---
: "${DB_NAME:?? DB_NAME fehlt in .env}"
: "${DB_USER:?? DB_USER fehlt in .env}"
: "${DB_PASSWORD:?? DB_PASSWORD fehlt in .env}"
echo "? Erstelle Datenbank: $DB_NAME"
echo "? Benutzer: $DB_USER"
# --- MySQL Commands ---
SQL=$(cat <<EOF
CREATE DATABASE IF NOT EXISTS \`$DB_NAME\`;
CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASSWORD';
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOF
)
# --- Ausf�hren ---
if ! echo "$SQL" | sudo mysql; then
echo "? Fehler beim Erstellen der Datenbank"
exit 1
fi
echo "? Datenbank und Benutzer erfolgreich erstellt"
🧠 Wichtige Erkenntnisse
1. .env ist die zentrale Wahrheit
Statt überall Parameter zu übergeben:
DB_NAME
DB_USER
DB_PASSWORD
👉 eine Quelle für alle Skripte
2. Bash kann Variablen validieren
: "${DB_NAME:?Fehlt}"
👉 extrem unterschätztes Feature
3. MySQL-Zugriff via sudo
sudo mysql
👉 funktioniert ohne Passwort
👉 nutzt auth_socket
Perfekt für lokale Dev-Umgebung
4. Idempotenz durch IF NOT EXISTS
CREATE DATABASE IF NOT EXISTS
👉 Script kann mehrfach laufen → kein Problem
5. Sicherheit durch generierte Passwörter
In Kombination mit deinem Credential-Skript:
👉 keine schwachen Passwörter mehr
👉 keine MySQL-Policy-Probleme
🚀 Fazit
Mit einem kleinen Skript wird aus:
„Ich klicke mich durch phpMyAdmin“
👉
„Ich habe ein reproduzierbares Setup“

Schreibe einen Kommentar