# **练习-3 : 管理 `TiDB Binlog` 复制**

## 概述
+ 在本练习中，将使用 binlogctl 工具来管理 TiDB Binlog 的复制｡

## 实验环境要求
+ 1. 注意，您的实验环境（包括IP，端口号，用户名，密码和目录）可能和手册不同。
+ 2. 可以连接到实验用虚拟机。
+ 3. TiDB 数据库提前部署完毕。
+ 4. 清理掉之前的实验数据。
+ 5. 需要完成练习-2。

## 步骤

-----------------------------------------------
#### 1. binlogctl 工具集成在 tidb-toolkit 中，先进行下载安装:
+ **请从网址：https://pingcap.com/zh/product-community/ 中下载最新的 TiDB-community-toolkit 软件包，并上传到练习环境中。**  

+ **解压下载的软件包**
    ```
     # tar xvf tidb-community-toolkit-v6.1.0-linux-amd64.tar
    ```

+ **确认安装完毕:**
     ```
     # ls binlogctl
    ``` 
    ```
     binlogctl
    ``` 

+ **也可以将目录加入环境变量，方便后续执行:** 
    ```
     # cd
     # vi .bash_profile
    ``` 
    ```
     PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/root/tidb-community-toolkit-v6.1.0
    ``` 
-----------------------------------------------
#### 2. 使用 binlogctl 查看 pump 节点和 drainer 节点当前的状态。
+ **查看 pump 节点的状态，如下:**
    ```
    # binlogctl -pd-urls=http://172.31.0.232:2379 -cmd pumps
    ```
    ```
    [2022/06/26 10:20:08.311 +08:00] [INFO] [nodes.go:53] ["query node"] [type=pump] [node="{NodeID: 172.31.0.232:8250, Addr: 172.31.0.232:8250, State: online, MaxCommitTS: 434165515531321346, UpdateTime: 2022-06-26 10:20:06 +0800 CST}"]
    ```

+ **查看 drainer 节点的状态，如下:**
    ```
     # binlogctl -pd-urls=http://172.31.0.232:2379 -cmd drainers
    ```
    ```
     [2022/06/26 10:20:31.473 +08:00] [INFO] [nodes.go:53] ["query node"] [type=drainer] [node="{NodeID: 172.31.0.135:8249, Addr: 172.31.0.135:8249, State: online, MaxCommitTS: 434165521036345346, UpdateTime: 2022-06-26 10:20:30 +0800 CST}"]
    ```
    
-----------------------------------------------
#### 3. 暂停 drainer 节点。
+ **首先，暂停 drainer 节点，如下:**
    ```
     # binlogctl -pd-urls=http://172.31.0.232:2379 -cmd pause-drainer -node-id 172.31.0.135:8249  
    ```
    ```
     [2022/06/26 10:24:46.178 +08:00] [INFO] [nodes.go:123] ["Apply action on node success"] [action=pause] [NodeID=172.31.0.135:8249]
    ```

+ **其次，确认暂停的 drainer 节点状态，如下:**
    ```
     # binlogctl -pd-urls=http://172.31.0.232:2379 -cmd drainers
    ```
    ```
     [2022/06/26 10:24:56.047 +08:00] [INFO] [nodes.go:53] ["query node"] [type=drainer] [node="{NodeID: 172.31.0.135:8249, Addr: 172.31.0.135:8249, State: paused, MaxCommitTS: 434165587987922945, UpdateTime: 2022-06-26 10:24:45 +0800 CST}"]
    ```

-----------------------------------------------
#### 4.  确认复制是否还可以继续｡
+ **登录到 TiDB 数据库，向 test 库的表 test.T 中插入一行数据，如下:**
    ```
    # mysql -h172.31.0.135 -P4000 -uroot -ptidb
    ```
    ```sql
    mysql> select * from test.T;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | Tom   |
    |  2 | Jack  |
    |  3 | Frank |
    |  4 | Tony  |
    +----+-------+
    4 rows in set (0.00 sec)

    mysql> insert into test.T values(5, 'Candy');
    Query OK, 1 row affected (0.01 sec)

    mysql> select * from test.T;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | Tom   |
    |  2 | Jack  |
    |  3 | Frank |
    |  4 | Tony  |
    |  5 | Candy |
    +----+-------+
    5 rows in set (0.00 sec)
    ```
 + **登录到 MySQL 数据库，查询 test 库的表 T，如下:**   
    ```
    # mysql -h172.31.0.135 -P3306 -uroot -pmysql
    ```
    ```sql
    mysql> select * from test.T;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | Tom   |
    |  2 | Jack  |
    |  3 | Frank |
    |  4 | Tony  |
    +----+-------+
    4 rows in set (0.00 sec)
    ```

 + **从结果上看，drainer 节点停止后，复制已经停止了｡**  
-----------------------------------------------