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


17.1.4.2 レプリケーションマスターのオプションと変数

このセクションでは、レプリケーションマスターサーバーで使用できるサーバーオプションとシステム変数について説明します。オプションはコマンド行またはオプションファイルで指定できます。システム変数値はSET を使用して指定できます。

マスターと各スレーブでは、server-id オプションを使用して一意レプリケーション ID を確立する必要があります。サーバーごとに、一意の正の整数を 1 から 232 − 1 の範囲から選択してください。各 ID は、ほかのレプリケーションのマスターまたはスレーブが使用するほかのあらゆる ID と異なっている必要があります。例: server-id=3

バイナリロギングを制御するためにマスターで使用されるオプションについては、セクション17.1.4.4「バイナリログのオプションと変数」を参照してください。

レプリケーションマスターで使用されるシステム変数

次のシステム変数は、レプリケーションマスターを制御するために使用されます。

  • auto_increment_increment

    システム変数 名前 auto_increment_increment
    変数スコープ グローバル、セッション
    動的変数 はい
    許可されている値 数値
    デフォルト 1
    最小値 1
    最大値 65535

    auto_increment_increment および auto_increment_offset は、マスターからマスターへのレプリケーションで使用するためのもので、AUTO_INCREMENT カラムの操作を制御するために使用できます。両方の変数はグローバル値とセッション値を持ち、各値は 1 から 65,535 (1 と 65,535 を含みます) の間の整数値を取ることができます。これらの 2 つの変数のいずれかの値を 0 に設定すると、代わりにその値は 1 に設定されます。これらの 2 つの変数のいずれかの値を 65,535 より大きな整数または 0 より小さい整数に設定しようとすると、代わりにその値は 65,535 に設定されます。auto_increment_increment または auto_increment_offset の値を整数でない値に設定しようとすると、エラーが発生し、変数の実際の値は変化しません。

    注記

    auto_increment_incrementNDB テーブルで使用する場合にもサポートされます。

    これら 2 つの変数は、次のように AUTO_INCREMENT カラムの動作に影響します。

    • auto_increment_increment は、連続するカラム値の間隔を制御します。例:

      mysql> SHOW VARIABLES LIKE 'auto_inc%';
      +--------------------------+-------+
      | Variable_name            | Value |
      +--------------------------+-------+
      | auto_increment_increment | 1     |
      | auto_increment_offset    | 1     |
      +--------------------------+-------+
      2 rows in set (0.00 sec)
      
      mysql> CREATE TABLE autoinc1
          -> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
        Query OK, 0 rows affected (0.04 sec)
      
      mysql> SET @@auto_increment_increment=10;
      Query OK, 0 rows affected (0.00 sec)
      
      mysql> SHOW VARIABLES LIKE 'auto_inc%';
      +--------------------------+-------+
      | Variable_name            | Value |
      +--------------------------+-------+
      | auto_increment_increment | 10    |
      | auto_increment_offset    | 1     |
      +--------------------------+-------+
      2 rows in set (0.01 sec)
      
      mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
      Query OK, 4 rows affected (0.00 sec)
      Records: 4  Duplicates: 0  Warnings: 0
      
      mysql> SELECT col FROM autoinc1;
      +-----+
      | col |
      +-----+
      |   1 |
      |  11 |
      |  21 |
      |  31 |
      +-----+
      4 rows in set (0.00 sec)
    • auto_increment_offsetAUTO_INCREMENT カラム値の開始点を指定します。次のことは、auto_increment_increment の記述で示した例のように、同じセッション中にこれらのステートメントが実行されるものと仮定しています。

      mysql> SET @@auto_increment_offset=5;
      Query OK, 0 rows affected (0.00 sec)
      
      mysql> SHOW VARIABLES LIKE 'auto_inc%';
      +--------------------------+-------+
      | Variable_name            | Value |
      +--------------------------+-------+
      | auto_increment_increment | 10    |
      | auto_increment_offset    | 5     |
      +--------------------------+-------+
      2 rows in set (0.00 sec)
      
      mysql> CREATE TABLE autoinc2
          -> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
      Query OK, 0 rows affected (0.06 sec)
      
      mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);
      Query OK, 4 rows affected (0.00 sec)
      Records: 4  Duplicates: 0  Warnings: 0
      
      mysql> SELECT col FROM autoinc2;
      +-----+
      | col |
      +-----+
      |   5 |
      |  15 |
      |  25 |
      |  35 |
      +-----+
      4 rows in set (0.02 sec)

      auto_increment_offset の値が auto_increment_increment の値よりも大きいと、auto_increment_offset の値は無視されます。

    これらの変数のいずれかが変更されてから、AUTO_INCREMENT カラムを含むテーブルに新しい行が挿入される場合、結果は反直感的に見える場合があります。AUTO_INCREMENT 値のシリーズがカラムにすでに存在する値に関係なく計算され、挿入される次の値が AUTO_INCREMENT カラムに存在する最大値よりも大きなシリーズ内最小値であるためです。シリーズは次のように計算されます。

    auto_increment_offset + N × auto_increment_increment

    ここで、N はシリーズ内正の整数値 [1, 2, 3, ...] です。例:

    mysql> SHOW VARIABLES LIKE 'auto_inc%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | auto_increment_increment | 10    |
    | auto_increment_offset    | 5     |
    +--------------------------+-------+
    2 rows in set (0.00 sec)
    
    mysql> SELECT col FROM autoinc1;
    +-----+
    | col |
    +-----+
    |   1 |
    |  11 |
    |  21 |
    |  31 |
    +-----+
    4 rows in set (0.00 sec)
    
    mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
    Query OK, 4 rows affected (0.00 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> SELECT col FROM autoinc1;
    +-----+
    | col |
    +-----+
    |   1 |
    |  11 |
    |  21 |
    |  31 |
    |  35 |
    |  45 |
    |  55 |
    |  65 |
    +-----+
    8 rows in set (0.00 sec)

    auto_increment_incrementauto_increment_offset に示される値は、シリーズ 5 + N × 10、つまり [5, 15, 25, 35, 45, ...] を生成します。INSERT より前に col カラムに存在する最高値は 31、AUTO_INCREMENT シリーズ内で次に使用できる値は 35 なので、col に挿入される値はそのポイントで始まり、結果は SELECT クエリーで示されるようになります。

    これらの 2 つの変数の影響を単一テーブルに制限することはできません。これらの変数は MySQL サーバーのすべてのテーブルのすべての AUTO_INCREMENT カラムの動作を制御します。どちらかの変数のグローバル値が設定されると、グローバル値が変更されるか、セッション値の設定によってオーバーライドされるまで、または mysqld が再起動されるまでその効果は持続します。ローカル値が設定されると、新しい値は、セッションの期間に現在のユーザーが新しい行を挿入したすべてのテーブルの AUTO_INCREMENT カラムに影響します (そのセッション中にそれらの値が変更される場合を除く)。

    auto_increment_increment のデフォルト値は 1 です。セクション17.4.1.1「レプリケーションと AUTO_INCREMENT」を参照してください。

  • auto_increment_offset

    システム変数 名前 auto_increment_offset
    変数スコープ グローバル、セッション
    動的変数 はい
    許可されている値 数値
    デフォルト 1
    最小値 1
    最大値 65535

    この変数のデフォルト値は 1 です。詳細については、auto_increment_increment の説明を参照してください。

    注記

    auto_increment_offsetNDB テーブルで使用する場合にもサポートされます。


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