Start · Sprachen · PHP · Referenz · mysql_list_processes

mysql_list_processes

Funktion

Gibt eine Liste der aktuell laufenden MySQL-Prozesse auf dem Server zurück.

seit PHP 4.3.0 Kategorie: db

Signatur

mysql_list_processes(resource $link_identifier = NULL): resource|false

Beschreibung

mysql_list_processes() fragt den MySQL-Server nach allen laufenden Prozessen ab und gibt das Ergebnis als Ressource zurück, die mit den üblichen mysql_fetch_*-Funktionen ausgewertet werden kann. Die Funktion entspricht dem SQL-Befehl SHOW PROCESSLIST.

Die zurückgegebene Ergebnismenge enthält typischerweise die Spalten Id, User, Host, db, Command, Time, State und Info. Mit diesen Informationen lassen sich lang laufende oder blockierende Datenbankprozesse erkennen und bei Bedarf mit mysql_kill() beenden.

Die Funktion ist nützlich für Datenbankadministratoren und Monitoring-Skripte, die den Zustand eines MySQL-Servers überwachen möchten. Zu beachten ist, dass normale Datenbankbenutzer in der Regel nur ihre eigenen Prozesse sehen, während Benutzer mit dem PROCESS-Privileg alle Prozesse einsehen können.

Wichtig: Die gesamte mysql_*-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 vollständig entfernt. Für neuen Code sollte stattdessen mysqli oder PDO_MySQL verwendet werden.

Parameter

Name Typ Default Beschreibung
$link_identifier resource NULL Die MySQL-Verbindungsressource, die mit mysql_connect() geöffnet wurde. Wird kein Wert übergeben, wird die zuletzt geöffnete Verbindung verwendet. Ist keine Verbindung offen, wird automatisch versucht, eine Verbindung wie mit mysql_connect() herzustellen.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine Ergebnisressource zurück, die mit mysql_fetch_array(), mysql_fetch_assoc() oder anderen Fetch-Funktionen ausgelesen werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Alle laufenden MySQL-Prozesse ausgeben

<?php
$link = mysql_connect('localhost', 'root', 'geheimes_passwort');
if (!$link) {
    die('Verbindung fehlgeschlagen: ' . mysql_error());
}

$result = mysql_list_processes($link);
if (!$result) {
    die('Prozesse konnten nicht abgerufen werden: ' . mysql_error());
}

echo '<table border="1">';
echo '<tr><th>Id</th><th>User</th><th>Host</th><th>DB</th><th>Command</th><th>Time</th><th>State</th><th>Info</th></tr>';

while ($row = mysql_fetch_assoc($result)) {
    echo '<tr>';
    echo '<td>' . htmlspecialchars($row['Id']) . '</td>';
    echo '<td>' . htmlspecialchars($row['User']) . '</td>';
    echo '<td>' . htmlspecialchars($row['Host']) . '</td>';
    echo '<td>' . htmlspecialchars((string)$row['db']) . '</td>';
    echo '<td>' . htmlspecialchars($row['Command']) . '</td>';
    echo '<td>' . htmlspecialchars($row['Time']) . '</td>';
    echo '<td>' . htmlspecialchars((string)$row['State']) . '</td>';
    echo '<td>' . htmlspecialchars((string)$row['Info']) . '</td>';
    echo '</tr>';
}

echo '</table>';
mysql_free_result($result);
mysql_close($link);

Äquivalent mit mysqli (moderner Ersatz)

<?php
// Moderner Ersatz mit mysqli statt veralteter mysql_*-Erweiterung
$mysqli = new mysqli('localhost', 'root', 'geheimes_passwort');
if ($mysqli->connect_error) {
    die('Verbindung fehlgeschlagen: ' . $mysqli->connect_error);
}

$result = $mysqli->query('SHOW PROCESSLIST');
if (!$result) {
    die('Abfrage fehlgeschlagen: ' . $mysqli->error);
}

while ($row = $result->fetch_assoc()) {
    printf(
        "Id: %d | User: %s | Command: %s | Zeit: %d Sek.\n",
        $row['Id'],
        $row['User'],
        $row['Command'],
        $row['Time']
    );
}

$result->free();
$mysqli->close();
Id: 1 | User: root | Command: Query | Zeit: 0 Sek. Id: 2 | User: webapp | Command: Sleep | Zeit: 42 Sek.

// Wichtig · Fallstricke

Deprecation-Hinweis: Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet (deprecated) markiert, erzeugt seit PHP 5.6 Warnungen und wurde in PHP 7.0.0 vollständig entfernt. Sie darf in modernen Projekten nicht mehr verwendet werden. Verwende stattdessen mysqli oder PDO mit dem entsprechenden SHOW PROCESSLIST-SQL-Befehl.

Berechtigungen: Ohne das PROCESS-Privileg sieht der Datenbankbenutzer nur seine eigenen Verbindungsprozesse. Mit dem SUPER- oder PROCESS-Privileg werden alle Prozesse angezeigt.

Sicherheit: Ausgaben aus der Prozessliste (z. B. der Info-Spalte mit dem aktuellen SQL-Statement) können sensible Daten wie Passwörter oder persönliche Informationen enthalten. Die Ausgabe sollte niemals ungefiltert an den Browser weitergegeben werden — immer htmlspecialchars() verwenden.