MySQLレプリケーションの使用を開始しようとしていますが、どの種類のbinlog形式が最適なのでしょうか。 Row、Statement、Mixedがあります。
5.1.49を使用します。
現在はローが勝っていますが、なぜローの代わりに混合を使用する必要があるのか疑問に思っています。
どうもありがとう、
デレンダ
ステートメントベースのレプリケーションは最も速くてコンパクトですが、状況によっては、スレーブとマスターで異なる結果(非決定論的)が生成される可能性があり、結果として一貫性が失われます。例は次のとおりです。
UPDATE mytable SET a = a + 1 LIMIT 1;
並べ替え順序がなく、ディスク上の順序が予測不可能または一貫していないため、どの行が更新されるかを保証する方法はありません。
行ベースのレプリケーションでは、クエリではなく変更されたデータをレプリケートすることでこの問題を回避しますが、次のようなステートメントは
UPDATE mytable SET a = a + 1;
影響を受ける行の数に関係なく、ステートメントベースのレプリケーションでは数バイトだけをレプリケートする必要があります。100万行を更新すると、行ベースのレプリケーションは100万行すべてをレプリケートします。これは非常に遅く、はるかに大きなバイナリログを作成します。
混合モードは、最も効率的または安全な方を使用して、2つを切り替えます(たとえば、単純な挿入は、おそらく行ベースのレプリケーションで最もよく行われます-ステートメントの使用は遅くなる場合があります)。問題の機会は、どのステートメントが非決定的であるかを認識することであり、これは重要な問題です。
要約すれば:
公式ドキュメントは here です。
これも古い質問です。新しいビルドには、MySQL 5.5を使用する必要があります。私はPerconaのビルドを好みます。