Beispiel für eine MySQL-Datenbank-übergreifende Transaktions-XA-Operation

Beispiel für eine MySQL-Datenbank-übergreifende Transaktions-XA-Operation

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:
  • Lösung für die Fehlermeldung "java.sql.SQLException: Incorrect string value:'\xF0\x9F\x92\xA9\x0D\x0A...'" beim Speichern von Emoticons in MySQL
  • So ändern Sie das MySQL-Passwort auf dem XAMPP-Server (mit Bildern)
  • So verwenden Sie das Terminal zum Öffnen des mit XAMPP gelieferten MySQL auf dem Mac
  • So ändern Sie das Standardkennwort von MySQL in xampp
  • Aufbau des ThinkPHP-Frameworks und häufige Probleme (Fehler bei der XAMPP-Installation, Fehler beim Start von Apache/MySQL)
  • So ändern Sie das standardmäßige leere Passwort (Root-Passwort) von MySQL in xampp
  • Detaillierte Erläuterung des MySQL XA-Transaktionswiederherstellungsprozesses
  • Lösen Sie die Probleme mit dem Selbststart von XAMPP und MySQL.sock
  • Wie implementiert die MySQL-Datenbank die XA-Spezifikation?

<<:  JavaScript zum Hinzufügen und Löschen von Nachrichten im Message Board

>>:  Der beliebige Upload von Jar-Paketen in Apache Flink führt zu einem Wiederholungsproblem bei der Sicherheitsanfälligkeit bezüglich Remotecodeausführung (Sicherheitswarnung)

Artikel empfehlen

MYSQL 5.6 Bereitstellung und Überwachung der Slave-Replikation

MYSQL 5.6 Bereitstellung und Überwachung der Slav...

Lösung für dieselbe IP nach dem Klonen der virtuellen Ubuntu 18-Maschine

Vorwort Ich habe vor Kurzem eine virtuelle Maschi...

Holen Sie sich die IP und den Hostnamen aller Hosts auf Zabbix

zabbix Zabbix ([`zæbiks]) ist eine Open-Source-Lö...

Aktivieren und Konfigurieren des MySQL-Protokolls für langsame Abfragen

Einführung Das MySQL-Protokoll für langsame Abfra...

Detailliertes Tutorial zur Installation des Quellcodes von CentOS6.9+Mysql5.7.18

Bei der Installation des Quellcodes von CentOS6.9...

So installieren Sie Docker und konfigurieren Alibaba Cloud Image Accelerator

Docker-Installation Über die Installation auf ein...

JavaScript zum Erzielen digitaler Uhreffekte

In diesem Artikelbeispiel wird der spezifische Co...

So kopieren Sie eine MySQL-Tabelle

Inhaltsverzeichnis 1.mysqldump Ausführungsprozess...

Vant+postcss-pxtorem implementiert Browser-Anpassungsfunktion

Rem-Layout-Anpassung Die Stile in Vant verwenden ...

Tutorial zur Installation der komprimierten MySQL8-Paketversion unter Win10

1 Laden Sie MySQL8 von der offiziellen Website he...

Detaillierte Erklärung zur Verwendung benutzerdefinierter Parameter in MySQL

Zu den MySQL-Variablen zählen Systemvariablen und...

vue+element-ui implementiert die Kopfnavigationsleistenkomponente

In diesem Artikel wird der spezifische Code von v...