# 演習2: TiDB の設定

## 概要

TiDBでは、TiDBシステム変数とTiDB設定ファイルのパラメータを用いてTiDBクラスタの動作を制御します。この演習では、TiDBシステム変数とTiDB設定ファイルのパラメータの変更を経験します。TiDBサーバーのシステム変数は、その効果範囲に基づいて4つのカテゴリに分類されます。

  | カテゴリ               | 変更方法      | 効果範囲                                                 |
  | :--------------------- | :------------ | :------------------------------------------------------- |
  | セッションのみ         | `SET SESSION` | 現在のセッション                                         |
  | グローバル永続         | `SET GLOBAL`  | すべてのTiDBサーバーインスタンスとすべてのセッション     |
  | グローバル非永続       | `SET GLOBAL`  | 現在のTiDBサーバーインスタンスとその接続されたセッション |
  | セッションとグローバル | `SET SESSION` | 現在のセッション                                         |
  | セッションとグローバル | `SET GLOBAL`  | すべてのTiDBサーバーインスタンスと新しいセッション       |


### 所要時間

+ この演習は約 90 分程度かかります。

> [!TIP]
> 演習環境を起動するには、**開始**をクリックしてください。
> 環境の準備が整ったら、下部のツールバーで **次のモジュール** を選択して **モジュール 1** に進みます。
> そして、ステップバイステップの演習ガイドに従って、ハンズオン環境に接続し、タスクを開始してください。

## モジュール 1: グローバル永続システム変数の変更

