## モジュール 2: 二つの MySQL インスタンスからのデータ移行 (スキーマ準備)

### 手順 1. PD1 でのソース MySQL インスタンスのセットアップ

+ PD1にユーザーec2-userとしてログインしてください。表示されるメッセージはここに示されているものとは少し異なる場合があります。プロンプトが表示されたら、`yes`と答えてください。

  ```bash
  ./ssh-to-pd1.sh
  ```

+ `PD1`でMySQLインスタンスを開始します。

  ```bash
  sudo service mysqld start
  ```

  ```output
  Redirecting to /bin/systemctl start mysqld.service
  ```

+ ユーザー `root@'localhost'` で `PD1` のMySQLサーバーに接続します。

  ```bash
  mysql -h localhost -P 3306 -uroot -pq1w2e3R4_
  ```

  ```output
  Enter password:
  ...
  Server version: 5.7.41-log
  ...
  mysql>
  ```

+ 新しいユーザー `dm_user@'%'` を作成し、そのユーザーに権限を付与します:

  ```sql
  CREATE USER dm_user@'%' identified by 'q1w2e3R4_';
  ```

  ```output
  mysql> CREATE USER dm_user@'%' identified by 'q1w2e3R4_';
  Query OK, 0 rows affected (0.00 sec)
  ```

  ```sql
  GRANT ALL PRIVILEGES ON *.* TO dm_user@'%';
  ```

  ```output
  mysql> GRANT ALL PRIVILEGES ON *.* TO dm_user@'%';
  Query OK, 0 rows affected (0.00 sec)
  ```

+ `show_compatibility_56` をオンにしてください。

  ```sql
  SET @@global.show_compatibility_56=ON;
  ```

  ```output
  mysql> SET @@global.show_compatibility_56=ON;
  Query OK, 0 rows affected (0.00 sec)
  ```

+ ターミナルに戻り、コントロールマシン(monitor1_address)に戻ります:

  ```sql
  EXIT
  ```

  ```output
  mysql> EXIT
  Bye
  ```

  ```bash
  exit
  ```

  ```output
  logout
  Connection to XX.XX.XX.XX closed.
  ```

### 手順 2. PD2 でのソース MySQL インスタンスのセットアップ

+ PD2にユーザーec2-userとしてログインしてください。表示されるメッセージはここに示されているものとは少し異なる場合があります。

  ```bash
  ./ssh-to-pd2.sh
  ```

+ `PD2`でMySQLインスタンスを開始します。

  ```bash
  sudo service mysqld start
  ```

  ```output
  Redirecting to /bin/systemctl start mysqld.service
  ```

+ ユーザー `root@'localhost'` で `PD2` のMySQLサーバーに接続します。

  ```bash
  mysql -h localhost -P 3306 -uroot -pq1w2e3R4_
  ```

  ```output
  Enter password:
  ...
  Server version: 5.7.41-log
  ...
  mysql>
  ```

+ 新しいユーザー `dm_user@'%'` を作成し、そのユーザーに権限を付与します。

  ```sql
  CREATE USER dm_user@'%' identified by 'q1w2e3R4_';
  ```

  ```output
  mysql> CREATE USER dm_user@'%' identified by 'q1w2e3R4_';
  Query OK, 0 rows affected (0.00 sec)
  ```

  ```sql
  GRANT ALL PRIVILEGES ON *.* TO dm_user@'%';
  ```

  ```output
  mysql> GRANT ALL PRIVILEGES ON *.* TO dm_user@'%';
  Query OK, 0 rows affected (0.00 sec)
  ```

+ `show_compatibility_56` をオンにしてください。

  ```sql
  SET @@global.show_compatibility_56=ON;
  ```

  ```output
  mysql> SET @@global.show_compatibility_56=ON;
  Query OK, 0 rows affected (0.00 sec)
  ```

+ ターミナルに戻り、コントロールマシンに戻ります。

  ```sql
  EXIT
  ```

  ```output
  mysql> EXIT
  Bye
  ```

  ```bash
  exit
  ```

  ```output
  logout
  Connection to XX.XX.XX.XX closed.
  ```

### 手順 3. 二つの MySQL インスタンスにデータをインポートする

+ サンプルが解凍されていることを確認してください。

  ```bash
  unzip -u stage/tidb-admin-dataset-v2.zip -d stage/
  ```

+ `PD1`のMySQLに`user`、`store`、`log`、および`salesdb`データベースをインポートします。

  ```bash
  mysql -udm_user -pq1w2e3R4_ -h ${HOST_PD1_PRIVATE_IP} -P3306 < stage/TiDB-Administration-exercise-data-v2/exercise-dm/3306db.sql
  ```

+ `PD2`のMySQLに`user`、`store`、`log`、および`salesdb`データベースをインポートします。

  ```bash
  mysql -udm_user -pq1w2e3R4_ -h ${HOST_PD2_PRIVATE_IP} -P3306 < stage/TiDB-Administration-exercise-data-v2/exercise-dm/3307db.sql
  ```

### 手順 4. ターゲット TiDB クラスタースキーマの設定

