小数据量迁移MySQL到TiDB

适用场景

“小数据量”通常指 TiB 级别以下,使用 TiDB DM (以下简称 DM)以全量+增量的模式数据到 TiDB,一般而言,受到表结构索引数目等信息、硬件以及网络环境影响,迁移速率在 30~50GB/h 不等。

交互流程

数据迁移

加密数据库密码
tiup dmctl:v7.5.3 encrypt 'aacopy.cn'

1
2
3
[root@hf2 dm]# tiup dmctl:v7.5.3 encrypt 'aacopy.cn'
Starting component dmctl: /root/.tiup/components/dmctl/v7.5.3/dmctl/dmctl encrypt aacopy.cn
srqKOakkr1VvY4GXccO+10B16nzEq1aVBrg=

创建数据源,新建 source1.yaml 文件

1
2
3
4
5
6
7
8
9
10
11
# 唯一命名,不可重复。
source-id: "mysql-01"

# DM-worker 是否使用全局事务标识符 (GTID) 拉取 binlog。使用前提是上游 MySQL 已开启 GTID 模式。若上游存在主从自动切换,则必须使用 GTID 模式。
enable-gtid: false

from:
host: "192.168.80.128" # 例如:172.16.10.81
user: "root"
password: "srqKOakkr1VvY4GXccO+10B16nzEq1aVBrg=" # 支持但不推荐使用明文密码,建议使用 dmctl encrypt 对明文密码进行加密后使用
port: 3306

使用 tiup dmctl 将数据源配置加载到 DM 集群中:
tiup dmctl:v7.5.3 --master-addr 10.88.88.70:8261 operate-source create source1.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@hf2 dm]# tiup dmctl:v7.5.3 --master-addr 10.88.88.70:8261 operate-source create source1.yaml
Starting component dmctl: /root/.tiup/components/dmctl/v7.5.3/dmctl/dmctl --master-addr 10.88.88.70:8261 operate-source create source1.yaml
{
"result": true,
"msg": "",
"sources": [
{
"result": true,
"msg": "",
"source": "mysql-01",
"worker": "dm-10.88.88.70-8262"
}
]
}

创建迁移任务
新建 task1.yaml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 任务名,多个同时运行的任务不能重名。
name: "flowable"
# 任务模式,可设为
# full:只进行全量数据迁移
# incremental: binlog 实时同步
# all: 全量 + binlog 迁移
task-mode: "all"
# 下游 TiDB 配置信息。
target-database:
host: "10.88.88.70" # 例如:172.16.10.83
port: 4000
user: "root"
password: "wcQyG+ImamDYR2CafHB9dEDTGa12322222s==" # 支持但不推荐使用明文密码,建议使用 dmctl encrypt 对明文密码进行加密后使用

# 当前数据迁移任务需要的全部上游 MySQL 实例配置。
mysql-instances:
-
# 上游实例或者复制组 ID。
source-id: "mysql-01"
# 需要迁移的库名或表名的黑白名单的配置项名称,用于引用全局的黑白名单配置,全局配置见下面的 `block-allow-list` 的配置。
block-allow-list: "listA"


# 黑白名单全局配置,各实例通过配置项名引用。
block-allow-list:
listA: # 名称
do-dbs: ["flowable"] # 迁移哪些库
ignore-tables: # 忽略哪些表
- db-name: "flowable"
tbl-name: "undo_log"

使用 check-task 命令检查配置是否符合 DM 的配置要求,以避免后期报错。
tiup dmctl:v7.5.3 --master-addr 10.88.88.70:8261 check-task task1.yaml

启动数据迁移任务
tiup dmctl:v7.5.3 --master-addr 10.88.88.70:8261 start-task task1.yaml

查看任务状态
tiup dmctl:v7.5.3 --master-addr 10.88.88.70:8261 query-status flowable

暂停任务
tiup dmctl:v7.5.3 --master-addr 10.88.88.70:8261 pause-task task1.yaml

恢复任务
tiup dmctl:v7.5.3 --master-addr 10.88.88.70:8261 resume-task task1.yaml
或者
tiup dmctl:v7.5.3 --master-addr 10.88.88.70:8261 resume-task flowable

停止任务
tiup dmctl:v7.5.3 --master-addr 10.88.88.70:8261 stop-task task1.yaml

相关资料

从小数据量 MySQL 迁移数据到 TiDB: https://docs.pingcap.com/zh/tidb/v7.5/migrate-small-mysql-to-tidb
TiDB Data Migration 简介: https://docs.pingcap.com/zh/tidb/v7.5/dm-overview

问题

DM连接TiDB服务器超时3次,自动暂停
直接执行恢复命令

DM执行导入报错