mysql版本:Server version: 5.6.28
tidb版本:v7.1.1
dumpling版本:v7.4.0
lightning版本:v7.4.0
DM版本:v7.4.0
数据迁移之前的准备工作:
- 数据源端日志模式必须是 ROW 模式。
- 需要确保所有表有唯一键或者是主键。
- 确认目标TiDB与同步库清单,没有冲突库名,有冲突库名可改名
1)如何确认日志模式
|
2)如何确定数据表是否有主键或者唯一索引,若没有,可商讨后添加无业务意义主键自增ID。
|
3)确定目标tidb没有冲突库名
|
数据迁移mysq > TiDB
| 数据量大小 | 使用到的工具 | 迁移方式 |
|---|---|---|
| <1TB | DM | 配置DM全量模式 |
| >1TB | dumpling,lightning,DM | 1.dumpling 导出mysql全量历史 2.lightning 将历史数据导入TiDB 3.DM配置增量模式 |
工具权限描述:
- dumpling : PROCESS,SELECT,RELOAD,LOCK TABLES,REPLICATION CLIENT
- lightning(逻辑导入模式) :CREATE,SELECT,INSERT,UPDATE,DELETE,DROP,ALTER
在MySQL端创建传输数据用账号:
|
(一)小于1TB数据迁移
使用DM做全量数据迁移,task-mode配置项有改动,其余与增量传输一致
1)配置数据源
tidb@testdb-pd:~/dm/source$ cat stg03_test.yaml
source-id: "stg03-test" #起个名字
from:
host: "${mysql_ip}"
user: "${mysql_user}"
password: "${passwd}" # mysql_passwd,使用加密:tiup dmctl encrypt 'abc!@#123'
port: ${mysql_port}
2)创建数据源
tidb@testdb-pd:~/dm/source$tiup dmctl --master-addr=127.0.0.1:8261 operate-source create stg03_test-task.yaml
#--master-addr=${dm-master_ip}:8261 指明dm的ip:port,这里因为我部署在本机就有一个dm-master节点,所以这么写
#查看dm集群名字
tiup dm list
#查看dm集群信息,Role为 dm-master的ID即为master-addr 需要的信息,集群中有多个master,哪一个都行。
tiup dm display ${dm_cluster_name}
3)配置DM任务
tidb@testdb-pd:~/dm/task$ cat stg03_test-task.yaml
name: stg03_test #起个名字
task-mode: all #“all”指定是全量传输
collation_compatible: "strict" #严格复制mysql数据源的排序规则及字符集,tidb默认字符串大小写敏感,而mysql默认字符串大小写不敏感
#目标tidb的相关信息
target-database:
host: "127.0.0.1" #目标tidb的IP
port: 4000 #目标tidb的port
user: "root" #目标tidb的用户
password: "ddddddddddddd+EpWJaIlw==" # 密码,如果密码不为空,则推荐使用经过 dmctl 加密的密文
# 填写一个或多个所需同步的数据源信息
mysql-instances:
source-id: "stg03-test" #上文的数据源的source-id
block-allow-list: "ba-rule1" #同步数据的额过滤规则
# route-rules: ["route-rule-1"]
block-allow-list:
ba-rule1:
do-dbs: ['db_name1','db_name2'] #要迁移哪些库
#迁移至非同名库
#routes:
# route-rule-1:
# schema-pattern: "db_name"
# target-schema: "db_name_bak"
4)启动DM任务
tiup dmctl --master-addr=127.0.0.1:8261 start-task stg03_test-task.yaml
(二)大于1TB数据迁移
dumpling 数据导出,语法格式:
tiup dumpling -u${username} -h${mysql_ip} -P${mysql_port} -p${passwd} -o ${store_dir} --filetype csv -B ${db_name1} -B ${db_name2}
- -u 指定mysql 用户
- -h 指定mysql IP
- -P 指定mysql Port
- -o 指定数据存储目录
- -B 指定需要导出数据的db
lightling 数据导入,语法格式:
tiup tidb-lightning -config tidb-lightning-test.toml
tidb-lightning-test.toml文件配置如下:通常在对应环境拷贝历史配置文件后,只需要修改 data-source-dir 为上述 dumpling的 ${store_dir}
|
DM进行增量数据传输:
DM-UI:http://${dm-master/L_ip}:8261/dashboard/migration/task
1)配置数据源:
|
2)创建DM数据源:
|
3)配置DM任务:
|
4)启动增量任务:
|
5)停止增量任务:
|
6)删除DM任务
tiup dmctl --master-addr 127.0.0.1:8261 stop-task -s stg03_test stg03-test-task
7)删除DM数据源
tiup dmctl --master-addr 127.0.0.1:8261 operate-source stop stg03_test
dumpling和lightning示例如下:
|
关于各个迁移工具,详情请见:
Dumpling:https://docs.pingcap.com/zh/tidb/stable/dumpling-overview/
Lightning:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-overview/
DM:https://docs-archive.pingcap.com/zh/tidb-data-migration/v2.0/