Start · Sprachen · PHP · Referenz · mysqli_refresh

mysqli_refresh

Funktion

Aktualisiert bzw. setzt interne MySQL-Server-Caches und -Logs zurück (prozeduraler Stil).

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_refresh(mysqli $mysql, int $flags): bool

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:
  • MYSQLI_REFRESH_GRANT – Grant-Tabellen neu einlesen
  • MYSQLI_REFRESH_LOG – Log-Dateien schließen und neu öffnen
  • MYSQLI_REFRESH_TABLES – Tabellen-Cache leeren
  • MYSQLI_REFRESH_HOSTS – Hosts-Cache leeren
  • MYSQLI_REFRESH_STATUS – Statusinformationen zurücksetzen
  • MYSQLI_REFRESH_THREADS – Thread-Cache leeren
  • MYSQLI_REFRESH_SLAVE – Replikations-Slave-Threads neu starten
  • MYSQLI_REFRESH_MASTER – Binary-Log-Dateien auf dem Master löschen

Rückgabewert

Typ
bool
Beschreibung
Gibt 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);
Refresh erfolgreich durchgeführt.

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();
Grant-Tabellen wurden neu eingelesen.

// 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.