同じトランザクション内にいくつかのSQLを違うサーバーに配置する方法はありますか?

StackOverflow https://stackoverflow.com/questions/3084976

質問

私のシステムでは、アクションを実行します。報告のために、そのアクションを別のサーバー(関心がある場合はStarスキーマ)にそのアクションを記録します。明らかに、アクションの更新/挿入がログと同じトランザクションにある必要があります。
それでは、同じトランザクションに2つの異なるサーバーに2つの異なるSQLを含める方法はありますか?
今、私はコードレベル(PHP)でそれを管理します

役に立ちましたか?

解決

これはMySQLだけでは不可能です。 MySQLにはaがあります フェデレーションストレージエンジン (つまり、他のMySQLサーバーへのリモートアクセス)トランザクションはサポートしていません。つまり、MySQLを介してマルチサーバートランザクションを直接調整することはできません。 MySQLがサポートしています xa innodbテーブル用, 、そのため、MySQLを使用して外部トランザクションマネージャーを使用できますが、PHPにはXAのサポートはありません。通常、これはエンタープライズレベルの機能と見なされ、使用して実装します ジャワ また C#/。ネット.

他のヒント

複雑な方法は次のとおりです。

  1. 同じサーバーで同じテーブルを作成します。
  2. このサーバーマスターを作成します
  3. このテーブルをレプリカを設定します

そのログテーブルがそれほど大きくない場合は、できることができます。

  1. 最初のテーブル名セット_tmp
  2. 挿入と更新でスレーブlog_tmpトリガーに作成して、データをログテーブルにコピーする
  3. しばらくして、いくつかのデータのlog_tmpから削除します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top