序文MySQL が単一マシンのトランザクションを適切にサポートしていることは間違いありません。では、複数のノードを含む分散システムでは、MySQL は分散トランザクションをどのように実装するのでしょうか?例えば、業務システムを開発する場合、外部からのリクエストを受け付け、複数の内部システムにアクセスしてリクエストを実行します。実行中に、複数のデータベース(D1、D2、D3)の値を同時に更新する必要があります。システムは一貫している必要があるため、3 つのデータベースの値は同時に正常に更新されるか、まったく更新されないかのいずれかになります。そうでない場合、サブシステムの一部の命令は成功しますが、一部の命令は実行されません。これにより、結果を理解する際に混乱が生じます。 では、MySQL はどのようにして複数の MySQL データベースを更新する際に一貫性を実現するのでしょうか?それがMySQL XAです。 MySQL は、XA 仕様の 2 フェーズ コミット プロトコルをサポートすることで、複数のデータベースの操作を実装します。 XA プロトコルXA 仕様について説明するときは、DTP モデル (分散トランザクション処理) について説明しなければなりません。 XA 仕様では、DTP モデル内の 2 つのモジュール (トランザクション マネージャーとリソース マネージャー) 間の通信方法が規定されています。 DTPは実際には分散トランザクション処理です 各モジュールの機能は次のとおりです。
最初は理解しにくいかもしれません。要約すると、アプリケーションがリソース マネージャーによって提供される共有リソースにアクセスして使用し、トランザクション マネージャーによって提供されるトランザクション インターフェイス (TX インターフェイス) を介してトランザクション操作を定義するアーキテクチャです。トランザクション マネージャーとリソース管理は、XA 仕様に基づいて 2 フェーズ コミット プロトコルを実行します。
MySQL XA で分散トランザクションを実装する方法MySQL には 2 種類の XA トランザクションがあります。1 つは内部 XA トランザクションで、主にストレージ エンジンとバイナリ ログの調整に使用されます。もう 1 つは外部分散トランザクション (複数のデータベースによって実装される分散トランザクションなど) に参加できる外部トランザクションです。ここでは主に外部トランザクションについて説明します。 注意: 分散トランザクションは、分離レベルが Serializable に設定されている場合にのみ MySQL で使用できます。 XA {START|BEGIN} xid [JOIN|RESUME] XA準備xid XA 終了 xid XA COMMIT xid[ワンフェーズ] XA ロールバック xid XA リカバリ[XID 変換] このうち、xid はトランザクション ID であり、トランザクション ブランチを一意に表します。各トランザクション ブランチには ID があります。 分離レベルをシリアライズ可能に設定する 実行結果 まず、「XA START 'xid'」コマンドを呼び出してXAトランザクションをACTIVATE状態にし、次にトランザクションを構成する複数のSQL文(updateなど)を実行します。 次に、IDLE 状態の XA トランザクションに対して、「XA PREPARE」コマンドまたは「XA COMMIT...ONE PHASE」コマンドを実行できます。 最後に、「XA COMMIT」を呼び出してトランザクションをコミットします (または、「XA ROLLBACK」を呼び出してトランザクションをロールバックします)。これにより、グローバルトランザクションの一貫性が実現されます。 上記のプロセスから、MySQL データベースの分散トランザクションでは、MySQL の役割は実際には XA トランザクション プロセスにおける RM であり、TM は MySQL サーバーに接続されたクライアントであることがわかります。分散トランザクションでは、通常、少なくとも 2 つの RM が関係します。したがって、MySQL が XA プロトコルをサポートすると言う場合、MySQL を RM として参照しており、これは MySQL が XA プロトコルで RM が持つべき機能を実装していることを意味します。 これで、MySQL XA が分散トランザクションを実装する方法についてのこの記事は終わりです。MySQL XA 分散トランザクションの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: HTML a タグの href 属性を使用して相対パスと絶対パスを指定する方法
>>: ウェブページの読み込み速度を上げる25の方法とヒント
最近、宿題をしているときに、iframe を使用せずにページをネストする必要があったため、jquer...
1. SQL インジェクションとは何ですか? SQL インジェクションは、入力パラメータに SQL ...
1. Docker psはコンテナをリストします 2. Docker cpはコンテナにファイルをコピ...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
SSH の正式名称は Secure SHell です。 SSH を使用すると、送信されるすべてのデ...
問題の起源docker を使用する場合、残念ながら docker コンテナ内のホストのポート 80 ...
長い間、リソースの制約により、使用できるフォントが限られていたため、Web サイトの開発は妨げられて...
仮想ホストは、インターネット上で実行されているサーバー ホストを複数の「仮想」ホストに分割する特殊な...
justify-content:space-betweenレイアウトを使用する場合、要素の最後の行に...
ハッシュモード(デフォルト)動作原理:ウェブページのハッシュ値の変化を監視する—> onhas...
ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...
1. MySQLの文字セットを確認する '%char%' のような変数を表示します。...
導入GitLab CE または Community Edition は、主に Git リポジトリのホ...
jsvc の紹介実稼働環境では、Tomcat はデーモン モードで実行する必要があります。Tomc...
MySQL の導入現在、会社ではプラットフォーム運用を通じてMySQLを導入しています。金曜日、プラ...