作者: gykj-sunzl



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

 

TiDB数据迁移实践DM工具_DM

 

 


c. 初始化配置文件

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

 

TiDB数据迁移实践DM工具_数据迁移_02

 

 

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

                 

 


d.执行部署

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

TiDB数据迁移实践DM工具_数据迁移_03

 

TiDB数据迁移实践DM工具_MySQL_04

 

 

 


e. 验证

tiup dm list

tiup dm display dm-gykj

 

TiDB数据迁移实践DM工具_MySQL_05

 

 

启动集群

tiup dm start dm-gykj

tiup dm display dm-gykj

 

TiDB数据迁移实践DM工具_DM_06

 

3.4数据迁移


a. 加密数据源密码

tiup dmctl -encrypt 'Root#123'

TiDB数据迁移实践DM工具_数据迁移_07

 

b. 数据源配置

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

 

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

 

TiDB数据迁移实践DM工具_DM_08

 

 

b.加载数据源配置文件

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

 

TiDB数据迁移实践DM工具_MySQL_09

 

 

查看数据源状态

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

 

TiDB数据迁移实践DM工具_DM_10

 

 

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

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

 

TiDB数据迁移实践DM工具_DM_11

 

 

TiDB数据迁移实践DM工具_DM_12

 

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

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

TiDB数据迁移实践DM工具_DM_13

 

 


d. 迁移任务前置检查

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

        dump权限

        REPLICATION权限、MySQL binlog配置等

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

 

TiDB数据迁移实践DM工具_MySQL_14

 

 

 


e. 启动迁移任务

 

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

 

TiDB数据迁移实践DM工具_DM_15

 

f. 验证任务状态

 

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

 

TiDB数据迁移实践DM工具_DM_16

 

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

 

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

TiDB数据迁移实践DM工具_DM_17

 

 

增量同步验证

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

TiDB数据迁移实践DM工具_MySQL_18

 

 

Tidb集群xahr库已同步

TiDB数据迁移实践DM工具_数据迁移_19

 

 


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

 

TiDB数据迁移实践DM工具_MySQL_20

 

 


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

 

方法一:

拓扑文件中添加如下配置

TiDB数据迁移实践DM工具_数据迁移_21

 

 

方法二:

修改集群配置文件

   tiup dm edit-config dm-gykj

重新加载集群

   tiup dm reload dm-gykj -R dm-master

 

WebUI地址:

http://73.134.47.190:8261/dashboard

TiDB数据迁移实践DM工具_数据迁移_22

 

3.5.4.2 dmctl

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

TiDB数据迁移实践DM工具_数据迁移_23

 

 

3.5.4.3日常巡检

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

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

 

TiDB数据迁移实践DM工具_DM_24

 

方法二:Prometheus和Grafana

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

 

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

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

dm-master

TiDB数据迁移实践DM工具_DM_25

 

dm-worker

TiDB数据迁移实践DM工具_MySQL_26

 

 

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使用

编辑配置文件

 

TiDB数据迁移实践DM工具_数据迁移_27

 

 

执行导入

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

导入监控

 

TiDB数据迁移实践DM工具_数据迁移_28

 

 

 


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