TiDB 数据迁移实践 DM 工具
作者: gykj-sunzl 原文来源:https://tidb.net/blog/75936cd7
1.TiDB 集群
1.1 拓扑结构
3 副本集群
1.2 相关链接
Dashboard:
http://73.134.46.237:2379/dashboard
Grafana:
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:
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 周 |
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/bd2a8930a2e30d3ca5a212062】。文章转载请联系作者。
评论