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.
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.
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";
}
}
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.
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.
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.
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.
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.