MySQL5.1には,大きく改良されたレプリケーション機能が搭載された。これまでのステートメント(SQL文)ベースのレプリケーションに加えて,マスタの更新結果をスレーブが反映する行ベースのレプリケーションが搭載されたのだ。レプリケーションの機能追加によって,より正確なレプリケーション処理が可能になった。
しかし,よいことばかりではない。行ベースのレプリケーションは,注意すべき点が存在する。これまでのステートメントベースのレプリケーションと同様の設計や運用では,パフォーマンスを得られない恐れがある。今回は,MySQL5.1レプリケーションの注意点を解説する。
MySQL 5.1のレプリケーション
MySQl 5.1のレプリケーションには,同期方法として3つのモードが実装されている。ステートメントベースは,マスタで実行されたSQLステートメントをスレーブでも実行する方式だ。MySQL 5.0までは,この方式のみをサポートしていた。
行ベースは,マスタで更新があった行(レコード)のデータをスレーブに送信して置き換える方式だ。
ミックスは,必要に応じてステートメントベースと行ベースを選択する方式だ。当初,ミックスがMySQL 5.1のデフォルトのモードだったが,MySQL 5.1.29から,5.0との互換を維持するためにステートメントベースがデフォルトに変更された。
表1●MySQL 5.1のレプリケーションモード
レプリケーション | binlog_formatへの設定値 | |
ステートメント ベース(SBR) | STATEMENT | 1 |
行ベース(RBR) | ROW | 2 |
ミックス(MIXED) デフォルト | MIXED | 0 |
レプリケーションモードは,システム変数binlog_formatの設定値で簡単に変更できる。変更内容は,即座に反映されるので,運用中でも簡単にレプリケーションモードを変更することができる。設定ファイル(my.cnfまたはmy.ini)に記述する場合には,数値ではなく文字列(STATEMENT,ROW,MIXED)で記述する。
図1●MySQL5.1のレプリケーション
なお,システム変数binlog_formatは,グローバルとセッションの2段階で設定可能だ。そのため,必要に応じて,セッション毎に変更することが可能である。
1ページ第5段落で「ミックスが,MySQL 5.1のデフォルトのモードである」としていましたが,正しくは「当初,ミックスがMySQL 5.1のデフォルトのモードだったが,MySQL 5.1.29から,5.0との互換を維持するためにステートメントベースがデフォルトに変更された」です。お詫びして訂正します。本文は修正済みです。 [2009/05/01 17:31] 1ページ第6段落に「設定ファイル(my.cnfまたはmy.ini)に記述する場合には,数値ではなく文字列(STATEMENT,ROW,MIXED)で記述する。」と追記しました。 [2009/05/01 20:33]