+ TiDBに接続します：

  ```bash
  mysql -h ${HOST_DB1_PRIVATE_IP} -P 4000 -uroot
  ```

  ```output
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 405
  Server version: 5.7.25-TiDB-v7.5.1 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible
  ...
  mysql>
  ```

+ `dm_user`という新しいユーザーを作成し、そのユーザーに権限を付与します。

  ```sql
  CREATE USER dm_user@'%' identified by 'q1w2e3R4_';
  ```

  ```output
  mysql> CREATE USER dm_user@'%' identified by 'q1w2e3R4_';
  Query OK, 0 rows affected (0.04 sec)
  ```

  ```sql
  GRANT ALL PRIVILEGES ON *.* TO dm_user@'%';
  ```

  ```output
  mysql> GRANT ALL PRIVILEGES ON *.* TO dm_user@'%';
  Query OK, 0 rows affected (0.02 sec)
  ```

+ TiDBに`user_north`というデータベースを作成し、`information`と`trace`というテーブルを作成します。`information`テーブルには`id`と呼ばれるプライマリキーの列と`VARCHAR(64)`型の`info`列が必要です。`trace`テーブルには`id`と呼ばれるプライマリキーの列と`VARCHAR(64)`型の`content`列が必要です。

  ```sql
  CREATE DATABASE user_north;
  CREATE TABLE user_north.information(id INT PRIMARY KEY, info VARCHAR(64));
  CREATE TABLE user_north.trace(id INT PRIMARY KEY, content VARCHAR(64));
  ```

  ```output
  mysql> CREATE DATABASE user_north;
  Query OK, 0 rows affected (0.08 sec)
  ...
  mysql> CREATE TABLE user_north.trace(id INT PRIMARY KEY, content VARCHAR(64));
  Query OK, 0 rows affected (0.09 sec)
  ```

+ TiDBに`user_east`というデータベースを作成し、`information`と`trace`というテーブルを作成します。`information`テーブルには`id`と呼ばれるプライマリキーの列と`VARCHAR(64)`型の`info`列が必要です。`trace`テーブルには`id`と呼ばれるプライマリキーの列と`VARCHAR(64)`型の`content`列が必要です。

  ```sql
  CREATE DATABASE user_east;
  CREATE TABLE user_east.information(id INT PRIMARY KEY, info VARCHAR(64));
  CREATE TABLE user_east.trace(id INT PRIMARY KEY, content VARCHAR(64));
  ```

  ```output
  mysql> CREATE DATABASE user_east;
  Query OK, 0 rows affected (0.08 sec)
  ...
  mysql> CREATE TABLE user_east.trace(id INT PRIMARY KEY, content VARCHAR(64));
  Query OK, 0 rows affected (0.09 sec)

+ TiDBに`store`というデータベースを作成し、`store_bj`、`store_tj`、`store_sh`、および`store_suzhou`というテーブルを作成します。`store_bj`テーブルには`id`と呼ばれるプライマリキーの列と`VARCHAR(64)`型の`pname`列が必要です。以下同様にします。

  ```sql
  CREATE DATABASE store;
  CREATE TABLE store.store_bj(id INT PRIMARY KEY, pname VARCHAR(64));
  CREATE TABLE store.store_tj(id INT PRIMARY KEY, pname VARCHAR(64));
  CREATE TABLE store.store_sh(id INT PRIMARY KEY, pname VARCHAR(64));
  CREATE TABLE store.store_suzhou(id INT PRIMARY KEY, pname VARCHAR(64));
  ```

  ```output
  mysql> CREATE DATABASE store;
  Query OK, 0 rows affected (0.09 sec)
  ...
  mysql> CREATE TABLE store.store_suzhou(id INT PRIMARY KEY, pname VARCHAR(64));
  Query OK, 0 rows affected (0.09 sec)
  ```

+ TiDBに`salesdb`というデータベースを作成し、`sales` というテーブルを作成します。`sales`テーブルには`id`と呼ばれるプライマリキーの列、`VARCHAR(20)`型の`pname`列、および`int`型の`cnt`列が必要です。

   ```sql
   CREATE DATABASE salesdb;
   CREATE TABLE salesdb.sales(id INT PRIMARY KEY, pname VARCHAR(20), cnt int);
   ```

   ```output
   mysql> CREATE DATABASE salesdb;
   Query OK, 0 rows affected (0.09 sec)
   mysql> CREATE TABLE sales.sales(id INT PRIMARY KEY, pname VARCHAR(20), cnt int);
   Query OK, 0 rows affected (0.09 sec)
   ```

+ TiDBに`log`というデータベースを作成し、`messages`というテーブルを作成します。`messages`テーブルには`id`と呼ばれるプライマリキーの列、および`VARCHAR(64)`型の`msg`列があります。それからセッションを終了します。

   ```bash
   CREATE DATABASE log;
   CREATE TABLE log.messages(id INT PRIMARY KEY, msg VARCHAR(64));
   ```

   ```output
   mysql> CREATE DATABASE log;
   Query OK, 0 rows affected (0.08 sec)
   mysql> CREATE TABLE log.messages(id INT PRIMARY KEY, msg VARCHAR(64));
   Query OK, 0 rows affected (0.08 sec)
   ```

   ```sql
   EXIT
   ```

   ```output
   mysql> EXIT
   Bye
   ```
