Ein umfassender Leitfaden zur mysqli_stat-Funktion in PHP
Erfahren Sie, wie mysqli_stat in PHP den aktuellen Status des MySQL-Servers als Zeichenkette zurückgibt und wie Sie die Ausgabe sinnvoll nutzen.
Wenn Sie mit MySQL-Datenbanken in PHP arbeiten, stellt die mysqli-Erweiterung viele Funktionen für die Kommunikation mit dem Server bereit. mysqli_stat ist die einfache Funktion für Systemprüfungen: Sie fragt den MySQL-Server nach einer einzelnen Zeile mit Live-Status – Laufzeit, Anzahl der ausgeführten Abfragen, Anzahl der offenen Threads und so weiter.
Dieser Leitfaden erklärt, was mysqli_stat zurückgibt, wie Sie die Funktion sowohl im prozeduralen als auch im objektorientierten Stil aufrufen, wie Sie die Rohausgabe in verwendbare Zahlen umwandeln und welche häufigen Fallstricke Sie beachten sollten.
mysqli_statist nicht die Dateisystem-Funktionstat(). Wenn Sie nach Datei-Metadaten (Größe, Berechtigungen, Inode) suchen, lesen Sie stattdessen stat in PHP und fstat.
Was mysqli_stat tut
mysqli_stat ist eine eingebaute Funktion, die den aktuellen Status des MySQL-Servers als einzelne, durch Leerzeichen getrennte Zeichenkette zurückgibt. Sie ist das PHP-Äquivalent zum Ausführen von mysqladmin status auf der Befehlszeile – eine schnelle Momentaufnahme, kein vollständiges Performance-Dump.
Ein typischer Rückgabewert sieht so aus:
Uptime: 272701 Threads: 1 Questions: 18 Slow queries: 0 Opens: 17 Flush tables: 1 Open tables: 5 Queries per second avg: 0.000Die Felder bedeuten:
| Feld | Bedeutung |
|---|---|
Uptime | Sekunden, die der Server läuft |
Threads | Aktuell offene Client-Verbindungen |
Questions | Seit dem Start ausgeführte Anweisungen |
Slow queries | Abfragen, die long_query_time überschritten haben |
Opens | Vom Server geöffnete Tabellen |
Open tables | Aktuell geöffnete Tabellen |
Queries per second avg | Durchschnittlicher Abfrage-Durchsatz |
Syntax
// Procedural style
mysqli_stat(mysqli $connection): string|false
// Object-oriented style
$connection->stat(): string|falseDie Funktion nimmt den Verbindungslink entgegen, der von mysqli_connect (prozedural) oder einem mysqli-Objekt (OOP) zurückgegeben wird, und gibt bei Erfolg die Status-Zeichenkette oder bei einem Fehler false zurück (zum Beispiel wenn die Verbindung unterbrochen wurde).
Grundlegende Verwendung
Prozeduraler Stil
Zuerst verbinden, dann den Status lesen. Behandeln Sie einen false-Rückgabewert immer als Fehler.
<?php
$connection = mysqli_connect('localhost', 'username', 'password', 'mydatabase');
if (!$connection) {
die('Connection failed: ' . mysqli_connect_error());
}
$status = mysqli_stat($connection);
if ($status === false) {
echo 'Error: ' . mysqli_error($connection);
} else {
echo $status;
}Objektorientierter Stil
Derselbe Aufruf als Methode des mysqli-Objekts:
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'mydatabase');
if ($mysqli->connect_errno) {
die('Connection failed: ' . $mysqli->connect_error);
}
echo $mysqli->stat();Den Status in Zahlen umwandeln
Die Rohzeichenkette eignet sich gut für das Logging, aber für das Monitoring benötigen Sie in der Regel einzelne Werte. Jedes Feld hat das Format Name: Wert und ist durch zwei Leerzeichen getrennt, sodass Sie es in eine Schlüssel/Wert-Map aufteilen können:
<?php
function parseMysqlStat(string $status): array
{
$result = [];
foreach (explode(' ', $status) as $pair) {
// Each pair looks like "Uptime: 272701"
[$key, $value] = array_map('trim', explode(':', $pair, 2));
$result[$key] = $value;
}
return $result;
}
$status = 'Uptime: 272701 Threads: 1 Questions: 18 Slow queries: 0 Opens: 17 Flush tables: 1 Open tables: 5 Queries per second avg: 0.000';
$stats = parseMysqlStat($status);
echo 'Uptime in seconds: ' . $stats['Uptime'] . PHP_EOL;
echo 'Active threads: ' . $stats['Threads'] . PHP_EOL;
echo 'Slow queries: ' . $stats['Slow queries'] . PHP_EOL;Ausgabe:
Uptime in seconds: 272701
Active threads: 1
Slow queries: 0Jetzt lassen sich $stats['Uptime'] und $stats['Slow queries'] leicht mit Schwellenwerten versehen, überwachen oder als Graph darstellen.
Häufige Anwendungsfälle
- Verfügbarkeitsprüfung. Rufen Sie
mysqli_statin einem Health-Check-Endpunkt auf; wenn esfalsezurückgibt, ist die Datenbank nicht erreichbar. - Leichtgewichtiges Monitoring. Messen Sie
ThreadsundQueries per second avgin regelmäßigen Abständen, um Lastspitzen zu erkennen. - Langsame Abfragen erkennen. Ein steigender
Slow queries-Zähler ist ein frühes Signal dafür, dass ein Index fehlt.
Fallstricke
- Es wird eine Zeichenkette zurückgegeben, kein Array.
var_dumpauf das Ergebnis zeigt eine einzelne Zeichenkette. Parsen Sie diese selbst (siehe oben), bevor Sie mathematische Operationen auf den Werten durchführen. - Prüfen Sie auf
false, nicht auf leer. Bei einer unterbrochenen Verbindung gibt die Funktion den booleschen Wertfalsezurück. Verwenden Sie einen strikten Vergleich (=== false), um ihn nicht mit einer leeren Zeichenkette zu verwechseln. - Es ist eine Momentaufnahme, keine Historie. Werte wie
Questionssind kumulativ seit dem Serverstart; um eine Rate zu messen, müssen Sie zweimal samplen und subtrahieren. - Eine gültige Verbindung wird benötigt. Wenn die Verbindung fehlgeschlagen ist, erzeugt der Aufruf von
mysqli_statWarnungen oder Fehler. Überprüfen Sie immer zuerst die Verbindung – siehe mysqli_connect_error.
Verwandte Funktionen
- mysqli_connect — Verbindung öffnen, die
mysqli_statbenötigt. - mysqli_get_server_info — die Versionszeichenkette des Servers.
- mysqli_ping — eine Verbindung prüfen (und optional wiederherstellen).
Fazit
mysqli_stat ist ein kleines, aber praktisches Werkzeug zur Überwachung eines MySQL-Servers aus PHP heraus. Es gibt eine einzelne Statuszeichenkette mit Laufzeit-, Thread- und Abfragemetriken zurück. Prüfen Sie das Ergebnis gegen false, um eine unterbrochene Verbindung zu erkennen, und parsen Sie die Zeichenkette in eine Schlüssel/Wert-Map, wenn Sie die einzelnen Zahlen für Health-Checks oder Dashboards benötigen.