Hey zusammen

,
wir hatten bei uns neulich das Thema „Uh oh, gehen uns gleich die DB‑Verbindungen aus?“ – deswegen hier mein kompakter, praxisnaher Leitfaden. Wenn’s hilft: gern übernehmen, anpassen, weitergeben.
1) Schnellcheck ohne Extra-Tools
Code: Alles auswählen
Direkt auf der MySQL laufen lassen (CLI oder phpMyAdmin). So seht ihr **Kapazität** und **Spitzenwerte**:
-- Konfiguration & bisheriger Spitzenwert (seit letztem Restart)
SHOW VARIABLES LIKE 'max_connections';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
-- Aktueller „Pegelstand“
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Threads_running';
-- Hinweise auf echte Probleme
SHOW GLOBAL STATUS LIKE 'Connection_errors_max_connections';
SHOW GLOBAL STATUS LIKE 'Aborted_connects';
```
Faustregel (bewährt):Ab ~80 % Auslastung sollte ein Alarm losgehen.
Formel: `Max_used_connections / max_connections >= 0.8` ⇒ Kapazität/Optimierung checken.
Tipp: Für Live-Einblicke lieber das **Performance Schema** nutzen statt der alten `PROCESSLIST`. Geringer Overhead, deutlich aussagekräftiger.
—
2) Mini-Alarm ohne „großes“ Monitoring (Cron + Mail/Slack)
Code: Alles auswählen
Wenn ihr (noch) keinen Agent installieren wollt, reicht ein kleines Script. Nutzt am besten eine **~/.my.cnf** mit Zugriffsdaten (damit nichts im Script steht). Beispiel-Bash (jede Minute via Cron):
```
#!/usr/bin/env bash
# Datei: /usr/local/bin/mysql-conn-watch.sh
# Rechte: chmod +x /usr/local/bin/mysql-conn-watch.sh
MAX_CONN=$(mysql -N -B -e "SHOW VARIABLES LIKE 'max_connections';" | awk '{print $2}')
MAX_USED=$(mysql -N -B -e "SHOW GLOBAL STATUS LIKE 'Max_used_connections';" | awk '{print $2}')
# Prozent grob berechnen (Integer reicht hier)
if [ -z "$MAX_CONN" ] || [ -z "$MAX_USED" ] || [ "$MAX_CONN" -eq 0 ]; then
exit 0
fi
PCT=$(( 100 * MAX_USED / MAX_CONN ))
THRESHOLD=80
RECIPIENT="admin@example.com"
if [ "$PCT" -ge "$THRESHOLD" ]; then
HOST=$(hostname)
MSG="Warnung (${HOST}): MySQL-Verbindungen bei ${PCT}% (Max_used=${MAX_USED} / max_connections=${MAX_CONN})."
# Variante 1: Mail
echo "$MSG" | mail -s "ALARM: MySQL Connections ${PCT}%" "$RECIPIENT"
# Variante 2: Slack/Webhook etc. (optional)
fi
```
Cron (root):**
```
* * * * * /usr/local/bin/mysql-conn-watch.sh > /dev/null 2>&1
```
3) Vollwertiges Monitoring (Grafiken, Historie, Alerts – sehr empfehlenswert)
Wenn’s dauerhaft sauber sein soll, nehmt eins von diesen Setups:
Code: Alles auswählen
A) Open Source (on‑prem, kostenfrei)**
- **Prometheus + Grafana + mysqld_exporter**
Liefert u. a. `mysql_global_status_threads_connected`, `mysql_global_variables_max_connections`, `mysql_global_status_max_used_connections`. Es gibt fertige Dashboards & Alerts.
*Beispiel-Alert (PromQL):*
```
max_over_time(mysql_global_status_max_used_connections[5m])
/ mysql_global_variables_max_connections > 0.8
```
- **Percona Monitoring & Management (PMM)**
Komplette Suite inkl. Query-Analytics. Sehr stark, schnell aufgesetzt (Docker reicht).
B) SaaS (falls ihr sowieso APM nutzt)**
- **Datadog (Database Monitoring)** oder **New Relic**
Beide bieten MySQL-Integrationen, Verbindungsmetriken, Slow Queries, Dashboards & Benachrichtigungen ohne viel Gefrickel.
—
4) phpBB-spezifische Tipps (wo’s oft knallt)
- **Debug/SQL-Infos kurzzeitig aktivieren** (nur für Admins): Im Footer zeigt phpBB die Queries & Zeiten – ihr seht sofort „teure“ Seiten und ob Requests „lang hängen“. Danach wieder ausmachen.
- **Keine persistenten Verbindungen** erzwingen: phpBB arbeitet standardmäßig ohne `pconnect`. Persistente Verbindungen lassen den gleichzeitigen Bedarf sonst hochschnellen.
- **Cache prüfen** (phpBB-/OPcache/FPM): Wenn PHP-FPM zu viele gleichzeitige Worker zulässt, schießt die Verbindungskurve hoch, obwohl die DB selbst okay wäre.
—
5) Praxis: Kapazität richtig planen (kurz & ehrlich)
Code: Alles auswählen
- Rechnet vom Webstack aus rückwärts: Bei PHP‑FPM z. B. `pm.max_children` × (typisch 1 DB‑Conn/Request) + Sicherheits‑Puffer.
- Sinnvolle Timeouts setzen (`wait_timeout`, `interactive_timeout`), damit „Sleeping“-Verbindungen nicht ewig liegen bleiben.
- **Slow Query Log** aktivieren (z. B. `long_query_time=1`): Oft sind **langsaaaaame** Queries der eigentliche Grund für Connection-Staus.
- Regelmäßig auf **Connection-Leaks** achten (lange „Sleep“-Sessions, nie geschlossene Verbindungen).
6) Wenn’s brennt (Schnellhilfe‑Checkliste)
Code: Alles auswählen
- Spitzenverbrauch ansehen: `Max_used_connections` vs. `max_connections`.
- Akut aktive Verbindungen: `Threads_connected`, „hängende“ Queries/Locks?
- PHP‑FPM/Worker zu hoch? (Traffic‑Peak? Cron-Welle?)
- Slow‑Query‑Log an, problematische Endpunkte/Queries identifizieren.
- Kurzfristig `max_connections` moderat erhöhen, danach sauber optimieren (Schema/Indexing, Caching, Query‑Tuning).
TL;DR
- **Schnell**: Bordmittel checken + ab 80 % Alarm.
- **Einfach**: Cron‑Script wie oben → Mail/Slack, fertig.
- **Dauerhaft**: Prometheus/Grafana mit `mysqld_exporter` **oder** Percona PMM.
- **phpBB**: Kurzzeitig Debug/SQL‑Infos nutzen, keine persistenten Verbindungen, FPM‑Einstellungen im Blick behalten.
Viel Erfolg & happy monitoring!
