サーバーは、いくつかのロギング形式を使用して情報をバイナリログに記録します:
MySQL のレプリケーション機能は、元はソースからレプリカへの SQL ステートメントの伝播に基づいていました。 これはステートメントベースのロギングと呼ばれます。
--binlog-format=STATEMENT
を指定してサーバーを起動することによって、この形式を使用できます。行ベースロギング (デフォルト) では、ソースは個々のテーブル行がどのように影響を受けるかを示すイベントをバイナリログに書き込みます。
--binlog-format=ROW
を指定してサーバーを起動することによって、サーバーが行ベースのロギングを使用するようにすることができます。3 番目のオプションである混合形式ロギングも選択できます。 混合形式ロギングの場合、デフォルトではステートメントベースのロギングが使用されますが、次に示すような特定の状況ではロギングモードが自動的に行ベースに切り替わります。
--binlog-format=MIXED
オプションを指定して mysqld を開始することによって、MySQL に混合形式ロギングを使用させることができます。
ロギング形式は、使用されているストレージエンジンによって設定または制限される可能性があります。 これは、異なるストレージエンジンを使用しているソースとレプリカ間で特定のステートメントをレプリケートするときの問題を排除するのに役立ちます。
ステートメントベースのレプリケーションでは、非決定的なステートメントのレプリケーションに関して問題があることがあります。 所定のステートメントがステートメントベースのレプリケーションについて安全かどうかを判断するために、MySQL は、ステートメントベースのロギングを使用してステートメントをレプリケーションできることを保証できるかどうかを判断します。 MySQL がこれを保証できない場合、潜在的に信頼できないステートメントにマークを付け、次の警告を発行します。Statement may not be safe to log in statement format.
これらの問題は、代わりに MySQL の行ベースのレプリケーションを使用することで回避できます。