TiDB数据迁移实践DM工具

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

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周 |

猜你喜欢

转载自blog.csdn.net/TiDBer/article/details/131106208