Aktueller Standort: Startseite> Neueste Artikel> Lösen Sie das Urteilsvermögen für Datenbank Disaster Recovery Switching basierend auf $ errno

Lösen Sie das Urteilsvermögen für Datenbank Disaster Recovery Switching basierend auf $ errno

M66 2025-06-01

In der modernen Architektur mit hoher Verfügbarkeit ist die Datenbank Disaster Recovery (Failover) ein wichtiges Mittel, um die hohe Zuverlässigkeit des Systems zu gewährleisten. Insbesondere in verteilten Datenbanken oder Master-Sklaven-Architekturen, wenn die Master-Datenbank ausfällt, ist es erforderlich, in die Standby-Datenbank umzusteigen, um die Bereitstellung von Diensten fortzusetzen. Um dies zu erreichen, stellt MySQL die Eigenschaft MySQLI :: $ errno bereit, um Entwicklern zu ermitteln, ob ein Fehler in den Datenbankvorgängen vorliegt und einen Disaster Recovery -Switch über Fehlercodes auslöst.

In diesem Artikel wird festgelegt, wie die Datenbank über MySQLI :: $ errno einschaltet und kurz ein Beispiel für Disaster Recovering -Switching -Beispiele implementiert.

Was ist MySQLI :: $ errno ?

Mysqli :: $ errno ist eine Eigenschaft in der MySQLi -Klasse, die den Fehlercode der vorherigen MySQL -Abfrageoperation darstellt. Wenn die Abfrage erfolgreich ist, beträgt der Wert der Eigenschaft 0; Wenn ein Fehler auftritt, gibt die Eigenschaft den entsprechenden MySQL -Fehlercode zurück. Diese Eigenschaft kann verwendet werden, um festzustellen, ob ein Fehler aufgetreten ist, und die entsprechende Fehlerbehandlung durchzuführen.

Häufige Fehlercodes sind:

  • 2002 : Die Verbindung verweigert , die Datenbank kann nicht verbunden werden.

  • 1040 : Zu viele Verbindungen , die Anzahl der Datenbankverbindungen erreicht die Obergrenze.

  • 1213 : Deadlock , Deadlock -Fehler.

So verwenden Sie MySQLI :: $ errno , um die Disaster Recovery Switching zu bestimmen

Angenommen, Sie verwenden die MySQL-Master-Slave-Architektur, wenn die Master-Bibliothek ausfällt, sollte sie automatisch in die alternative Slave-Bibliothek wechseln. Wir können MySQLI :: $ errno verwenden, um den Fehlercode zu bestimmen, um festzustellen, ob eine Disaster -Wiederherstellungsschaltung erforderlich ist.

Hier ist ein Beispiel für eine vereinfachte Implementierung von Disaster Recovery Switching:

 <?php

// Datenbankverbindungskonfiguration
$primary_db_config = [
    'host' => 'primary.m66.net',
    'user' => 'root',
    'password' => 'password',
    'database' => 'test_db'
];

$secondary_db_config = [
    'host' => 'secondary.m66.net',
    'user' => 'root',
    'password' => 'password',
    'database' => 'test_db'
];

// Erstellen Sie eine Datenbankverbindung
function connectDatabase($db_config) {
    $mysqli = new mysqli($db_config['host'], $db_config['user'], $db_config['password'], $db_config['database']);
    if ($mysqli->connect_error) {
        echo "Verbindung ist fehlgeschlagen: " . $mysqli->connect_error . "\n";
        return null;
    }
    return $mysqli;
}

// Versuchen Sie, eine Verbindung zur Hauptbibliothek herzustellen
$mysqli = connectDatabase($primary_db_config);
if ($mysqli === null) {
    // 如果主库Verbindung ist fehlgeschlagen,Wechseln Sie zur Sicherungsbibliothek
    echo "主数据库Verbindung ist fehlgeschlagen,Wechseln Sie zur Standby -Datenbank...\n";
    $mysqli = connectDatabase($secondary_db_config);
}

// Abfragebetriebe durchführen
if ($mysqli) {
    $query = "SELECT * FROM some_table";
    if ($mysqli->query($query) === FALSE) {
        // Bestimmen Sie, ob eine Disaster -Wiederherstellungsschaltung basierend auf dem Fehlercode erforderlich ist
        echo "Abfrage fehlgeschlagen: " . $mysqli->errno . " - " . $mysqli->error . "\n";
        if ($mysqli->errno == 2002 || $mysqli->errno == 1040) {
            // Wenn die Datenbankverbindung falsch ist oder die Anzahl der Verbindungen voll ist,Versuchen Sie, die Datenbank zu wechseln
            echo "Versuchen Sie, die Datenbank zu wechseln...\n";
            $mysqli = connectDatabase($secondary_db_config);
        }
    } else {
        echo "Abfrage erfolgreich\n";
    }
}

Code analysieren

  1. Datenbankkonfiguration : Wir haben Datenbankverbindungsinformationen für die Master- und Slave -Bibliotheken konfiguriert. Die Verbindungskonfiguration der Hauptbibliothek wird in der Variablen $ primär_db_config gespeichert, und die Konfiguration der Slave -Bibliothek wird in der $ secondary_db_config gespeichert.

  2. Datenbankverbindung : Die Funktion ConnectDatabase () wird verwendet, um eine Datenbankverbindung herzustellen. Es empfängt Datenbankkonfigurationsinformationen und gibt ein MySQLI -Objekt zurück. Wenn die Verbindung fehlschlägt, geben Sie NULL zurück.

  3. Wechseln Sie zu Slave, wenn die Hauptbibliotheksverbindung fehlschlägt : Wenn die Hauptbibliotheksverbindung fehlschlägt, versuchen wir, eine Verbindung zum Slave herzustellen und die $ mysqli -Variable auf die neue Verbindung zu richten.

  4. Abfragebetrieb : Führen Sie die Datenbankabfrage über $ mySQLI-> query () aus. Wenn die Abfrage fehlschlägt, erhalten wir den Fehlercode über $ MySQLI-> errno, um festzustellen, ob eine Disaster-Wiederherstellungsschaltung erforderlich ist. Zum Beispiel bedeutet Errno == 2002 , dass die Datenbankverbindung fehlgeschlagen ist und Errno == 1040 bedeutet, dass die Datenbankverbindungsnummer voll ist. In beiden Fällen versuchen wir, zur Standby -Datenbank umzusteigen.

Abschluss

Die Verwendung von MySQLI :: $ errno kann uns helfen, die Fehler in den Datenbankvorgängen effektiv zu beurteilen und festzustellen, ob eine Disaster -Wiederherstellungsschaltung über den Fehlercode erforderlich ist. Mit diesem einfachen Beispiel zeigen wir, wie Sie im Master-Slave-Datenbankschema eine Disaster-Wiederherstellungsschaltung durchführen. In der tatsächlichen Entwicklung können Sie die Disaster Recovery Switching -Logik basierend auf bestimmten Fehlercodes und Systemanforderungen anpassen, um die Benutzerfreundlichkeit und Stabilität des Systems weiter zu verbessern.