课程名称:301 + 3.6.2 Data migration from MySQL(如何将数据从 MySQL 迁移到 TiDB)
学习时长:10min
课程收获:了解单机 Mysql 数据库如何进行数据迁移到 TiDB
课程内容:
Dumpling 的使用:
需要的权限
- SELECT
- RELOAD
- LOCK TABLES
- REPLICATION CLIENT
导出大规模数据时的 TiDB GC 设置
- 如果导出的 TiDB 版本大于 v4.0.0,并且 Dumpling 可以访问 TiDB 集群的 PD 地址,Dumpling 会自动配置延长 GC 时间且不会对原集群造成影响。v4.0.0 之前的版本依然需要手动修改 GC。
- 其他情况下,假如导出的数据量非常大,可以提前调长 GC 时间,以避免因为导出过程中发生 GC 导致导出失败:
update mysql.tidb set VARIABLE_VALUE = '720h' where VARIABLE_NAME = 'tikv_gc_life_time';
- 在操作结束之后,再将 GC 时间调回原样(默认是
10m
):
update mysql.tidb set VARIABLE_VALUE = '10m' where VARIABLE_NAME = 'tikv_gc_life_time';
- 最后,所有的导出数据都可以用 Lightning 导入回 TiDB。
Dumpling 主要选项表
主要选项 用途 默认值 -B 或 --database 导出指定数据库 -T 或 --tables-list 导出指定数据表 -f 或 --filter 导出能匹配模式的表,语法可参考 table-filter *.*
(导出所有库表)-h 或 --host 连接的数据库主机的地址 “127.0.0.1” -t 或 --threads 备份并发线程数 4 -r 或 --rows 将 table 划分成 row 行数据,一般针对大表操作并发生成多个文件。 -F 或 --filesize 将 table 数据划分出来的文件大小,需指明单位(如 128B
,64KiB
,32MiB
,1.5GiB
)–filetype 导出文件类型(csv/sql) “sql” -o 或 --output 导出文件路径 “./export-${time}” –where 对备份的数据表通过 where 条件指定范围 -p 或 --password 连接的数据库主机的密码 -P 或 --port 连接的数据库主机的端口 4000 -u 或 --user 连接的数据库主机的用户名 “root”
TiDB Lightning
使用 TiDB Ansible 部署 TiDB Lightning
TiDB Lightning 可随 TiDB 集群一起用 TiDB Ansible 部署。
- 编辑
inventory.ini
,为tidb-lightning
配置一个 IP。…
[lightning_server]
192.168.20.10
…
- 修改
group_vars/all.yml
文件,忽略 tikv_importer_port 配置,并修改 conf/tidb-lighting.yml 文件中的backend 为 “tidb”。
tikv-importer:
backend: "tidb"
- 开始部署。
ansible-playbook bootstrap.yml &&
ansible-playbook deploy.yml
- 修改 tidb-lightning.toml 文件中 [mydumper] 下的 data-source-dir
data-source-dir = “、data/export”
- 修改 tidb-lightning.toml 文件,加入目标 TiDB 集群配置信息
[tidb]
host = "172.16.31.1"
port = 4000
user = "root"
password = ""
- 运行
tidb-lightning
。如果直接在命令行中用nohup
启动程序,可能会因为 SIGHUP 信号而退出,建议把nohup
放到脚本里面,如:
#!/bin/bash
nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &
学习过程中遇到的问题或延伸思考:
- 问题 1:
- 问题 2:
- 延伸思考 1:
- 延伸思考 2: