システム変数は、次の変数を除き (セッションスコープで使用されるとき)、STATEMENT
モード使用時は正しく複製されません。
auto_increment_increment
auto_increment_offset
character_set_client
character_set_connection
character_set_database
character_set_server
collation_connection
collation_database
collation_server
foreign_key_checks
identity
last_insert_id
lc_time_names
pseudo_thread_id
sql_auto_is_null
time_zone
timestamp
unique_checks
MIXED
モード使用時に、前述のリスト内の変数がセッションスコープで使用されるときはステートメントベースから行ベースロギングに切り替わります。 セクション5.4.4.3「混合形式のバイナリロギング形式」を参照してください。
sql_mode
も NO_DIR_IN_CREATE
モードを除いてレプリケートされます。レプリカは、ソースでの変更に関係なく、常に NO_DIR_IN_CREATE
の独自の値を保持します。 これは、すべてのレプリケーション形式に当てはまります。
ただし、mysqlbinlog が SET @@sql_mode =
ステートメントを解析したときに、mode
NO_DIR_IN_CREATE
を含む完全な mode
値が受信サーバーに渡されます。 このため、このようなステートメントのレプリケーションは、STATEMENT
モード使用時は安全でない場合があります。
ロギングモードに関係なく、default_storage_engine
システム変数はレプリケートされません。これは、異なるストレージエンジン間のレプリケーションを容易にすることを目的としています。
read_only
システム変数は複製されません。 さらに、この変数を有効にした場合の一時テーブル、テーブルロック、および SET PASSWORD
ステートメントに関する効果は、MySQL バージョンごとに異なります。
max_heap_table_size
システム変数は複製されません。 レプリカでこれを行わずにソースでこの変数の値を増やすと、ソース上の MEMORY
テーブルで INSERT
ステートメントを実行しようとしたときに、最終的にレプリカで「テーブルがいっぱいです」エラーが発生する可能性があるため、レプリカ上の対応する値より大きくなることが許可されます。 詳細については、セクション17.5.1.21「レプリケーションと MEMORY テーブル」を参照してください。
ステートメントベースレプリケーションで、セッション変数は、テーブルを更新するステートメントで使用されるときに正しく複製されません。 たとえば、次の一連のステートメントでは、ソースとレプリカに同じデータは挿入されません:
SET max_join_size=1000;
INSERT INTO mytable VALUES(@@max_join_size);
これは、一般的なシーケンスには適用されません。
SET time_zone=...;
INSERT INTO mytable VALUES(CONVERT_TZ(..., ..., @@time_zone));
セッション変数のレプリケーションは、行ベースレプリケーションが使用されているときは問題ではありません。このケースでは、セッション変数は常に安全に複製されます。 セクション17.2.1「レプリケーション形式」を参照してください。
次のセッション変数はバイナリログに書き込まれ、ロギング形式に関係なく、バイナリログの解析時にレプリカによって適用されます:
sql_mode
foreign_key_checks
unique_checks
character_set_client
collation_connection
collation_database
collation_server
sql_auto_is_null
文字セットと照合順序に関係するセッション変数はバイナリログに書き込まれるけれども、異なる文字セット間のレプリケーションはサポートされません。
混乱の可能性を低減するために、特にファイルシステムが大/小文字を区別するプラットフォームで MySQL を実行している場合は、ソースとレプリカの両方で lower_case_table_names
システム変数に常に同じ設定を使用することをお薦めします。 lower_case_table_names
設定は、サーバーの初期化時にのみ構成できます。