序文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の方法とヒント
1. Linuxディスクの状態を確認する df -lh lsblkコマンドは、使用可能なすべてのブロ...
最近、MySQL を使っています。Linux での mysql-installation という記事...
許可が拒否されました:その理由は、ファイルの読み取り、書き込み、作成、削除などの権限がないためです。...
最近、CSS3 と js の組み合わせを作成したのですが、z-index が有効にならないケースが多...
<br />ウェブサイトのアクセス速度はウェブサイトのトラフィックに直接影響を及ぼし、ウ...
この記事では、省と市の簡単な連携を実現するためのJavaScriptの具体的なコードを参考までに紹介...
目次1. 小道具親 >>> 子 (Props)子 >>> 親 (...
オーバーレイネットワーク分析組み込みのホスト間ネットワーク通信は、常に Docker の待望の機能で...
公式サイトからインストールパッケージをダウンロードします: mysql-8.0.19-linux-g...
この記事の例では、Vue Element UIカスタム説明リストコンポーネントの具体的なコードを参考...
この記事は主にJavaScriptを使用してWeb計算機を実現する効果を記録し、参考として掲載してい...
1 公式サイトからMySQL8をダウンロードしてインストールするMySQL8 ダウンロードアドレスこ...
xhtml+css のウェブサイト再構築、ウェブ標準などについては、記事が多すぎるので繰り返しません...
序文:グループ化関数はグループ内の最初のデータを取得しますが、各グループ内の最新のデータを取得する必...
目次1. コマンド2. docker-compose.yml 3. Dockerファイル4. 直接変...