In diesem Artikel wird die MySQL-Datenbank-übergreifende Transaktions-XA-Operation anhand eines Beispiels beschrieben. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: Vor einiger Zeit bin ich bei der Arbeit auf ein Problem mit datenbankübergreifenden Transaktionen gestoßen. Später habe ich im Internet danach gesucht und werde es nun organisieren und zusammenfassen. 1. Stellen Sie zunächst sicher, dass MySQL die Unterstützung für XA-Transaktionen aktiviert VARIABLEN WIE '%XA%' ANZEIGEN Wenn der Wert von innodb_support_xa ON ist, bedeutet dies, dass MySQL die Unterstützung für XA-Transaktionen aktiviert hat. Wenn nicht, führen Sie Folgendes aus: SETZEN Sie innodb_support_xa = EIN <?PHP $dbtest1 = new mysqli("172.20.101.17","public","public","dbtest1") oder die("dbtest1-Verbindung fehlgeschlagen"); $dbtest2 = new mysqli("172.20.101.18","public","public","dbtest2") oder die("dbtest2-Verbindung fehlgeschlagen"); //Geben Sie eine ID für die XA-Transaktion an. xid muss ein eindeutiger Wert sein. $xid = uniqid(""); //Die beiden Datenbanken geben dieselbe Transaktions-ID an, was darauf hinweist, dass die Vorgänge der beiden Datenbanken in derselben Transaktion erfolgen $dbtest1->query("XA START '$xid'"); //Transaktion 1 vorbereiten $dbtest2->query("XA START '$xid'"); //Transaktion 2 vorbereiten versuchen { //$dbtest1 $return = $dbtest1->query("UPDATE member SET name='Datenbankname' WHERE id=1"); wenn($return == false) { throw new Exception("Der Vorgang zum Aktualisieren des Mitglieds ist in der Bibliothek [email protected] fehlgeschlagen!"); } //$dbtest2 $return = $dbtest2->query("UPDATE Mitgliedspunkte SET Punkt=Punkt+10 WHERE Mitglieds-ID=1"); wenn($return == false) { throw new Exception("Der Vorgang zum Aktualisieren der Memberpoints ist in der Datenbank [email protected] fehlgeschlagen!"); } //Phase 1: $dbtest1 ist bereit zur Übermittlung von $dbtest1->query("XA END '$xid'"); $dbtest1->query("XA VORBEREITEN '$xid'"); //Phase 1: $dbtest2 ist bereit zur Übermittlung von $dbtest2->query("XA END '$xid'"); $dbtest2->query("XA VORBEREITEN '$xid'"); //Phase 2: Zwei Datenbanken übermitteln $dbtest1->query("XA COMMIT '$xid'"); $dbtest2->query("XA COMMIT '$xid'"); } Fang (Ausnahme $e) { //Phase 2: Rollback $dbtest1->query("XA ROLLBACK '$xid'"); $dbtest2->query("XA ROLLBACK '$xid'"); die($e->getMessage()); } $dbtest1->schließen(); $dbtest2->schließen(); ?> XA hat eine sehr geringe Leistung. Wenn wir die Leistung von Transaktionen in einer Datenbank mit XA-Transaktionen zwischen mehreren Datenbanken vergleichen, stellen wir fest, dass die Leistung etwa zehnmal schlechter ist. Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „Zusammenfassung der Kenntnisse zu MySQL-Transaktionsvorgängen“, „Sammlung der Kenntnisse zu MySQL-Abfragen“, „Sammlung der Kenntnisse zu MySQL-gespeicherten Prozeduren“, „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“ und „Zusammenfassung der allgemeinen MySQL-Funktionen“. Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist. Das könnte Sie auch interessieren:
|
<<: JavaScript zum Hinzufügen und Löschen von Nachrichten im Message Board
Notieren Sie einige der Orte, an denen Sie Zeit v...
js-Arrays sind wahrscheinlich jedem bekannt, da s...
Hintergrund Folgendes ist passiert: Luzhu erfuhr ...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Hintergrund: brauchen: Wirkung...
HTML-Eingabeattribute Das Value-Attribut Das Valu...
Inhaltsverzeichnis Die erste Methode: Wenn die My...
Inhaltsverzeichnis 1. Einführung in das Teleporti...
Bei der Datenbankoperation ist der Umgang mit Dat...
In der Datenbank führen sowohl die Schlüsselwörte...
Inhaltsverzeichnis Tomcat-Download-Tutorial Tutor...
Inhaltsverzeichnis 2. Zweck 2.1 Objekten Eigensch...
Centos7-Startvorgang: 1.post (Selbsttest beim Ein...
1. CPU-Auslastung sar -p (den ganzen Tag anzeigen...
Die MyISAM- und InnoDB-Engines von MySQL verwende...