1. Einleitung Wie wir alle wissen, muss im Anwendungsszenario der Lese- und Schreibtrennung von Datenbank-Middleware sichergestellt werden, dass bei Auftreten eines fehlerhaften Knotens in der zugrunde liegenden Datenbank die Middleware die Datenbankverbindung schnell trennen oder migrieren kann, ohne dass die Benutzer davon etwas bemerken. In der MySQL-Datenbank wird ein session_track_transaction_info-Parameter bereitgestellt, um eine Lösung bereitzustellen. Da es in der offiziellen Dokumentation keine Beschreibung dieses Parameters gibt, werden in diesem Artikel speziell die optionalen Werte dieses Parameters vorgestellt und die tatsächlichen Auswirkungen überprüft. Reden wir nicht zu viel, schauen wir uns die ausführliche Einführung mit dem Herausgeber an 2. session_track_transaction_info-Parameter 2.1 Parametereinführung In MySQL 5.7 können Sie den Status von Transaktionen verfolgen, indem Sie die Variable session_track_transaction_info festlegen.
/** Transaktionsverfolgungsebene */ Aufzählung enum_session_track_transaction_info { TX_TRACK_NONE = 0, ///< keine Tracker-Elemente für Transaktionsinformationen senden TX_TRACK_STATE = 1, ///< Transaktionsstatus verfolgen TX_TRACK_CHISTICS = 2 ///< Status und Eigenschaften des Tracks }; Die zulässigen Werte für diesen Parameter sind 0, 1 und 2.
2.2 Einfluss der Parametereinstellungen Wenn der Parameter session_track_transaction_info aktiviert ist, kann der Transaktionsstatusdatensatz nicht direkt in der Datenbank abgefragt werden. Gemäß [WL#4797] zeichnet MySQL Informationen zur Verfolgung des Transaktionsstatus im OK-Paket auf, das von jeder Abfrageanforderung zurückgegeben wird. Sie können Informationen zum Transaktionsstatus anzeigen, indem Sie Pakete erfassen. 2.2.1 Natives MySQL OK-Paketformat OK Paket Datenpaketformatdefinition
Die Länge in int<lenenc> und string<lenenc> stellt LengthEcode dar. Der Code zum Einkapseln des OK-Pakets in MySQL-5.7.19 befindet sich in der Funktion net_send_ok() in der Datei protocol_classic.cc. 2.2.3 session_track_transaction_info Zusätzliche Informationen session_track_transaction_info verwendet 8 Zeichen, um Transaktionsinformationen darzustellen, und diese 8 Zeichen werden im Rückgabedatenpaket der COM_QUERY-Anforderungsanweisung gespeichert (wenn der Client eine Anweisung ausführt, wird sie im MySQL-Protokoll in eine COM_QUERY-Anforderung gekapselt und an den Server gesendet. Nachdem der Server sie analysiert und ausgeführt hat, kapselt er das Ergebnis in ein Datenpaket und gibt es zurück).
2.2.2 OK-Paketformatanalyse, wenn session_track_transaction_info = 0 session_track_transaction_info=0 bedeutet, dass keine Transaktionsinformationen aufgezeichnet werden und in keinem der vom Server zurückgegebenen Datenpakete Informationen zur Verfolgung des Transaktionsstatus vorhanden sind. ## session_track_transaction_info = 0 Der Client führt begin aus; gekapseltes Datenpaket 06 00 00 # payload_length 00 # Sequenz-ID 03 # Befehlstyp COM_QUERY 62 65 67 69 6e # beginnen Vom Server zurückgegebenes Datenpaket: Antwort 07 00 00 # Nutzlastlänge 01 # Sequenz-ID 00 # Header 0x00 zeigt ein OK-Paket an 00 # Betroffene Zeilen 0 00 # Die zuletzt eingefügte ID 03000000 Der Client führt insert into t1 values(55) aus, um das Datenpaket 1a 00 00 # payload_length einzukapseln 00 # Sequenz-ID 03 # Befehlstyp COM_QUERY 696e7365727420696e746f2074312076616c75657328353529 # in t1-Werte einfügen (55) Vom Server zurückgegebenes Datenpaket: Antwort 07 00 00 # Nutzlastlänge 01 # Sequenz-ID 00010003000000 Der Client führt Commit aus; das gekapselte Datenpaket ist 07 00 00 # payload_length 00 # Sequenz-ID 03 # Befehlstyp COM_QUERY 636f6d6d6974 # festschreiben Vom Server zurückgegebenes Datenbankpaket: Antwort 07 00 00 # Nutzlastlänge 01 # Sequenz-ID 00000002000000 2.2.4 OK-Paketformatanalyse, wenn session_track_transaction_info = 1 ## session_track_transaction_info = 1 Der Client führt begin aus; gekapseltes Datenpaket 06 00 00 # payload_length 00 # Sequenz-ID 03 # Befehlstyp COM_QUERY 626567696e#beginnen Vom Server zurückgegebenes Datenpaket: Antwort 14 00 00 # Nutzlastlänge 01 # Sequenz-ID 00 # Header 0x00 zeigt ein OK-Paket an 00 # Betroffene Zeilen 0 00 # Die zuletzt eingefügte ID 03400000000b050908 54 5f 5f 5f 5f 5f 5f # Informationen zum Transaktionsstatus T_______ # Stelle 1: 54 //Öffne eine Transaktion explizit # Stelle 2: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen gelesen # Stelle 3: 5f //In der aktuellen Transaktion werden keine transaktionalen Speicher-Engine-Tabellen gelesen # Stelle 4: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen geschrieben # Stelle 5: 5f //In der aktuellen Transaktion werden keine transaktionalen Speicher-Engine-Tabellen geschrieben # Stelle 6: 5f //In der aktuellen Transaktion werden keine unsicheren Anweisungen verwendet # Stelle 7: 5f //Kein Ergebnissatz # Stelle 8: 5f //Keine Tabellensperre Client führt Einfügen in t1 aus values(111) gekapseltes Datenpaket 1b 00 00 # payload_length 00 # Sequenz-ID 03 # Befehlstyp COM_QUERY 696e7365727420696e746f2074312076616c7565732831313129 # in t1-Werte einfügen (111) Vom Server zurückgegebenes Datenpaket: Antwort 14 00 00 # Nutzlastlänge 01 # Sequenz-ID 00010003400000000b050908 54 5f 5f 5f 57 5f 5f 5f # Transaktionsstatusinformationen T___W___ # Stelle 1: 54 //Öffne eine Transaktion explizit # Stelle 2: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen gelesen # Stelle 3: 5f //In der aktuellen Transaktion werden keine transaktionalen Speicher-Engine-Tabellen gelesen # Stelle 4: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen geschrieben # Stelle 5: 57 //In der aktuellen Transaktion werden transaktionale Speicher-Engine-Tabellen geschrieben # Stelle 6: 5f //In der aktuellen Transaktion werden keine unsicheren Anweisungen verwendet # Stelle 7: 5f //Kein Ergebnissatz # Stelle 8: 5f //Client führt Commit aus, ohne die Tabelle zu sperren; gekapseltes Datenpaket 07 00 00 # payload_length 00 # Sequenz-ID 03 # Befehlstyp COM_QUERY 636f6d6d6974 # festschreiben Vom Server zurückgegebenes Datenpaket: Antwort 1400000100000002400000000b050908 5f 5f 5f 5f 5f 5f 5f 5f # Informationen zum Transaktionsstatus________ # Stelle 1: 5f //Keine aktive Transaktion# Stelle 2: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen gelesen# Stelle 3: 5f //In der aktuellen Transaktion werden keine transaktionalen Speicher-Engine-Tabellen gelesen# Stelle 4: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen geschrieben# Stelle 5: 5f //In der aktuellen Transaktion werden keine transaktionalen Speicher-Engine-Tabellen geschrieben# Stelle 6: 5f //In der aktuellen Transaktion werden keine unsicheren Anweisungen verwendet# Stelle 7: 5f //Kein Ergebnissatz# Stelle 8: 5f //Keine Tabellensperre 2.2.5 OK-Paketformatanalyse, wenn session_track_transaction_info = 2 Wenn der Parameter session_track_transaction_info auf 2 gesetzt ist, werden detailliertere Informationen zum Transaktionsstatus angezeigt. Der Client führt begin aus; gekapseltes Datenpaket 06 00 00 # payload_length 00 # Sequenz-ID 03 # Befehlstyp COM_QUERY 626567696e#beginnen Vom Server zurückgegebenes Datenpaket: Antwort 29 00 00 # Nutzlastlänge 01 # Sequenz-ID 000000034000000020050908 54 5f 5f 5f 5f 5f 5f 5f # Informationen zum Transaktionsstatus T_______ 0413125354415254205452414e53414354494f4e3b # TRANSAKTION STARTEN; # Stelle 1: 54 //Öffne eine Transaktion explizit # Stelle 2: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen gelesen # Stelle 3: 5f //In der aktuellen Transaktion werden keine transaktionalen Speicher-Engine-Tabellen gelesen # Stelle 4: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen geschrieben # Stelle 5: 5f //In der aktuellen Transaktion werden keine transaktionalen Speicher-Engine-Tabellen geschrieben # Stelle 6: 5f //In der aktuellen Transaktion werden keine unsicheren Anweisungen verwendet # Stelle 7: 5f //Kein Ergebnissatz # Stelle 8: 5f //Keine Tabellensperre Client führt Einfügen in t1 aus values(222) gekapseltes Datenpaket 1b 00 00 # payload_length 00 # Sequenz-ID 03 # Befehlstyp COM_QUERY 696e7365727420696e746f2074312076616c7565732832323229 # in t1-Werte einfügen (222) Vom Server zurückgegebenes Datenpaket: Antwort 14 00 00 # Nutzlastlänge 01 # Sequenz-ID 00010003400000000b050908 54 5f 5f 5f 57 5f 5f 5f # Transaktionsstatusinformationen T___W___ # Stelle 1: 5f //Keine aktive Transaktion# Stelle 2: 5f //In der aktuellen Transaktion wird keine nicht-transaktionale Speicher-Engine-Tabelle gelesen# Stelle 3: 5f //In der aktuellen Transaktion wird keine transaktionale Speicher-Engine-Tabelle gelesen# Stelle 4: 5f //In der aktuellen Transaktion wird keine nicht-transaktionale Speicher-Engine-Tabelle geschrieben# Stelle 5: 5f //In der aktuellen Transaktion wird keine transaktionale Speicher-Engine-Tabelle geschrieben# Stelle 6: 5f //In der aktuellen Transaktion werden keine unsicheren Anweisungen verwendet# Stelle 7: 5f //Kein Ergebnissatz# Stelle 8: 5f //Keine Tabelle ist gesperrtClient führt Commit aus; gekapseltes Datenpaket 07 00 00 # payload_length 00 # Sequenz-ID 03 # Befehlstyp COM_QUERY 636f6d6d6974 # festschreiben Vom Server zurückgegebenes Datenpaket: Antwort 17 00 00 # Nutzlastlänge 01 # Sequenz-ID 00000002400000000e050908 5f 5f 5f 5f 5f 5f 5f 5f # Informationen zum Transaktionsstatus________ 040100 # Stelle 1: 5f //Keine aktive Transaktion# Stelle 2: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen gelesen# Stelle 3: 5f //In der aktuellen Transaktion werden keine transaktionalen Speicher-Engine-Tabellen gelesen# Stelle 4: 5f //In der aktuellen Transaktion werden keine nicht-transaktionalen Speicher-Engine-Tabellen geschrieben# Stelle 5: 5f //In der aktuellen Transaktion werden keine transaktionalen Speicher-Engine-Tabellen geschrieben# Stelle 6: 5f //In der aktuellen Transaktion werden keine unsicheren Anweisungen verwendet# Stelle 7: 5f //Kein Ergebnissatz# Stelle 8: 5f //Keine Tabellensperre 3. Fazit Nach dem Festlegen des Parameters session_track_transaction_info können die Transaktionsstatusinformationen der aktuellen Verbindung im Rückgabedatenpaket von MySQL abgerufen werden. Diese Funktion kann in Datenbank-Middleware verwendet werden, um im Falle eines MySQL-Fehlers Verbindungen automatisch zu migrieren und so die Auswirkungen auf die Benutzer zu reduzieren. In einigen Szenarien kann der zugrunde liegende MySQL-Knotenfehler umgeschaltet werden und die Anwendung kann unbemerkt umschalten. Nun, das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
>>: Lösung für 700 % CPU-Auslastung eines Linux-Prozesses, der nicht beendet werden kann
Die Betriebsumgebung dieses Tutorials: Windows 7-...
Laden Sie opencv.zip herunter Installieren Sie di...
Vorwort Die Schlüsselwörter von MySQL und Oracle ...
Inhaltsverzeichnis Vorwort verwenden Komponentens...
1. Download von der offiziellen Website: https://...
Die Wirkung ist ganz einfach: Kopieren Sie einfach...
Inhaltsverzeichnis 1. Was ist bidirektionale Date...
In diesem Artikel erfahren Sie den spezifischen C...
Inhaltsverzeichnis 1 Konfigurations- und Datenver...
In diesem Artikel wird der spezifische Code von v...
Float: links/rechts/keine; 1. Gleichstufiges Schw...
ElementUI implementiert das Tutorial zum Paginier...
In diesem Artikel werden die Installations- und K...
Inhaltsverzeichnis Einführung Synchron Asynchron ...
Hyperlinks sind die am häufigsten verwendeten HTM...