19. InnoDB の分離レベル
分離レベル 分離性 性能 ダーティ 反復不可能読 ファントム
リード み取り
READ- 低 低 O O O
UNCOMMITTED
READ- 高 X O O
COMMITTED
REPEATABLE- 高 X X X
READ
SERIALIZABLE 高 低 X X X
20. バイナリログの管理
●
有効化 --log-bin=binlog
●
一覧表示 SHOW BINARY LOGS;
●
中見
– SHOW BINLOG EVENTS IN 'binlog.000001'
– mysqlbinlog binlog.000001
●
削除 PURGE BINARY LOGS TO 'binlog.000002'
●
自動削除 --expire-logs-days=30
36. スレーブ間の差異:一般的な解決法
●
スレーブ間の差異を無視する。(運がよければ大丈夫・・・)
●
マスターの 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
/*!*/;
# at 174
#100723 0:21:27 server id 1 end_log_pos 269
Query thread_id=8 exec_time=0 error_code=0
use test/*!*/;
SET TIMESTAMP=1279812087/*!*/;
insert into t2 values(1),(2),(3)
/*!*/;
# at 269
#100723 0:21:27 server id 1 end_log_pos 296
Xid = 73
COMMIT/*!*/;
DELIMITER ;