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]