写点什么

TiDB 数据迁移实践 DM 工具

  • 2023-06-02
    北京
  • 本文字数:3653 字

    阅读完需:约 12 分钟

作者: gykj-sunzl 原文来源:https://tidb.net/blog/75936cd7

1.TiDB 集群

1.1 拓扑结构

3 副本集群



1.2 相关链接

Dashboard:


  http://73.134.46.237:2379/dashboard


Grafana:


  http://73.134.47.53:3000


TiDB 集群数据源:


 HAProxy  73.134.47.53:3390   推荐


 Nginx     73.134.47.53:4000

2.接入指引

2.1 方案比对

小数据量迁移


    通常数据量较低时,使用 DM 进行迁移较为简单,可直接完成全量 + 持续增量迁移工作。


 大数据量迁移


    当数据量较大时,DM 较低的数据导入速度 (30~50 GiB/h) 可能令整个迁移周期过长。本文所称“大数据量”通常指 TiB 级别以上。使用 Dumpling 和 TiDB Lightning 进行全量数据迁移,其本地导入 (local backend) 模式导入速度可达每小时 500 GiB。完成全量数据迁移后,再使用 DM 完成增量数据迁移。



2.2 方案一 Data Migration 集群(推荐)

2.3 方案二 Dumpling 和 TiDB Lightning

 

3.Data Migration 集群

3.1DM 集群拓扑结构

 


3.2 相关链接:

Dashboard:


  http://73.134.47.190:8261/dashboard


Grafana:


  http://73.134.47.190:3000/

3.3 离线部署 DM 集群

a. 制作离线镜像

在外网连通的服务器上使用 TiUP 工具制作离线镜像


tiup mirror clone tidb-dm-v6.5.0-linux-amd64 –os=linux –arch=amd64 \


    –dm-master=v6.5.0 –dm-worker=v6.5.0 –dmctl=v6.5.0 \


    –alertmanager=v0.17.0 –grafana=v4.0.3 –prometheus=v4.0.3 \


    –tiup=v(tiup –version|grep ‘tiup’|awk -F ‘ ’ ‘{print 1}’) –dm=v(tiup –version|grep ‘tiup’|awk -F ‘ ’ ‘{print 1}’)


b. 设置镜像和环境变量

sh tidb-dm-v6.5.0-linux-amd64/local_install.sh


source /home/tidb/.bash_profile



c. 初始化配置文件

tiup dm template > /data/tidb/topology.yaml



编辑配置文件,其中 73.134.47.190 部署 dm-master、dm-worker


                 


d. 执行部署

tiup dm deploy dm-test v6.5.0 /data/tidb/topology.yaml –user tidb -p




e. 验证

tiup dm list


tiup dm display dm-gykj



启动集群


tiup dm start dm-gykj


tiup dm display dm-gykj



3.4 数据迁移

a. 加密数据源密码

tiup dmctl -encrypt ‘Root#123’



b. 数据源配置

命名规则 mysql-source-${项目简称}.yaml  示例:mysql-source-xahr.yaml


注:在全量数据迁移和增量数据迁移模式下,启动迁移任务时会进行前置检查(上游数据库权限检查、外键、主键或唯一键等等),因此需提供 root 用户



b. 加载数据源配置文件


tiup dmctl –master-addr=73.134.47.190:8261 operate-source create mysql-source-xahr.yaml



查看数据源状态


tiup dmctl –master-addr=73.134.47.190:8261 config source xahr-test



查看数据源和 dm-worker 的绑定关系


tiup dmctl –master-addr=73.134.47.190:8261 operate-source show xahr-test




c. 编辑迁移任务配置文件

命名规则 task-${项目简称}.yaml  示例:task-xahr.yaml



d. 迁移任务前置检查

检查项:上游字符集、版本、外键、主键或唯一键


        dump 权限


        REPLICATION 权限、MySQL binlog 配置等


tiup dmctl –master-addr=73.134.47.190:8261 check-task task-xahr.yaml



e. 启动迁移任务

 

tiup dmctl –master-addr=73.134.47.190:8261 start-task ./task-xahr.yaml



f. 验证任务状态

 

tiup dmctl –master-addr=73.134.47.190:8261 query-status ./task-xahr.yaml



g. 验证全量迁移 + 增量同步

 

查询 tidb,xahr 数据库和对应表数据已同步



增量同步验证


源库创建一个表插入 2 条数据



Tidb 集群 xahr 库已同步



h. 全量数据迁移校验

 

i. 增量数据同步校验

tiup dmctl –master-addr=73.134.47.190:8261 validation start –start-time 2023-01-29T15:00:00 –mode full task-xahr


mode:  full 行数据进行每列的比对


       fast 判断行在下游数据库是否存在


       null 不开启



3.5 运维管理操作

3.5.1 数据源

 


3.5.2 迁移任务


3.5.3 迁移增量校验


3.5.4 集群运维

3.5.4.1WebUI


通过 DM WebUI 页面管理迁移任务


前提条件开启 OpenAPI


方法一:


拓扑文件中添加如下配置



方法二:


修改集群配置文件


   tiup dm edit-config dm-gykj


重新加载集群


   tiup dm reload dm-gykj -R dm-master


WebUI 地址:


http://73.134.47.190:8261/dashboard



3.5.4.2 dmctl


tiup dmctl 用来运维 DM 集群的命令行工具,交互和命令模式



3.5.4.3 日常巡检


方法一:dmctl 工具查看任务运行状态及错误输出


tiup dmctl –master-addr=73.134.47.190:8261 query-status



方法二:Prometheus 和 Grafana


通过 Prometheus 和 Grafana 查看 DM 相关监控项


方法三:dm-master 和 dm-worker 日志文件


通过 dm-master 和 dm-worker 日志文件查看 DM 运行状态和相关错误


dm-master



dm-worker



3.5.4.4 集群操作



4.Dumpling 和 TiDB Lightning

4.1Dumpling 全量导出

4.1.1 安装

在线安装


tiup install dumpling


在线使用


tiup dumpling …


离线安装


tar -zxvf dumpling-v6.5.0-linux-amd64.tar.gz


4.1.2 使用

./dumpling -uroot -pxxxxx -h 73.134.35.132 -P3306 –filetype sql -t 8 -o /data/ywgl/exportfile/xahr  -B xahr


-t 指定导出的线程数,提高导出速度,不超过 64


-F 指定单个文件的最大大小,单位 MiB


--compress 压缩导出数据


整库导出


./dumpling -uroot -pxxxxx -h 73.134.35.132 -P3306 –filetype sql -t 8 -o /data/ywgl/exportfile/xahr  -B xahr


表导出


./dumpling -uroot -pxxxxx -h 73.134.35.132 -P3306 –filetype sql -t 8 -o /data/ywgl/exportfile/xahr  -T xahr.dict,xahr.dict_type,xahr.sdic_activity_info


筛选数据导出


./dumpling -uroot -pxxxxx -h 73.134.35.132 -P3306 –filetype sql -t 8 -o /data/ywgl/exportfile/xahr  -T xahr.sdic_activity_info –where “id<=7”


参考脚本


dumpling.sh


#!/bin/bashSTART_TIME=date '+%Y-%m-%d %H:%M:%S'START_TIME_S=date '+%s'DUMPLING_PATH=/data/ywgl/exportfileSOURCE_IP=2USER_PWD=$3


if [ -d “DATABASE” ]; thenrm -fr DATABASEfi


cd /data/tidb-community-toolkit-v6.5.0-linux-amd64


./dumpling -uroot -pSOURCE_IP -P3306 –filetype sql –compress gzip -t 8 -F256MiB -o DATABASE -B $DATABASE


END_TIME=date '+%Y-%m-%d %H:%M:%S'END_TIME_S=date '+%s'SUM_TIME=END_TIME_S-$START_TIME_S]


echo “—————begin:END_TIME– total:$SUM_TIME seconds———————”


4.2TiDB Lighning 导入数据

4.2.1 安装

在线安装


tiup install tidb-lightning


在线使用


tiup dumpling …


离线安装


tar -zxvf tidb-lightning-v6.5.0-linux-amd64.tar.gz


chmod +x tidb-lightning

4.2.2 前置检查

目标 TiKV 集群的总存储空间必须大于 数据源大小 * 副本数量 *2

4.2.3 使用

编辑配置文件



执行导入


nohup ./tidb-lightning -config /data/ywgl/tidb-lightning-$DATABASE.toml > /dev/null 2>&1 &


参考脚本


lightning.sh


#!/bin/bashTIDB_LIGHTNING_PATH=/data/ywgl/exportfileDATABASE=$1


if [ ! -d “DATABASE” ]; thenecho “$DATABASE 文件夹不存在 ”exitfi


if [ ls "$TIDB_LIGHTNING_PATH/$DATABASE" | wc -l -eq 0 ]; thenecho “$DATABASE 数据文件为空 ”fi


cd /data/ywglcp tidb-lightning-example.toml tidb-lightning-DATABASE/g” tidb-lightning-DATABASE.toml > /dev/null 2>&1 &tail -f tidb-lightning-$DATABASE.log


导入监控



5. 备份与恢复

5.1 安装

安装 br


tiup install br


安装 minio


Server 端


MC 客户端


6. 学习计划

| | | || - | ——————————————————————— | – || 1 | br 备份恢复方案(备份存储的选择(NFS 或者 Minio);全量备份、增量备份、日志备份;全量恢复、库表恢复、PITR 指定时间点恢复)和验证 | 3 周 || 2 | TiDB 集群运维操作(扩缩容、升级、补丁、修改配置、) | 1 周 || 3 | TiUnitManager 的使用 | 2 周 || 4 | 日常巡检(Prometheus 和 dashborad) | 3 周 || 5 | 使用 TiCDC 同步数据到下游 MySQL 数据库 | 1 周 || 6 | Tiflash 的使用 | 2 周 |


发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB数据迁移实践DM工具_迁移_TiDB 社区干货传送门_InfoQ写作社区