MySQL クロスデータベーストランザクション XA 操作の例

MySQL クロスデータベーストランザクション XA 操作の例

この記事では、例を使用して、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データベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL に絵文字を保存するときに表示されるエラー メッセージ「java.sql.SQLException: 文字列値が正しくありません:'\xF0\x9F\x92\xA9\x0D\x0A...'」の解決方法
  • Xampp サーバーで MySQL パスワードを変更する方法 (画像付き)
  • Mac で XAMPP に付属する MySQL をターミナルを使って開く方法
  • xampp で MySQL のデフォルト パスワードを変更する方法
  • ThinkPHP フレームワークの構築とよくある問題 (XAMPP インストール失敗、Apache/MySQL 起動失敗)
  • xampp で MySQL のデフォルトの空のパスワード (ルート パスワード) を変更する方法
  • MySQLのXAトランザクションリカバリプロセスの詳細な説明
  • xampp のセルフスタートと mysql.sock の問題を解決する
  • MySQL データベースは XA 仕様をどのように実装しますか?

<<:  メッセージボードにメッセージを追加および削除するための JavaScript

>>:  Apache Flink の任意の Jar パッケージのアップロードにより、リモート コード実行の脆弱性が再発する問題が発生する (脆弱性警告)

推薦する

mysql8.0.18 で winx64 をインストールするための詳細なチュートリアル (画像とテキスト付き)

MySQLデータベースをダウンロードするには、https://dev.mysql.com/down...

JavaScript でイベントのバブリングを防ぐ方法

注意すべき点は、イベントバブリング自体の特性上、メリットだけでなくデメリットも生じるということです。...

JavaScript 円グラフの例

描画効果実装コードJavaScript var キャンバス = document.getElemen...

GTK ツリービューの原理と使用法の分析

GtkTreeView コンポーネントは、美しい通常のリストやツリーのようなリストを作成できる高度な...

JavaScriptはスライダーを介してWebページの色を変更することを実装します

みなさんこんにちは、今日はウェブフロントエンドのHTMLを見ていたら、inputタグのtype属性が...

VMware仮想マシンブリッジによるインターネット相互接続を実現する方法

VMware をインストールして新しい仮想マシンを作成したら、オプション バーの [編集] - [仮...

CSS変数を使用して、クールで素晴らしいフローティング効果を実現します。

最近、Grover の Web サイトで楽しいホバー アニメーションを見つけ、自分自身のインスピレー...

Hadoopカウンターとデータクリーニングの適用

データクリーニング (ETL)コアビジネスの MapReduce プログラムを実行する前に、まずデー...

JavaScript関数の使い方の詳細な説明

目次1. 関数を宣言する2. 関数の呼び出し3. 関数パラメータ4. 関数の戻り値5. 議論の使用6...

Docker はクラスター MongoDB 実装手順を構築します

序文会社の業務上のニーズにより、独自の MongoDB サービスを構築する予定です。MongoDB ...

LinuxテキストエディタVimの詳しい説明

Vim は強力なフルスクリーン テキスト エディターであり、Linux/UNIX で最も一般的に使用...

CentOS7 64ビットインストールmysqlグラフィックチュートリアル

MySQL をインストールするための前提条件: CentOS 7 64 ビットをインストールし、Ce...

Centos7環境でYUMを構築する方法

1. yumソースの設定ファイルを入力します 2.lsで設定ファイルを表示する 3. ディレクトリを...

HTML(divレイヤー)を介してFLASHにリンクを追加するための実装コード

今日、クライアントが広告を掲載したいのですが、提供された素材は Flash です。私たちはあまり気に...

Mybatisの特殊文字処理の詳細な説明

序文: Mybatis の特殊文字処理、Mybatis の xml ファイル内の特殊文字の処理、ここ...