场景
tidb v3.0.7 —> tidb v4.0.4 之间集群同步
将 tidb v3.0.7 的数据同步到 tidb v4.0.4
架构示意
部署
第 1 步:部署 Pump
- 修改 tidb-ansible/inventory.ini 文件
a. 设置 enable_binlog = True ,打开集群 binlog
## binlog triggerenable_binlog = True
b. 为 pump_servers 主机组添加部署机器 IP
## Binlog Part
[pump_servers]
pump1 ansible_host=192.168.251.184 deploy_dir=/data1/pump
pump2 ansible_host=192.168.251.93 deploy_dir=/data2/pump
pump3 ansible_host=192.168.251.79 deploy_dir=/data3/pump
确保部署目录有足够空间存储 binlog.
- 在 tidb 集群上添加 Pump 组件
- 部署 pump_servers 和 node_exporters
ansible-playbook deploy.yml --tags=pump -l ${pump1_ip},${pump2_ip},[${alias1_name},${alias2_name}]注意:逗号后不要加空格
- 部署 pump_servers 和 node_exporters
b. 启动 pump_servers
ansible-playbook start.yml --tags=pump
c. 更新并重启 tidb_servers
ansible-playbook rolling_update.yml --tags=tidb
d. 更新监控信息
ansible-playbook rolling_update_monitor.yml --tags=prometheus
- 检查 Pump 服务状态
使用 binlogctl 查看 Pump 服务状态,pd-urls 参数请替换为集群 PD 地址,结果 State 为 online 表示 Pump 启动成功。
cd /home/tidb/tidb-ansible &&
resources/bin/binlogctl -pd-urls=http://192.168.251.184:2379 -cmd pumps

第 2 步:部署 Drainer**
- 获取 initial_commit_ts 的值
Drainer 初次启动时需要获取 initial_commit_ts 这个时间戳信息。
为了保证数据的完整性,需要进行全量数据的备份与恢复。此时 initial_commit_ts 的值必须是全量备份的时间戳。
mydumper 备份可以在导出目录中找到 metadata 文件,其中的 pos 字段值即全量备份的时间戳。
- 修改 tidb-ansible/inventory.ini 文件
为 drainer_servers 主机组添加部署机器 IP , initial_commit_ts 设置为获取的 initial_commit_ts,仅用于 Drainer 第一次启动。
- 修改配置文件
```shell [syncer]cd /home/tidb/tidb-ansible/conf && cp drainer.toml drainer_mysql_drainer.toml && vi drainer_mysql_drainer.tomldownstream storage, equal to —dest-db-type
Valid values are “mysql”, “file”, “tidb”, “kafka”.
db-type = “tidb”
the downstream MySQL protocol database
[syncer.to] host = “192.168.20.200” user = “root” password = “” port = 4000
部署 Drainer
```shell
ansible-playbook deploy_drainer.yml
启动 Drainer
ansible-playbook start_drainer.yml
验证同步
当前架构:
我们在 192.168.251.184 上创建测试数据
在192.168.20.200 上查看
