この記事では、例を使用して、MySQL のデータベース間トランザクション XA 操作について説明します。ご参考までに、詳細は以下の通りです。 以前、仕事でデータベース間トランザクションの問題に遭遇しました。その後、インターネットで検索し、整理して要約します。 1. まず、MySQLがXAトランザクションサポートを有効にしていることを確認します。 '%XA%' のような変数を表示 innodb_support_xa の値が ON の場合、MySQL で XA トランザクションのサポートが有効になっていることを意味します。 そうでない場合は、次を実行します。 innodb_support_xa を ON に設定する <?PHP $dbtest1 = new mysqli("172.20.101.17","public","public","dbtest1")またはdie("dbtest1接続に失敗しました"); $dbtest2 = new mysqli("172.20.101.18","public","public","dbtest2")またはdie("dbtest2接続に失敗しました"); //XA トランザクションの ID を指定します。xid は一意の値である必要があります。 $xid = uniqid(""); // 2 つのデータベースは同じトランザクション ID を指定しており、2 つのデータベースの操作が同じトランザクション内にあることを示しています $dbtest1->query("XA START '$xid'"); // トランザクション 1 を準備します $dbtest2->query("XA START '$xid'"); //トランザクション2を準備する 試す { //$dbtest1 $return = $dbtest1->query("UPDATE member SET name='唐大麦' WHERE id=1"); 戻り値が偽の場合 throw new Exception("ライブラリ [email protected] でメンバー更新操作が失敗しました!"); } //$dbtest2 $return = $dbtest2->query("UPDATE memberpoints SET point=point+10 WHERE memberid=1"); 戻り値が偽の場合 throw new Exception("データベース [email protected] でメンバーポイントの更新操作が失敗しました!"); } //フェーズ 1: $dbtest1 は送信する準備ができています $dbtest1->query("XA END '$xid'"); $dbtest1->クエリ("XA PREPARE '$xid'"); //フェーズ 1: $dbtest2 は送信する準備ができています $dbtest2->query("XA END '$xid'"); $dbtest2->query("XA PREPARE '$xid'"); //フェーズ 2: 2 つのデータベースを送信します $dbtest1->query("XA COMMIT '$xid'"); $dbtest2->query("XA COMMIT '$xid'"); } キャッチ(例外$e){ //フェーズ 2: ロールバック $dbtest1->query("XA ROLLBACK '$xid'"); $dbtest2->query("XA ROLLBACK '$xid'"); die($e->getMessage()); } $dbtest1->閉じる(); $dbtest2->close(); ?> XA のパフォーマンスは非常に低いです。 1 つのデータベース内のトランザクションのパフォーマンスと複数のデータベース間の XA トランザクションのパフォーマンスを比較すると、パフォーマンスが約 10 倍低下していることがわかります。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL トランザクション操作スキルの概要」、「MySQL クエリ スキル集」、「MySQL ストアド プロシージャ スキル集」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: メッセージボードにメッセージを追加および削除するための JavaScript
>>: Apache Flink の任意の Jar パッケージのアップロードにより、リモート コード実行の脆弱性が再発する問題が発生する (脆弱性警告)
目次01 よくある故障 1 02 よくある欠陥 2 03 よくある欠陥 3 04 よくある欠陥 4 ...
目次1. 理解2. 使用1. h() パラメータ2. 使い方が簡単3. カウンターケースを実装する4...
<br />質問: Word のコンテンツを Web サイトのエディターに直接コピーする...
WindowsとLinux間のファイル転送(1)WinSCPを使用して、WindowsファイルをLi...
序文ご存知のとおり、bash (Bourne-Gain Shell) は、ほとんどの Linux デ...
MySQLは独立した書き込み分離を設定します。コードに次のものを書くと問題が発生する可能性があります...
現在、Redis とコンテナについて学習中なので、Docker を使用して Redis マスタースレ...
オブジェクトの hasOwnProperty() メソッドは、オブジェクトに特定の独自の (継承され...
1. Dockerをインストールするyum -y install docker-ioインストールが完...
SSH は Secure Shell の略で、安全な伝送プロトコルです。Ubuntu クライアントは...
最近、Docker がコンテナの起動時に特定のプロセスを直接実行できるようにする方法を調べていたとこ...
インストールREADMEに従ってインストールしてくださいドキュメントには、exa は Rust で実...
1. 4つのrpmパッケージをダウンロードする mysql-コミュニティクライアント-5.7.26-...
1. ITミルツールキットIT Mill Toolkit は、リッチ Web アプリケーション用のウ...
基本的な概念: Macvlanの動作原理: Macvlan は、Linux カーネルでサポートされて...