- それぞれのMySQLはSemisyncで正しくフェイルオーバーしたりGroup Replicationだったりで書き込みは信用できることにする
- サロゲートキー(だけ)でなくて比較可能なPRIMARY KEYが存在することにする
- 取り敢えず簡単なINSERTで考えるけどUPDATEもありそう
という前提で考え事。
FEDERATEDストレージエンジンはそもそもトランザクションをサポートしないので論外とする。
App側の2層コミットっぽいもの
2 Phase Commitはそもそもコーディネーターの障害に対する耐性がない…。
eval
{
$dbh1->begin;
$dbh1->do("INSERT INTO ..");
$dbh2->begin;
$dbh2->do("INSERT INTO ..");
};
if ($@)
{
$dbh1->rollback;
$dbh2->rollback;
}
$dbh1->commit;
### この瞬間にAppのプロセスが落ちるとダメ
$dbh2->commit; …
[さらに読む]