## モジュール 3: DDLタスクを自動的に一時停止します

バージョンのアップグレード中やデータベースのシャットダウンと起動中などの特定の状況では、DDL タスクは自動的に一時停止および再開されることがあります。

### 手順 1. TiUP コントロールマシンに2つのターミナルで接続します

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

+ これで2つのアクティブなターミナルセッションが開かれます。

### 手順 2. テーブルにインデックスを追加し、列の属性を変更します

> [!TIP]
> 注意してください。`モジュール 3`の各コマンドの時間間隔は1分を超えないようにお願いします。そうしないと、期待される結果が得られない可能性があります。

+ [ターミナル 1](ssh://monitor1-ssh#1) で、TiDBサーバーインスタンスに接続します。

  ```bash
  mysql -h ${HOST_TIPROXY1_PRIVATE_IP} --port 6000 -u root
  ```

  ```output
  mysql> 
  ```

+ [ターミナル 1](ssh://monitor1-ssh#1) で、テーブル `test.ddl_test2` にインデックスを追加し、`content` 列の属性を変更します。注意: コマンドが完了するまで待たないでください。

  ```sql
  ALTER TABLE test.ddl_test2 DROP INDEX idx_content_updated_at;
  ```

  ```output
  Query OK, 0 rows affected (0.16 sec)
  ```

  ```sql
  ALTER TABLE test.ddl_test2 ADD INDEX idx_content_updated_at(content, updated_at);ALTER TABLE test.ddl_test2 MODIFY `content` VARCHAR(32) DEFAULT '0000000000' COMMENT 'content';
  ```

+ [ターミナル 2](ssh://monitor1-ssh#2) で、TiDBサーバーインスタンスに接続します。

  ```bash
  mysql -h ${HOST_TIPROXY1_PRIVATE_IP} --port 6000 -u root
  ```

  ```output
  mysql> 
  ```

+ [ターミナル 2](ssh://monitor1-ssh#2) で、コマンド `ADMIN SHOW DDL JOBS` を使用して、実行されたDDLタスクの `JOB_ID` を見つけます。例では `JOB_ID` は `180`、`STATE` は `running` となり、該当するDDLタスクが実行中であることを示しています。なお、出力は例と異なる場合がありますので注意してください。

  ```sql
  ADMIN SHOW DDL JOBS;
  EXIT;
  ```

  ```output
  +--------+---------+------------+---------------+----------------------+-----------+----------+-----------+----------------------------+----------------------------+----------------------------+---------------+-------------+
  | JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE      | SCHEMA_STATE         | SCHEMA_ID | TABLE_ID | ROW_COUNT | CREATE_TIME                | START_TIME                 | END_TIME                   | STATE         | COMMENTS    |
  +--------+---------+------------+---------------+----------------------+-----------+----------+-----------+----------------------------+----------------------------+----------------------------+---------------+-------------+
  |    180 | test    | ddl_test2  | modify column | write reorganization |         2 |      112 |         0 | 2025-07-27 06:34:35.931000 | 2025-07-27 06:34:35.931000 | NULL                       | running       |             |
  |    179 | test    | ddl_test2  | add index     | public               |         2 |      112 |   4194304 | 2025-07-27 06:34:26.931000 | 2025-07-27 06:34:26.981000 | 2025-07-27 06:34:35.880000 | synced        | ingest, DXF |
  |    178 | test    | ddl_test2  | drop index    | none                 |         2 |      112 |         0 | 2025-07-27 06:32:36.731000 | 2025-07-27 06:32:36.781000 | 2025-07-27 06:32:36.881000 | synced        |             |
  |    177 | test    | ddl_test4  | modify column | public               |         2 |      116 |   7250922 | 2025-07-27 06:16:59.731000 | 2025-07-27 06:16:59.731000 | 2025-07-27 06:20:49.080000 | synced        |             |
  |    176 | test    | ddl_test4  | add index     | public               |         2 |      116 |   4194304 | 2025-07-27 06:08:28.731000 | 2025-07-27 06:10:53.130000 | 2025-07-27 06:16:59.731000 | synced        | ingest, DXF |
  |    175 | test    | ddl_test3  | modify column | public               |         2 |      114 |   4194304 | 2025-07-27 06:08:20.181000 | 2025-07-27 06:08:20.231000 | 2025-07-27 06:15:07.480000 | synced        |             |
  |    174 | test    | ddl_test3  | add index     | public               |         2 |      114 |   4194304 | 2025-07-27 06:08:03.880000 | 2025-07-27 06:08:03.931000 | 2025-07-27 06:08:20.130000 | synced        | ingest, DXF |
  |    173 | test    | ddl_test2  | modify column | none                 |         2 |      112 |         0 | 2025-07-27 05:58:49.530000 | 2025-07-27 05:58:49.530000 | 2025-07-27 06:02:37.780000 | rollback done |             |
  |    172 | test    | ddl_test2  | add index     | public               |         2 |      112 |   4194304 | 2025-07-27 05:58:39.031000 | 2025-07-27 05:58:39.081000 | 2025-07-27 05:58:49.480000 | synced        | ingest, DXF |
  |    171 | test    | ddl_test1  | modify column | public               |         2 |      110 |   4194304 | 2025-07-27 05:49:49.981000 | 2025-07-27 05:49:50.031000 | 2025-07-27 05:54:29.281000 | synced        |             |
  |    170 | test    | ddl_test1  | add index     | public               |         2 |      110 |   4194304 | 2025-07-27 05:49:37.981000 | 2025-07-27 05:49:37.981000 | 2025-07-27 05:49:47.830000 | synced        | ingest, DXF |
  +--------+---------+------------+---------------+----------------------+-----------+----------+-----------+----------------------------+----------------------------+----------------------------+---------------+-------------+
  11 rows in set (0.01 sec)
  ```

### 手順 3. TiDBデータベースを起動および停止します

+ [ターミナル 2](ssh://monitor1-ssh#2) で、TiDBデータベースを停止します。

  ```bash
  export PATH="$PATH:/home/ec2-user/.tiup/bin"
  tiup cluster stop tidb-demo
  ```

  ```output
  Will stop the cluster tidb-demo with nodes: , roles: .
  Do you want to continue? [y/N]:(default=N) y
  + [ Serial ] - SSHKeySet: privateKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-demo/ssh/id_rsa, publicKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-demo/ssh/id_rsa.pub
  + [Parallel] - UserSSH: user=ec2-user, host=10.90.1.181
  + [Parallel] - UserSSH: user=ec2-user, host=10.90.1.46
  ...
          Stop 10.90.2.169 success
          Stop 10.90.4.234 success
  Stopped cluster `tidb-demo` successfully
  ```

+ [ターミナル 1](ssh://monitor1-ssh#1) で、クライアントのデータベースへの接続が中断されたことがわかりますが、DDL タスクが完了したかどうかは不明です。

  ```output
  Query OK, 0 rows affected (8.96 sec)

  ERROR 2013 (HY000): Lost connection to MySQL server during query
  ```

+ [ターミナル 2](ssh://monitor1-ssh#2) で、TiDBデータベースを起動します。

  ```bash
  export PATH="$PATH:/home/ec2-user/.tiup/bin"
  tiup cluster start tidb-demo
  ```

  ```output
  Starting cluster tidb-demo...
  + [ Serial ] - SSHKeySet: privateKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-demo/ssh/id_rsa, publicKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-demo/ssh/id_rsa.pub
  + [Parallel] - UserSSH: user=ec2-user, host=10.90.1.181
  + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.169
  ...
          Start 10.90.2.119 success
          Start 10.90.4.234 success
  + [ Serial ] - UpdateTopology: cluster=tidb-demo
  Started cluster `tidb-demo` successfully
  ```

### 手順 4. DDLタスクを照会します

+ [ターミナル 2](ssh://monitor1-ssh#2) で、TiDBサーバーインスタンスに接続します。

  ```bash
  mysql -h ${HOST_TIPROXY1_PRIVATE_IP} --port 6000 -u root
  ```

  ```output
  mysql> 
  ```

+ コマンド `ADMIN SHOW DDL JOBS` を使用して、データベースの再起動前に実行されたDDLタスクの `JOB_ID` を見つけます。例では `JOB_ID` は `180`、`STATE` は `running` となり、該当するDDLタスクが実行中であることを示しています。なお、出力は例と異なる場合がありますので注意してください。

  ```sql
  ADMIN SHOW DDL JOBS;
  ```

  ```output
  +--------+---------+------------+---------------+----------------------+-----------+----------+-----------+----------------------------+----------------------------+----------------------------+---------------+-------------+
  | JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE      | SCHEMA_STATE         | SCHEMA_ID | TABLE_ID | ROW_COUNT | CREATE_TIME                | START_TIME                 | END_TIME                   | STATE         | COMMENTS    |
  +--------+---------+------------+---------------+----------------------+-----------+----------+-----------+----------------------------+----------------------------+----------------------------+---------------+-------------+
  |    180 | test    | ddl_test2  | modify column | write reorganization |         2 |      112 |         0 | 2025-07-27 06:34:35.931000 | 2025-07-27 06:34:35.931000 | NULL                       | running       |             |
  |    179 | test    | ddl_test2  | add index     | public               |         2 |      112 |   4194304 | 2025-07-27 06:34:26.931000 | 2025-07-27 06:34:26.981000 | 2025-07-27 06:34:35.880000 | synced        | ingest, DXF |
  |    178 | test    | ddl_test2  | drop index    | none                 |         2 |      112 |         0 | 2025-07-27 06:32:36.731000 | 2025-07-27 06:32:36.781000 | 2025-07-27 06:32:36.881000 | synced        |             |
  |    177 | test    | ddl_test4  | modify column | public               |         2 |      116 |   7250922 | 2025-07-27 06:16:59.731000 | 2025-07-27 06:16:59.731000 | 2025-07-27 06:20:49.080000 | synced        |             |
  |    176 | test    | ddl_test4  | add index     | public               |         2 |      116 |   4194304 | 2025-07-27 06:08:28.731000 | 2025-07-27 06:10:53.130000 | 2025-07-27 06:16:59.731000 | synced        | ingest, DXF |
  |    175 | test    | ddl_test3  | modify column | public               |         2 |      114 |   4194304 | 2025-07-27 06:08:20.181000 | 2025-07-27 06:08:20.231000 | 2025-07-27 06:15:07.480000 | synced        |             |
  |    174 | test    | ddl_test3  | add index     | public               |         2 |      114 |   4194304 | 2025-07-27 06:08:03.880000 | 2025-07-27 06:08:03.931000 | 2025-07-27 06:08:20.130000 | synced        | ingest, DXF |
  |    173 | test    | ddl_test2  | modify column | none                 |         2 |      112 |         0 | 2025-07-27 05:58:49.530000 | 2025-07-27 05:58:49.530000 | 2025-07-27 06:02:37.780000 | rollback done |             |
  |    172 | test    | ddl_test2  | add index     | public               |         2 |      112 |   4194304 | 2025-07-27 05:58:39.031000 | 2025-07-27 05:58:39.081000 | 2025-07-27 05:58:49.480000 | synced        | ingest, DXF |
  |    171 | test    | ddl_test1  | modify column | public               |         2 |      110 |   4194304 | 2025-07-27 05:49:49.981000 | 2025-07-27 05:49:50.031000 | 2025-07-27 05:54:29.281000 | synced        |             |
  |    170 | test    | ddl_test1  | add index     | public               |         2 |      110 |   4194304 | 2025-07-27 05:49:37.981000 | 2025-07-27 05:49:37.981000 | 2025-07-27 05:49:47.830000 | synced        | ingest, DXF |
  +--------+---------+------------+---------------+----------------------+-----------+----------+-----------+----------------------------+----------------------------+----------------------------+---------------+-------------+
  11 rows in set (0.02 sec)
  ```

+ コマンド `ADMIN SHOW DDL JOBS` を何度か実行します。例において `JOB_ID` が `180` のDDLタスクの `STATE` が `synced` に変わるまで実行を続けてください。既にDDLタスクの実行が完了していることを示しています。なお、出力は例と異なる場合がありますので注意してください。

  ```sql
  ADMIN SHOW DDL JOBS;
  ```

  ```output
  +--------+---------+------------+---------------+--------------+-----------+----------+-----------+----------------------------+----------------------------+----------------------------+---------------+-------------+
  | JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE      | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT | CREATE_TIME                | START_TIME                 | END_TIME                   | STATE         | COMMENTS    |
  +--------+---------+------------+---------------+--------------+-----------+----------+-----------+----------------------------+----------------------------+----------------------------+---------------+-------------+
  |    180 | test    | ddl_test2  | modify column | public       |         2 |      112 |   4194304 | 2025-07-27 06:34:35.931000 | 2025-07-27 06:34:35.931000 | 2025-07-27 06:47:39.090000 | synced        |             |
  |    179 | test    | ddl_test2  | add index     | public       |         2 |      112 |   4194304 | 2025-07-27 06:34:26.931000 | 2025-07-27 06:34:26.981000 | 2025-07-27 06:34:35.880000 | synced        | ingest, DXF |
  |    178 | test    | ddl_test2  | drop index    | none         |         2 |      112 |         0 | 2025-07-27 06:32:36.731000 | 2025-07-27 06:32:36.781000 | 2025-07-27 06:32:36.881000 | synced        |             |
  |    177 | test    | ddl_test4  | modify column | public       |         2 |      116 |   7250922 | 2025-07-27 06:16:59.731000 | 2025-07-27 06:16:59.731000 | 2025-07-27 06:20:49.080000 | synced        |             |
  |    176 | test    | ddl_test4  | add index     | public       |         2 |      116 |   4194304 | 2025-07-27 06:08:28.731000 | 2025-07-27 06:10:53.130000 | 2025-07-27 06:16:59.731000 | synced        | ingest, DXF |
  |    175 | test    | ddl_test3  | modify column | public       |         2 |      114 |   4194304 | 2025-07-27 06:08:20.181000 | 2025-07-27 06:08:20.231000 | 2025-07-27 06:15:07.480000 | synced        |             |
  |    174 | test    | ddl_test3  | add index     | public       |         2 |      114 |   4194304 | 2025-07-27 06:08:03.880000 | 2025-07-27 06:08:03.931000 | 2025-07-27 06:08:20.130000 | synced        | ingest, DXF |
  |    173 | test    | ddl_test2  | modify column | none         |         2 |      112 |         0 | 2025-07-27 05:58:49.530000 | 2025-07-27 05:58:49.530000 | 2025-07-27 06:02:37.780000 | rollback done |             |
  |    172 | test    | ddl_test2  | add index     | public       |         2 |      112 |   4194304 | 2025-07-27 05:58:39.031000 | 2025-07-27 05:58:39.081000 | 2025-07-27 05:58:49.480000 | synced        | ingest, DXF |
  |    171 | test    | ddl_test1  | modify column | public       |         2 |      110 |   4194304 | 2025-07-27 05:49:49.981000 | 2025-07-27 05:49:50.031000 | 2025-07-27 05:54:29.281000 | synced        |             |
  +--------+---------+------------+---------------+--------------+-----------+----------+-----------+----------------------------+----------------------------+----------------------------+---------------+-------------+
  10 rows in set (0.01 sec)
  ```

+ [ターミナル 1](ssh://monitor1-ssh#1) で、`test.ddl_test2` のテーブル定義を確認したところ、`test.ddl_test2` にインデックスを追加し、`content` 列の属性を変更する操作がすべて成功したことがわかりました。

  ```sql
  SHOW CREATE TABLE test.ddl_test2;
  ```

  ```output
  *************************** 1. row ***************************
        Table: ddl_test2
  Create Table: CREATE TABLE `ddl_test2` (
    `id` bigint DEFAULT NULL,
    `content` varchar(32) DEFAULT '0000000000' COMMENT 'content',
    `created_at` datetime DEFAULT NULL,
    `updated_at` datetime DEFAULT NULL,
    `version` int DEFAULT NULL,
    KEY `idx_content_updated_at` (`content`,`updated_at`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
  1 row in set (0.01 sec)

  ERROR: 
  No query specified
  ```

+ 本モジュールはここで終了します。
