スレーブ間の差異:一般的な解決法● スレーブ間の差異を無視する。(運がよければ大丈夫・・・)● マスターの OS が再起動するのを待って、マスター上のバイナ リログから差異を抽出する。 – クラッシュ時にバイナリログが欠損すると使えない。 – --sync-binlog=1 は遅い。● スレーブ上のバイナリログを活用する: --log-slave-updates – 頑張ってスクリプト書く書くしかじか?! – Auto-inc カラムを使って目印に。● Global Transaction ID – 自動化が出来る素晴らしい!けど・・・ – Google Patch の適用が必要。 – MySQL 5.0 しか対応してないよね・・・
37.
スレーブ間の差異をなくす新手順● Xid を使おう! – XA トランザクションの ID という意味だが、 XA でな いトランザクションを利用していると、 COMMIT 時にバイナリログに記録される。 – マスターの query_id (単調増加の 64 ビット整数) ● マスターが再起動しない限り ID が被らない! – リレーログにもそっくり同じ Xid が記録される。 ● リレーログの差異を特定できる!!
38.
Xid イベントBEGIN/*!*/;# at174#100723 0:21:27 server id 1 end_log_pos 269Query thread_id=8 exec_time=0 error_code=0use test/*!*/;SET TIMESTAMP=1279812087/*!*/;insert into t2 values(1),(2),(3)/*!*/;# at 269#100723 0:21:27 server id 1 end_log_pos 296Xid = 73COMMIT/*!*/;DELIMITER ;