Der Weg zum Fullstack-Developer

Meine Erfahrungen, Auffrischung meiner Programmierkenntnisse und mein persönliches Knowledge-Management

🗄️ Datenbank automatisch erstellen mit Bash

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 .env nutzt
  • 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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert