同じトランザクション内にいくつかのSQLを違うサーバーに配置する方法はありますか?
-
28-09-2019 - |
質問
私のシステムでは、アクションを実行します。報告のために、そのアクションを別のサーバー(関心がある場合はStarスキーマ)にそのアクションを記録します。明らかに、アクションの更新/挿入がログと同じトランザクションにある必要があります。
それでは、同じトランザクションに2つの異なるサーバーに2つの異なるSQLを含める方法はありますか?
今、私はコードレベル(PHP)でそれを管理します
解決
これはMySQLだけでは不可能です。 MySQLにはaがあります フェデレーションストレージエンジン (つまり、他のMySQLサーバーへのリモートアクセス)トランザクションはサポートしていません。つまり、MySQLを介してマルチサーバートランザクションを直接調整することはできません。 MySQLがサポートしています xa innodbテーブル用, 、そのため、MySQLを使用して外部トランザクションマネージャーを使用できますが、PHPにはXAのサポートはありません。通常、これはエンタープライズレベルの機能と見なされ、使用して実装します ジャワ また C#/。ネット.
他のヒント
使用できます 分散トランザクションコーディネーター。
複雑な方法は次のとおりです。
- 同じサーバーで同じテーブルを作成します。
- このサーバーマスターを作成します
- このテーブルをレプリカを設定します
そのログテーブルがそれほど大きくない場合は、できることができます。
- 最初のテーブル名セット_tmp
- 挿入と更新でスレーブlog_tmpトリガーに作成して、データをログテーブルにコピーする
- しばらくして、いくつかのデータのlog_tmpから削除します。
所属していません StackOverflow