+ [`tidb_gc_enable`](https://docs.pingcap.com/tidb/stable/system-variables#tidb_gc_enable-new-in-v50) はグローバル永続TiDBシステム変数の一つです。これを変更して結果を観察します。

### 手順 1. 3つのターミナルを開く

+ 以下のリンクをクリックして、演習用仮想マシンへの3つのSSH接続を開きます：
  + [ターミナル 1](ssh://monitor1-ssh#1)
  + [ターミナル 2](ssh://monitor1-ssh#2)
  + [ターミナル 3](ssh://monitor1-ssh#3)

+ これで3つのアクティブなターミナルセッションが利用可能になります。

+ ログイン後に表示されるバナーは以下のようになります。

    ```output
     ,     #_
    ~\_  ####_        Amazon Linux 2
    ~~  \_#####\
    ~~     \###|      
    ~~       \#/ ___
    ~~       V~' '->
    ~~~         /    A newer version of Amazon Linux is available!
     ~~._.   _/
        _/ _/       Amazon Linux 2023, GA and supported until 2028-03-15.
      _/m/'           https://aws.amazon.com/linux/amazon-linux-2023/
    ```

### 手順 2. ターミナル1で、TiDB サーバー1に接続します

  ```bash
  ./connect-db1.sh
  ```
  ```output
  ...
  tidb:db1>
  ```

### 手順 3. ターミナル2で、TiDB サーバー1に接続します

  ```bash
  ./connect-db1.sh
  ```
  ```output
  ...
  tidb:db1>
  ```

### 手順 4. ターミナル3で、TiDB サーバー2に接続します

  ```bash
  ./connect-db2.sh
  ```
  ```output
  ...
  tidb:db2>
  ```

### 手順 5. ターミナル1で、`tidb_gc_enable` を `OFF` に変更します

+ [ターミナル 1](ssh://monitor1-ssh#1)で、`tidb_gc_enable` のデフォルト値を確認します。

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | ON    |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | ON    |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

+ 値を`ON`から`OFF`に変更します。
  
  ```sql   
  SET GLOBAL tidb_gc_enable=OFF;
  ```
  ```output
  tidb:db1> SET GLOBAL tidb_gc_enable=OFF;
  Query OK, 0 rows affected (0.06 sec)
  ```

### 手順 6. ターミナル1で、変更を確認します

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 7. ターミナル2で変更を確認します

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.01 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 8. ターミナル3で変更を確認します

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.01 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db2> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 9. セッションスコープで `tidb_gc_enable` の値を変更する

+ 任意のターミナルで、セッションスコープで `tidb_gc_enable` の値を変更します。
  
  ```sql
  SET SESSION tidb_gc_enable=ON;
  ```
  ```output
  tidb:db2> SET SESSION tidb_gc_enable=ON;
  ERROR 1229 (HY000): Variable 'tidb_gc_enable' is a GLOBAL variable and should be set with SET GLOBAL
  ```

### 手順 10. すべてのターミナルで、MySQ Lクライアントから終了してください

  ```bash
  EXIT
  ```

### 手順 11. ターミナル1で、TiDB クラスタを再起動します

  ```bash
  tiup cluster restart tidb-test --yes
  ```
  ```output
  ...
  Restarted cluster `tidb-test` successfully
  ```

### 手順 12. すべてのターミナルで、`tidb_gc_enable` の値を確認します

+ [ターミナル 1](ssh://monitor1-ssh#1)、[ターミナル 2](ssh://monitor1-ssh#2)、および[ターミナル 3](ssh://monitor1-ssh#3)で、`tidb_gc_enable` の値が `OFF` であることを確認します。[ターミナル 1](ssh://monitor1-ssh#1)を例として使用します。前回の再起動でセッションが切断されたため、TiDBサーバーに再接続する必要があります。

  ```bash
  ./connect-db1.sh
  ```
  ```output
  ...
  tidb:db1>
  ```

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.01 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 13. 任意のターミナルで、`tidb_gc_enable` を `ON` に戻します

  ```sql
  SET GLOBAL tidb_gc_enable=ON;
  ```
  ```output
  tidb:db1> SET GLOBAL tidb_gc_enable=ON;
  Query OK, 0 rows affected (0.07 sec)
  ``` 

### まとめ
グローバルな永続的なTiDBシステム変数は、グローバルレベルでのみ設定でき、その効果はクラスタ内のすべてのTiDBサーバーとセッションに即座に適用されます。

## モジュール  2: 非永続的なグローバルシステム変数の変更

+ [`max_connections`](https://docs.pingcap.com/tidb/stable/system-variables#max_connections) は非永続的なグローバルシステム変数の一つです。これを変更し、その結果を観察します。

### 手順 1: ターミナル1で、`max_connections` を `0` から `1` に変更します

+ デフォルト値を確認します。

  ```sql
  SHOW SESSION VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.00 sec)  
  ```

+ `max_connections` を `0` から `1` に変更します。
  
  ```sql
  SET GLOBAL max_connections=1;
  ```
  ```output
  tidb:db1> SET GLOBAL max_connections=1;
  Query OK, 0 rows affected (0.00 sec)   
  ```

  ```sql
  SHOW SESSION VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 1     |
  +-----------------+-------+
  1 row in set (0.00 sec)   
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 1     |
  +-----------------+-------+
  1 row in set (0.01 sec)
  ```

### 手順 2. ターミナル2で変更を確認します

  ```sql
  SHOW SESSION VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 1     |
  +-----------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 1     |
  +-----------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 3. ターミナル3で `max_connections` の値を確認します

  ```sql
  SHOW SESSION VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db2> SHOW GLOBAL VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.01 sec)
  ```

### 手順 4. ターミナル1で、データベースセッションから退出し、再度ログインします

+ [ターミナル 1](ssh://monitor1-ssh#1)でデータベースセッションを終了し、`connect-db1.sh`を再度実行してログインし直そうとします。しかし、今回はTiDBサーバーインスタンス1の`max_connections`設定によりログイン試行が失敗します。
  
  ```bash
  ./connect-db1.sh 
  ```
  ```output
  ERROR 1040 (HY000): Too many connections
  ```

### 手順 5. いずれかのターミナルで、TiDB クラスタを再起動してください。

   ```bash
   tiup cluster restart tidb-test --yes
   ```
   ```output
   ...
   Restarted cluster `tidb-test` successfully
   ```

### 手順 6. ターミナル1で、TiDB サーバー2にログインします

  ```bash
  ./connect-db2.sh 
  ```
  ```output
  ...
  tidb:db2>
  ```

### 手順 7. すべてのターミナルで、`max_connections` の値を確認します

+ 例として[ターミナル 1](ssh://monitor1-ssh#1)を使用します。

  ```bash
  ./connect-db2.sh
  ```
  ```output
  ...
  tidb:db2>
  ```

  ```bash
  SHOW SESSION VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.00 sec)
  ```

  ```bash
  SHOW GLOBAL VARIABLES LIKE 'max_connections';
  ```
  ```output
  tidb:db2> SHOW GLOBAL VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.01 sec)
  ```

### まとめ
非永続的なグローバルなTiDBシステム変数はグローバルレベルでのみ設定でき、その効果は`SET GLOBAL`ステートメントを実行したTiDBインスタンスに適用されます。

## モジュール 3: セッションのみのシステム変数の変更

+ [`tidb_allow_remove_auto_inc`](https://docs.pingcap.com/tidb/stable/system-variables#tidb_allow_remove_auto_inc) はセッションシステム変数の一つで、それを変更して結果を観察します。

### 手順 1: ターミナル接続を確認

+ TiDBサーバー2に接続されているターミナルが2つ（[ターミナル 1](ssh://monitor1-ssh#1)と[ターミナル 3](ssh://monitor1-ssh#3)）と、TiDBサーバー1に接続されているターミナルが1つ（[ターミナル 2](ssh://monitor1-ssh#2)）あることを確認します。

### 手順 2: ターミナル1で `tidb_allow_remove_auto_inc` を `ON` に変更する

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  +----------------------------+-------+
  | Variable_name              | Value |
  +----------------------------+-------+
  | tidb_allow_remove_auto_inc | OFF   |
  +----------------------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SET SESSION tidb_allow_remove_auto_inc=ON;
  ```
  ```output
  tidb:db2> SET SESSION tidb_allow_remove_auto_inc=ON;
  Query OK, 0 rows affected (0.00 sec)
  ```

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  +----------------------------+-------+
  | Variable_name              | Value |
  +----------------------------+-------+
  | tidb_allow_remove_auto_inc | ON    |
  +----------------------------+-------+
  1 row in set (0.00 sec)
  ```


### 手順 3. ターミナル2で、`tidb_allow_remove_auto_inc` の値を確認します。

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  +----------------------------+-------+
  | Variable_name              | Value |
  +----------------------------+-------+
  | tidb_allow_remove_auto_inc | OFF   |
  +----------------------------+-------+
  1 row in set (0.01 sec)
  ```

### 手順 4. ターミナル3で、`tidb_allow_remove_auto_inc` の値を確認します

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  +----------------------------+-------+
  | Variable_name              | Value |
  +----------------------------+-------+
  | tidb_allow_remove_auto_inc | OFF   |
  +----------------------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 5. 任意のターミナルで、`tidb_allow_remove_auto_inc` の値を変更します

+ グローバルスコープで `tidb_allow_remove_auto_inc` の値を変更してみてください。
  
  ```sql
  SET GLOBAL tidb_allow_remove_auto_inc=ON;
  ```
  ```output
  tidb:db2> SET GLOBAL tidb_allow_remove_auto_inc=ON;
  ERROR 1228 (HY000): Variable 'tidb_allow_remove_auto_inc' is a SESSION variable and can't be used with SET GLOBAL
  ```

### 手順 6. ターミナル1で、`tidb_allow_remove_auto_inc` を `OFF` に戻します

  ```sql
  SET SESSION tidb_allow_remove_auto_inc=OFF;
  ```
  ```output
  tidb:db2> SET SESSION tidb_allow_remove_auto_inc=OFF;
  Query OK, 0 rows affected (0.00 sec)
  ``` 

### まとめ
セッション専用のTiDBシステム変数はセッションレベルでのみ設定でき、 `SET SESSION`ステートメントを発行した現在のセッションにその効果が適用されます。

## モジュール 4: セッションおよびグローバルシステム変数の変更

+ [`auto_increment_offset`](https://docs.pingcap.com/tidb/stable/system-variables#auto_increment_offset)はセッションおよびグローバルシステム変数の1つであり、セッションレベルとグローバルレベルでそれを変更し、結果を観察します。

### 手順 1. ターミナル接続を確認する

+ データベース接続がある3つのターミナルを持っていることを確認します。2つのターミナル（[ターミナル 1](ssh://monitor1-ssh#1)と[ターミナル 3](ssh://monitor1-ssh#3)）はTiDBサーバー2に接続されており、1つのターミナル（[ターミナル 2](ssh://monitor1-ssh#2)）はTiDBサーバー1に接続されています。

### 手順 2. ターミナル1で `auto_increment_offset` を`1`から`99`に更新する

+ [ターミナル 1](ssh://monitor1-ssh#1)でセッションレベルでシステム変数`auto_increment_offset`を`1`から`99`に確認および変更します。この変数がセッションレベルでのみ更新されたことを確認してください。
  
  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db2> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SET SESSION auto_increment_offset=99;
  ```
  ```output
  tidb:db2> SET SESSION auto_increment_offset=99;
  Query OK, 0 rows affected (0.00 sec)
  ```

  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 99    |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db2> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 3. ターミナル2および3で、`auto_increment_offset` の値を確認します

+ セッションレベルとグローバルレベルの両方で、[ターミナル 2](ssh://monitor1-ssh#2)および[ターミナル 3](ssh://monitor1-ssh#3)の変数値を確認してください。どちらも変更されずに、`1`のままである必要があります。ここでは、[ターミナル 2](ssh://monitor1-ssh#2)を例として使用します。

  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.01 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 4. ターミナル1で、`auto_increment_offset` を`1`に戻します

  ```sql
  SET SESSION auto_increment_offset=1;
  ```

### 手順 5. ターミナル1で、`auto_increment_offset` をグローバルレベルで更新します

  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db2> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SET GLOBAL auto_increment_offset=99;
  ```
  ```output
  tidb:db2> SET GLOBAL auto_increment_offset=99;
  Query OK, 0 rows affected (0.05 sec)
  ```

  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db2> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 99    |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 6. ターミナル2と3で `auto_increment_offset` を確認

+ セッションレベルとグローバルレベルの両方で、[ターミナル 2](ssh://monitor1-ssh#2)と[ターミナル 3](ssh://monitor1-ssh#3)の`auto_increment_offset`の値を確認します。グローバルレベルのみで変数が更新されていることを確認します。[ターミナル 2](ssh://monitor1-ssh#2)の結果を例として使用します。
  
  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 99    |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 7. TiDB クラスタを再起動する

+ 任意のターミナルでTiDBとの接続を終了し、その後、TiDB クラスタを再起動します。
  
  ```bash
  tiup cluster restart tidb-test --yes
  ```
  ```output
  ...
  Restarted cluster `tidb-test` successfully
  ```

### 手順 8. ターミナル1、2、3で、`auto_increment_offset` の値を確認

+ [ターミナル 1](ssh://monitor1-ssh#1)、[ターミナル 2](ssh://monitor1-ssh#2)、[ターミナル 3](ssh://monitor1-ssh#3)に接続し、セッションレベルおよびグローバルレベルの両方で`auto_increment_offset`の値を確認します。変数がセッションとグローバルレベルの両方で更新されていることを確認します。ここでは、[ターミナル 1](ssh://monitor1-ssh#1)を例として使用します。
  
  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 99    |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```
  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 99    |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 9. いずれかのターミナルで、`auto_increment_offset` を`1`に戻して変更します。

  ```sql
  SET GLOBAL auto_increment_offset=1;
  ```
  ```output
  tidb:db1> SET GLOBAL auto_increment_offset=1;
  Query OK, 0 rows affected (0.07 sec)
  ``` 

### まとめ

`SET SESSION` を使用してセッションおよびグローバル変数を変更した場合、その影響範囲は現在のセッションのみになります。

`SET GLOBAL` を使用してセッションおよびグローバル変数を変更した場合、その影響範囲はすべての TiDB サーバーインスタンスおよび新しいセッションになります。

## モジュール 5: TiKV設定ファイルパラメータの変更

### 手順 1. `TiKV サーバー 1` で `tikv.toml` ファイルの内容を表示します

  ```bash
  ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_KV1_PRIVATE_IP} vi /tidb-deploy/tikv-20160/conf/tikv.toml
  ```
  ```output
  # WARNING: This file is auto-generated. Do not edit! All your modification will be overwritten!
  # You can use 'tiup cluster edit-config' and 'tiup cluster reload' to update the configuration
  # All configuration items you want to change can be added to:
  # server_configs:
  #   tikv:
  #     aa.b1.c3: value
  #     aa.b2.c4: value
  ...
  ```                    

### 手順 2. `Control Machine` で `TiKV server` の `log.level` を変更する

+ `Control Machine`上で、エディタを起動する`tiup cluster edit-config`コマンドを使用します。次に、`tikv` セクションに `log.level: warn` を挿入してください。インデントについては下記の `output` を参考にしてください。`ESC`キーを押した後、`:wq`と入力してターミナルに戻ります。
  + 補足: `Control Machine` とは、Web SSH（例: [ターミナル 1](ssh://monitor1-ssh#1) や [ターミナル 2](ssh://monitor1-ssh#2)）がデフォルトで接続する仮想マシンのことです。
  
  ```bash
  tiup cluster edit-config tidb-test
  ```
  ```output
  ...
  server_configs:
  tidb: {}
  tikv:
     log.level: warn
  pd:
     replication.location-labels:
     - region
     - zone
     - storage-performance
     replication.max-replicas: 3
  tidb_dashboard: {}
  tiflash: {}
  tiproxy: {}
  tiflash-learner: {}
  pump: {}
  drainer: {}
  ```

### 手順 3. `TiDB クラスタ`のリロード

+ `Control Machine`で、`tiup cluster reload`コマンドを使用して設定を更新します。この段階では全ての`TiKVサーバー`が再起動されます。

  ```bash
  tiup cluster reload tidb-test
  ```
  ```output
  Will reload the cluster tidb-test with restart policy is true, nodes: , roles: .
  Do you want to continue? [y/N]:(default=N) y
  + [ Serial ] - SSHKeySet: privateKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa, publicKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa.pub
  + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.99
  + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.92
  ...
  Reloaded cluster `tidb-test` successfully
  ```

### 手順 4. `TiKV サーバー 1`で、再度 `tikv.toml` の内容を確認します

+ `TiKV サーバー 1`上で、テキストエディタを使用して`tikv.toml`ファイルの内容を再度確認し、`log.level = "warn"`であることを確認します。エディタを終了するには、`:q!`と入力します。

  ```bash
  ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_KV1_PRIVATE_IP} vi -m /tidb-deploy/tikv-20160/conf/tikv.toml
  ```
  ```output
  # WARNING: This file is auto-generated. Do not edit! All your modification will be overwritten!
  # You can use 'tiup cluster edit-config' and 'tiup cluster reload' to update the configuration
  # All configuration items you want to change can be added to:
  # server_configs:
  #   tikv:
  #     aa.b1.c3: value
  #     aa.b2.c4: value
  [log]
  level = "warn"
  ...
  ```

### 手順 5. `Control Machine` で、`log.level` の値をデフォルトに戻します

+ `Control Machine`で、エディタを起動する`tiup cluster edit-config`コマンドを使用します。`TiKV server`の`log.level`を`warn`からデフォルトに変更します。`ESC`キーを押して、`:wq`と入力してターミナルに戻ります。

  ```bash
  tiup cluster edit-config tidb-test
  ```
  ```output
  ...
  server_configs:
  tidb: {}
  tikv: {}
  pd:
     replication.location-labels:
     - region
     - zone
     - storage-performance
     replication.max-replicas: 3
  tidb_dashboard: {}
  tiflash: {}
  tiproxy: {}
  tiflash-learner: {}
  pump: {}
  drainer: {}
  ```

### 手順 6. TiDB クラスタの再読み込み

  ```bash
  tiup cluster reload tidb-test
  ```
  ```output
  Will reload the cluster tidb-test with restart policy is true, nodes: , roles: .
  Do you want to continue? [y/N]:(default=N) y
  + [ Serial ] - SSHKeySet: privateKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa, publicKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa.pub
  + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.99
  + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.191
  ...
  Reloaded cluster `tidb-test` successfully
  ```

### 手順 7. `TiKV サーバー 1` で、`tikv.toml` の内容を再度確認します

+ `TiKV server 1`で、テキストエディタを使用して`tikv.toml`ファイルの内容を再度確認し、`log.level`がデフォルトに戻っていることを確認します。`:q!`と入力してエディタを終了します。
  
  ```bash
  ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_KV1_PRIVATE_IP} vi -m /tidb-deploy/tikv-20160/conf/tikv.toml
  ```
  ```output
  # WARNING: This file is auto-generated. Do not edit! All your modification will be overwritten!
  # You can use 'tiup cluster edit-config' and 'tiup cluster reload' to update the configuration
  # All configuration items you want to change can be added to:
  # server_configs:
  #   tikv:
  #     aa.b1.c3: value
  #     aa.b2.c4: value
  [server]
  [server.labels]
  region = "seattle"
  storage-performance = "high"
  zone = "az1"
  ...
  ```

## 演習終了