Signatur
Beschreibung
mysqli_refresh() sendet einen REFRESH-Befehl an den MySQL-Server. Je nach übergebenem Flags-Parameter können dabei Tabellen-Cache, Hosts-Cache, Grant-Tabellen, Logs oder Replikations-Threads neu initialisiert werden. Die Funktion ist das prozedurale Äquivalent zu mysqli::refresh().
Typische Einsatzgebiete sind administrative Aufgaben wie das Leeren des Query-Caches, das erneute Einlesen von Berechtigungstabellen nach einer manuellen Änderung oder das Schließen und Neuöffnen von Log-Dateien. Für diese Operationen werden auf dem MySQL-Server meist erweiterte Rechte (z. B. RELOAD-Privilege) benötigt.
Die gewünschten Aktionen werden durch bitweise ODER-Verknüpfung der vordefinierten Konstanten wie MYSQLI_REFRESH_TABLES, MYSQLI_REFRESH_HOSTS, MYSQLI_REFRESH_GRANT, MYSQLI_REFRESH_LOG oder MYSQLI_REFRESH_SLAVE zusammengesetzt und als $flags übergeben.
Im objektorientierten Stil steht die Methode mysqli::refresh(int $flags): bool zur Verfügung, die identisch funktioniert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mysql Pflicht | mysqli | Eine aktive MySQLi-Verbindungsinstanz, die mit mysqli_connect() oder new mysqli() erstellt wurde. |
|
| $flags Pflicht | int | Bitmaske aus einer oder mehreren der folgenden Konstanten:
|
Rückgabewert
true zurück, wenn der Refresh erfolgreich war, andernfalls false. Ein Fehler tritt beispielsweise auf, wenn der verbundene Benutzer nicht die notwendigen Rechte besitzt.Beispiele
Tabellen-Cache und Hosts-Cache leeren
<?php
$mysqli = mysqli_connect('localhost', 'root', 'geheim', 'testdb');
if (!$mysqli) {
die('Verbindungsfehler: ' . mysqli_connect_error());
}
// Tabellen-Cache und Hosts-Cache gemeinsam leeren
$flags = MYSQLI_REFRESH_TABLES | MYSQLI_REFRESH_HOSTS;
if (mysqli_refresh($mysqli, $flags)) {
echo 'Refresh erfolgreich durchgeführt.';
} else {
echo 'Refresh fehlgeschlagen: ' . mysqli_error($mysqli);
}
mysqli_close($mysqli);
Grant-Tabellen nach manueller Rechteänderung neu einlesen (OOP-Stil)
<?php
$mysqli = new mysqli('localhost', 'root', 'geheim');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
// Berechtigungstabellen neu laden (äquivalent zu FLUSH PRIVILEGES)
if ($mysqli->refresh(MYSQLI_REFRESH_GRANT)) {
echo 'Grant-Tabellen wurden neu eingelesen.';
} else {
echo 'Fehler: ' . $mysqli->error;
}
$mysqli->close();
// Wichtig · Fallstricke
Berechtigungen: Für die meisten Refresh-Operationen (insbesondere MYSQLI_REFRESH_LOG, MYSQLI_REFRESH_TABLES, MYSQLI_REFRESH_HOSTS) wird das MySQL-Privileg RELOAD benötigt. Fehlt dieses Recht, schlägt die Funktion fehl und gibt false zurück.
Produktionssysteme: Das Leeren von Caches (z. B. MYSQLI_REFRESH_TABLES) kann bei stark ausgelasteten Datenbankservern kurzfristig zu Performance-Einbrüchen führen, da der Cache neu aufgebaut werden muss. Diese Operationen sollten möglichst in Wartungsfenstern durchgeführt werden.
Deprecation: Die Konstanten MYSQLI_REFRESH_SLAVE und MYSQLI_REFRESH_MASTER sind ab MySQL 8.0 zugunsten von MYSQLI_REFRESH_REPLICA und MYSQLI_REFRESH_SOURCE veraltet.