Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


17.4.1.34 レプリケーションと変数

システム変数は、次の変数を除き (セッションスコープで使用されるとき)、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.2.4.3「混合形式のバイナリロギング形式」を参照してください。

NO_DIR_IN_CREATE モードの場合を除いて、sql_mode も複製されます。スレーブは常に、NO_DIR_IN_CREATE にその独自の値を保持します (マスター上での変更にかかわらず)。これは、すべてのレプリケーション形式に当てはまります。

ただし、mysqlbinlogSET @@sql_mode = mode ステートメントを解析したときに、NO_DIR_IN_CREATEを含む完全な mode 値が受信サーバーに渡されます。このため、このようなステートメントのレプリケーションは、STATEMENT モード使用時は安全でない場合があります。

default_storage_engine および storage_engine のシステム変数は、ロギングモードにかかわらず複製されません。これは、異なるストレージエンジン間のレプリケーションを容易にすることを意図しています。

read_only システム変数は複製されません。さらに、この変数を有効にした場合の一時テーブル、テーブルロック、および SET PASSWORD ステートメントに関する効果は、MySQL バージョンごとに異なります。

max_heap_table_size システム変数は複製されません。スレーブ上でこの変数の値を増やさずにマスター上で増やすと、最終的にスレーブ上でTable is fullエラーになる可能性があります (スレーブの対応するものより大きくなることが許可されたマスター上のMEMORY テーブルで INSERT ステートメントを実行しようとするとき)。詳細については、セクション17.4.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.1.2「レプリケーション形式」を参照してください。

MySQL 5.6 では、次のセッション変数はロギング形式にかかわらず、バイナリログに書き込まれ、バイナリログを解析するときにレプリケーションスレーブによって受け付けられます。

  • sql_mode

  • foreign_key_checks

  • unique_checks

  • character_set_client

  • collation_connection

  • collation_database

  • collation_server

  • sql_auto_is_null

重要

文字セットと照合順序に関係するセッション変数はバイナリログに書き込まれるけれども、異なる文字セット間のレプリケーションはサポートされません。

混乱の可能性を減らすため、マスターとスレーブの両方で lower_case_table_names システム変数に常に同じ設定を使用することをお勧めします (特に、ファイルシステムが大文字小文字を区別するプラットフォームで MySQL を実行しているとき)。

注記

以前のバージョンの MySQL で、大文字小文字を区別するファイルシステムが使用されているとき、この変数をスレーブで 1 に、マスターで異なる値に設定すると、レプリケーションが失敗することがありました。この問題は MySQL 5.6.1 で解決されています。(Bug #37656)


User Comments
Sign Up Login You must be logged in to post a comment.