202 lines
5.7 KiB
Markdown
202 lines
5.7 KiB
Markdown
# 🧭 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)
|