Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie die automatische Umschaltung der MySQL-Master-Slave-Replikation mit PHP

So implementieren Sie die automatische Umschaltung der MySQL-Master-Slave-Replikation mit PHP

WBOY
WBOYOriginal
2023-05-17 08:19:501233Durchsuche

In der modernen Anwendungsarchitektur ist die Datenbank ein entscheidender Bestandteil für Hochlast- und Hochverfügbarkeitsanwendungen. Die MySQL-Master-Slave-Replikationsarchitektur ist eine weit verbreitete Lösung. Beim MySQL-Master-Slave-Replikationsmodell muss der Slave-Knoten jedoch manuell auf den Master-Knoten umgeschaltet werden. Dies führt nicht nur zu einer Dienstunterbrechung, sondern erfordert auch manuelle Eingriffe, was die Betriebs- und Wartungskosten erhöht Risiken.

Um dieses Problem zu lösen, können wir über das PHP-Programm automatisch einen fehlerfreien Slave-Knoten ermitteln und zu diesem wechseln, um eine hohe Verfügbarkeit der Datenbank sicherzustellen. In diesem Artikel wird erläutert, wie Sie mit PHP die automatische Umschaltung der MySQL-Master-Slave-Replikation implementieren.

1. Vorbereitung

Stellen Sie vor dem Start sicher, dass die folgenden Bedingungen erfüllt sind:

1.1 Die MySQL-Master-Slave-Replikationsarchitektur wurde erfolgreich bereitgestellt und läuft normal.

1.2 PHP wurde auf dem Server installiert und kann MySQL-bezogene Erweiterungsbibliotheken aufrufen.

1.3 Erstellen Sie ein Administratorkonto in MySQL und erteilen Sie dem Benutzer die Berechtigungen REPLICATION SLAVE und REPLICATION CLIENT.

2. Implementierungsprinzip

In der MySQL-Master-Slave-Replikationsarchitektur basiert die Datensynchronisation zwischen dem Master-Knoten und dem Slave-Knoten auf dem Binärprotokoll. Der Masterknoten zeichnet alle Änderungsvorgänge im Binärprotokoll auf und überträgt das Protokoll an den Slaveknoten. Der Slave-Knoten stellt die Datenkonsistenz sicher, indem er den Inhalt des Binärprotokolls liest.

Nachdem der Masterknoten ausgefallen ist, müssen Sie manuell vom Slaveknoten zum Masterknoten wechseln. MySQL bietet jedoch die CHANGE MASTER TO-Anweisung, mit der die Master-Knotenadresse des Slave-Knotens dynamisch geändert werden kann. Nachdem der Master-Knoten ausgefallen ist, können wir über PHP die CHANGE MASTER TO-Anweisung aufrufen, um den Slave-Knoten auf den Master-Knoten umzuschalten und so die hohe Verfügbarkeit der Datenbank sicherzustellen.

3. Implementierungsschritte

3.1 Verbindung zur MySQL-Datenbank in PHP herstellen

Verwenden Sie die MySQL-Bibliothek in PHP, um eine Verbindung zur MySQL-Datenbank herzustellen:

$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
    die('Connect Error: ' . $mysqli->connect_errno . ":" . $mysqli->connect_error);
}

Darunter ist „localhost“ die Hostadresse , „Benutzername“ und „Passwort“ sind der Benutzername und das Passwort des Administratorkontos und „Datenbank“ ist der Name der Datenbank, mit der eine Verbindung hergestellt werden soll.

3.2 Den Status des aktuellen Masterknotens abrufen

In MySQL können Sie den Status des aktuellen Masterknotens über die SHOW MASTER STATUS-Anweisung abrufen. Der Beispielcode lautet wie folgt:

$sql = "SHOW MASTER STATUS";
$result = $mysqli->query($sql);
if ($result->num_rows == 1) {
    $row = $result->fetch_assoc();
    $file = $row['File'];
    $position = $row['Position'];
}

Daunter $file und $ Positionieren bzw. speichern Sie die Binärdatei des aktuellen Master-Knotens.

3.3 Überprüfen Sie den Status des Slave-Knotens

In MySQL können Sie den Status des aktuellen Slave-Knotens über die SHOW SLAVE STATUS-Anweisung abrufen. Der Beispielcode lautet wie folgt:

$sql = "SHOW SLAVE STATUS";
$result = $mysqli->query($sql);
if ($result->num_rows == 1) {
    $row = $result->fetch_assoc();
    $seconds_behind_master = $row['Seconds_Behind_Master'];
}

Unter diesen speichert $seconds_behind_master die Daten Synchronisation zwischen dem Slave-Knoten und der Master-Knoten-Verzögerungszeit.

3.4 Bestimmen Sie, ob ein Wechsel erforderlich ist.

Nachdem Sie den Status des Masterknotens und des Slave-Knotens erhalten haben, können Sie feststellen, ob ein Wechsel erforderlich ist. Wenn der Master-Knoten ausfällt, ändert sich normalerweise der Status des Slave-Knotens und $seconds_behind_master wird NULL oder 0.

Wenn der Ausfall des Master-Knotens erkannt wird, bestimmen Sie, ob der Slave-Knoten umgeschaltet werden muss. Wenn die Bedingungen erfüllt sind, führen Sie die CHANGE MASTER TO-Anweisung aus, um zum Slave-Knoten als Master-Knoten zu wechseln:

if ($seconds_behind_master === NULL || $seconds_behind_master === 0) {
    $sql = "STOP SLAVE";
    $mysqli->query($sql);

    $sql = "CHANGE MASTER TO MASTER_HOST='hostname',
                       MASTER_USER='username',
                       MASTER_PASSWORD='password',
                       MASTER_LOG_FILE='{$file}',
                       MASTER_LOG_POS={$position}";
    $mysqli->query($sql);

    $sql = "START SLAVE";
    $mysqli->query($sql);
}

wo Hostname ist die IP-Adresse des Slave-Knotens, Benutzername und Passwort sind der Benutzername und das Passwort des Administratorkontos, $file und $position sind der Name und der Offset der Binärprotokolldatei des Master-Knotens, die zuvor erhalten wurden.

4. Fazit

In diesem Artikel wird erläutert, wie die automatische Umschaltung der MySQL-Master-Slave-Replikation über PHP-Programme implementiert wird. Durch die Ausführung eines PHP-Skripts können Sie automatisch erkennen, ob der Master-Knoten ausgefallen ist. Wenn er ausfällt, wechselt er automatisch vom Slave-Knoten zum Master-Knoten, um eine hohe Verfügbarkeit der Datenbank sicherzustellen. In praktischen Anwendungen können PHP-Skripte regelmäßig ausgeführt werden, um eine automatische Überwachung und Umschaltung der Datenbank rund um die Uhr zu erreichen.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die automatische Umschaltung der MySQL-Master-Slave-Replikation mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn