0
1
3
0
专栏/.../

TiDB数据迁移实践DM工具

 gykj-sunzl  发表于  2023-06-01

1.TiDB集群

1.1拓扑结构

3副本集群

 

Ip

组件

73.134.46.237

中控机、PD、TiDB Server

73.134.46.61  非SSD固态硬盘

TiKV1

73.134.47.200 非SSD固态硬盘

TiKV2

73.134.46.239 非SSD固态硬盘

TiKV3

73.134.47.53

Prometheus、Grafana、alertmanager、Nginx、HAProxy

 

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 完成增量数据迁移。

 

名称

使用场景

上游(或输入源文件)

下游

(或输出文件)

主要优势

使用限制

Data Migration

集群

用于将数据从与

MySQL 协议

兼容的数据库迁移到 TiDB。

MySQL,MariaDB,

Aurora,MySQL

TiDB

一体化的数据迁移任务

管理工具,

支持全量迁移和增量同步;

支持对表与操作进行过滤;

支持分库分表的合并迁移。

建议用于 1 TB 以内的存量数据迁移。

Dumpling

用于将数据从 MySQL/TiDB

进行全量导出。

MySQL,TiDB

SQL,CSV

支持全新的 table-filter,

筛选数据更加方便;

支持导出到 Amazon S3 云盘

如果导出后计划往非 TiDB 的数据库恢复,建议使用 Dumpling;如果是往另一个 TiDB 恢复,建议使用 BR。

TiDB Lightning

用于将数据

全量导入到 TiDB。

Dumpling 输出的文件;

从 Hive 或者 Aurora 导出的

Parquet 文件;

从本地盘或 Amazon S3

云盘读取数据。

TiDB

支持迅速导入大量新数据,

实现快速初始化 TiDB 集群

的指定表;支持断点续传;

支持数据过滤。

Physical Import Mode Logical Import Mode

 

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

2.3方案二Dumpling和TiDB Lightning

 

3.Data Migration集群

3.1DM集群拓扑结构

 

Ip

组件

73.134.47.190

Dm-master、Dm-worker、Prometheus、Grafana、alertmanager

 

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

 

图片52.png 

 

c. 初始化配置文件

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

 

图片53.png 

 

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

                 

 

d.执行部署

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

图片54.png 

图片55.png 

 

 

e. 验证

tiup dm list

tiup dm display dm-gykj

 

图片56.png 

 

启动集群

tiup dm start dm-gykj

tiup dm display dm-gykj

 

图片57.png 

3.4数据迁移

a. 加密数据源密码

tiup dmctl -encrypt 'Root#123'

图片58.png 

b. 数据源配置

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

 

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

 

图片59.png 

 

b.加载数据源配置文件

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

 

图片60.png 

 

查看数据源状态

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

 

图片61.png 

 

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

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

 

图片62.png 

 

图片63.png 

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

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

图片64.png 

 

d. 迁移任务前置检查

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

        dump权限

        REPLICATION权限、MySQL binlog配置等

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

 

图片65.png 

 

 

e. 启动迁移任务

 

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

 

图片66.png 

f. 验证任务状态

 

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

 

图片67.png 

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

 

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

图片68.png 

 

增量同步验证

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

图片69.png 

 

Tidb集群xahr库已同步

图片70.png 

 

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 不开启

 

图片71.png 

 

3.5运维管理操作

3.5.1数据源

 

创建

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 operate-source stop xahr-test

查看绑定关系

tiup dmctl --master-addr=73.134.47.190:8261 operate-source show ./source-mysql-xahr.yaml

查看配置

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

查询组件信息

tiup dmctl --master-addr=73.134.47.190:8261 list-member

改变绑定

tiup dmctl --master-addr=73.134.47.190:8261 transfer-source szsf-test dm-127.0.0.1-8262

 

3.5.2迁移任务

前置检查

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

启动

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

查询状态

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

查询详情

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

暂停

tiup dmctl --master-addr=73.134.47.190:8261 pause-task task-xahr

恢复

tiup dmctl --master-addr=73.134.47.190:8261 resume-task task-xahr

停止

tiup dmctl --master-addr=73.134.47.190:8261 stop-task task-xahr

 

3.5.3迁移增量校验

开启增量校验

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

增量校验状态

tiup dmctl --master-addr=73.134.47.190:8261 validation status task-xahr

停止增量校验

tiup dmctl --master-addr=73.134.47.190:8261 validation stop task-xahr

错误行信息

tiup dmctl --master-addr=73.134.47.190:8261 validation show-error task-xahr

清理错误行

tiup dmctl --master-addr=73.134.47.190:8261 validation clear-error task-xahr --all

 

3.5.4集群运维

3.5.4.1WebUI

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

 

 

前提条件开启OpenAPI

 

方法一:

拓扑文件中添加如下配置

图片72.png 

 

方法二:

修改集群配置文件

   tiup dm edit-config dm-gykj

重新加载集群

   tiup dm reload dm-gykj -R dm-master

 

WebUI地址:

http://73.134.47.190:8261/dashboard

图片73.png 

3.5.4.2 dmctl

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

图片74.png 

 

3.5.4.3日常巡检

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

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

 

图片75.png 

方法二:Prometheus和Grafana

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

 

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

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

dm-master

图片76.png 

dm-worker

图片77.png 

 

3.5.4.4集群操作

 

集群列表

tiup dm list

启动集群

tiup dm start dm-gykj

集群状态

tiup dm display dm-gykj

集群缩容

tiup dm scale-in dm-gykj -N 73.134.47.190:8262

集群扩容

tiup dm scale-out dm-gykj ./scale-out-monitor.yaml

更新配置

tiup dm edit-config dm-gykj

加载配置

tiup dm reload dm-gykj

补丁更新

tiup dm patch dm-gykj /data/tidb/dm-master-hotfix.tar.gz -R dm-master

操作日志

tiup dm audit

 

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/bash START_TIME=date '+%Y-%m-%d %H:%M:%S' START_TIME_S=date '+%s' DUMPLING_PATH=/data/ywgl/exportfile SOURCE_IP=$1 DATABASE=$2 USER_PWD=$3

if [ -d "$DUMPLING_PATH/$DATABASE" ]; then rm -fr $DUMPLING_PATH/$DATABASE fi

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

./dumpling -uroot -p$USER_PWD -h $SOURCE_IP -P3306 --filetype sql --compress gzip -t 8 -F256MiB -o $DUMPLING_PATH/$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:$START_TIME-- end:$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使用

编辑配置文件

 

图片78.png 

 

执行导入

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

 

参考脚本

lightning.sh

#!/bin/bash TIDB_LIGHTNING_PATH=/data/ywgl/exportfile DATABASE=$1

if [ ! -d "$TIDB_LIGHTNING_PATH/$DATABASE" ]; then echo "$DATABASE文件夹不存在" exit fi

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

cd /data/ywgl cp tidb-lightning-example.toml tidb-lightning-$DATABASE.toml sed -i "s/database/$DATABASE/g" tidb-lightning-$DATABASE.toml cd /data/tidb-community-toolkit-v6.5.0-linux-amd64 nohup ./tidb-lightning -config /data/ywgl/tidb-lightning-$DATABASE.toml > /dev/null 2>&1 & tail -f tidb-lightning-$DATABASE.log

导入监控

 

图片79.png 

 

 

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周

 

0
1
3
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论