Files
OZM-Keks-Handbuch-v1/crumbpage-26-databases.md
Branko May Trinkwald a9ba99edfb Postfix & Datenbank Update
2025-12-30 14:52:46 +01:00

202 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🧭 Crumbpage 26: Datenbanken - Das Gedächtnis des Waldes
**Subtitle:** *Warum Excel keine Datenbank ist*
**Pfad:** 26 von X (Datenhaltung)
**Schwierigkeit:** ⭐⭐⭐ (3/5)
**Zeit:** ~2 Stunden
**Voraussetzungen:** [Pfad 10: Services](crumbpage-10-services-ports.md)
> *"Daten sind das neue Öl. Aber ohne Motor (Datenbank) sind sie nur klebriger Schlamm."* 🛢️
---
## 📋 Was du in diesem Pfad lernst
```
✓ Was ist eine relationale Datenbank? (Tabellen-Theorie)
✓ Der große Krieg: MySQL vs. MariaDB vs. PostgreSQL
✓ Installation von MariaDB (Der offene Standard)
✓ SQL Basics: CREATE, INSERT, SELECT
✓ Sicherheit: mysql_secure_installation
✓ Backup: mysqldump
```
---
## 🎯 Lernziele
Nach diesem Pfad kannst du:
- [ ] Einen Datenbank-Server installieren und absichern
- [ ] Verstehen, warum wir MariaDB statt MySQL nutzen
- [ ] Eine Datenbank für eine Web-App anlegen
- [ ] Einfache SQL-Abfragen schreiben
---
## 🗄️ Die Zettelkasten-Theorie (Konzepte)
Stell dir vor, du hast 1000 Keks-Rezepte.
**Ohne Datenbank (Textdateien):**
Du schreibst alles in eine riesige `rezepte.txt`. Wenn du "Schoko" suchst, musst du die ganze Datei lesen. Langsam.
**Mit Datenbank (SQL):**
Du hast einen riesigen Aktenschrank mit Schubladen (Tabellen).
- Jedes Rezept ist eine Karteikarte (Row).
- Jede Karte hat feste Felder: Name, Zutaten, Backzeit (Columns).
- Der Bibliothekar (SQL-Server) findet "Alle Kekse mit Schoko unter 20 Min Backzeit" in Millisekunden.
### Die drei großen Häuser
Laut deinem Dossier gibt es drei Hauptakteure:
1. **MySQL 🐬:** Der alte König. Stabil, Industriestandard, gehört aber Oracle. Das macht manche nervös.
2. **MariaDB 🦭:** Die Rebellion. Erstellt von den ursprünglichen MySQL-Erfindern. Komplett Open Source, schneller, wilder. **Unsere Wahl für den Standard-Stack.**
3. **PostgreSQL 🐘:** Der Professor. Akademisch, extrem strikt (ACID), kann alles (sogar Geodaten und JSON perfekt). Wenn Datenintegrität wichtiger ist als roher Speed.
---
## 🏗️ Installation & Absicherung
Wir installieren **MariaDB**, weil es im Herzen von Debian/Ubuntu wohnt und "echtes" Open Source ist.
```bash
sudo apt update
sudo apt install mariadb-server
```
**Der Türsteher-Check:**
Läuft der Dienst?
```bash
systemctl status mariadb
```
**Sicherheit zuerst!**
Installierte Datenbanken sind offen wie ein Scheunentor. Wir schließen es ab.
```bash
sudo mysql_secure_installation
```
- Root Passwort setzen? -> Ja.
- Anonyme User entfernen? -> Ja.
- Remote Root Login verbieten? -> Ja.
- Test-DB löschen? -> Ja.
- Tables reloaden? -> Ja.
---
## 🔑 Der Erste Eintritt (`mysql` Shell)
Logge dich als Root in die Datenbank ein:
```bash
sudo mysql -u root -p
```
*(Das `-u` steht für User, das `-p` fragt nach dem Passwort)*
Du bist jetzt in der MariaDB-Shell (`MariaDB [(none)]>`). Hier sprichst du **SQL**.
---
## 🎓 Hands-On: Das Keks-Inventar
Wir bauen eine Datenbank für unsere Keks-Vorräte.
**1. Datenbank erstellen**
```sql
CREATE DATABASE keks_lager;
USE keks_lager;
```
*(Achte auf das Semikolon `;` am Ende jedes Befehls! Das ist wie der Punkt im Satz.)*
**2. Tabelle anlegen (Der Bauplan)**
Wir brauchen eine Tabelle für Kekse.
```sql
CREATE TABLE kekse (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
typ VARCHAR(30),
anzahl INT,
bewertung INT
);
```
**3. Kekse einlagern (INSERT)**
```sql
INSERT INTO kekse (name, typ, anzahl, bewertung) VALUES ('Schoko-Kruste', 'Schokolade', 42, 5);
INSERT INTO kekse (name, typ, anzahl, bewertung) VALUES ('Hafer-Glück', 'Gesund', 10, 3);
INSERT INTO kekse (name, typ, anzahl, bewertung) VALUES ('Zimt-Stern', 'Weihnachten', 100, 4);
```
**4. Kekse suchen (SELECT)**
```sql
-- Zeig mir alles!
SELECT * FROM kekse;
-- Zeig mir nur die guten Sachen
SELECT name, anzahl FROM kekse WHERE bewertung >= 4;
```
**5. Kekse essen (UPDATE)**
Jemand hat 2 Schoko-Krusten gegessen.
```sql
UPDATE kekse SET anzahl = anzahl - 2 WHERE name = 'Schoko-Kruste';
```
**6. User für Apps anlegen**
Sicherheitsregel: **Niemals** den `root` User in einer Web-App (z.B. WordPress/CrumbForest) benutzen!
```sql
CREATE USER 'baekker'@'localhost' IDENTIFIED BY 'geheimes_passwort';
GRANT ALL PRIVILEGES ON keks_lager.* TO 'baekker'@'localhost';
FLUSH PRIVILEGES;
```
**7. Raus hier**
```sql
EXIT;
```
---
## 📦 Backup & Restore (Die Versicherung)
Datenbanken liegen nicht einfach als Datei herum (technisch schon, in `/var/lib/mysql`, aber fass die niemals an!).
Wir nutzen Tools zum Exportieren.
**Backup (Der Dump):**
```bash
mysqldump -u root -p keks_lager > mein_backup.sql
```
Dies erzeugt eine Textdatei mit allen SQL-Befehlen, um die Datenbank wiederherzustellen.
**Restore (Das Einspielen):**
```bash
mysql -u root -p keks_lager < mein_backup.sql
```
---
## 🚀 Advanced: Cluster & Replikation (Ausblick)
In deinem Dossier (`db_overview.md`) standen spannende Dinge über **Galera Cluster**.
Das ist für Profis: Wenn ein Server ausfällt, übernimmt der andere sofort.
Bei MySQL/MariaDB Standard-Replikation gibt es einen "Master" (Schreibt) und "Slaves" (Lesen).
Galera ist "Multi-Master" (Alle schreiben).
Für den Anfang reicht uns ein einzelner Server. Aber wisse: Der Wald kann wachsen. 🌱
---
## 💭 Reflexion
Eine Datenbank ist das Herz fast jeder modernen Anwendung. Ob WordPress, Nextcloud oder deine eigene App irgendwo läuft immer ein `SELECT * FROM`.
Du hast jetzt gelernt, wie man dieses Herz zum Schlagen bringt und Daten sicher speichert.
Vergiss nie: **Kein Backup, kein Mitleid.** Ein `DROP DATABASE` fragt nicht "Bist du sicher?". Es löscht einfach.
---
**Navigation:**
[← Zurück: Postfix](crumbpage-25-postfix.md) | [Zurück zur Übersicht](crumbforest-admin-vektor.md)