1 TiDB Lightning介绍
TiDB Lightning 是一个将全量数据高速导入到 TiDB 集群的工具,目前支持 Mydumper 或 CSV 输出格式的数据源。你可以在以下两种场景下使用 Lightning:
迅速导入大量新数据。
备份恢复所有数据。
TiDB Lightning 主要包含两个部分:
(1)tidb-lightning(“前端”):主要完成适配工作,通过读取数据源,在下游 TiDB 集群建表、将数据转换成键/值对 (KV 对) 发送到 tikv-importer、检查数据完整性等。
(2)tikv-importer(“后端”):主要完成将数据导入 TiKV 集群的工作,把 tidb-lightning 写入的 KV 对缓存、排序、切分并导入到 TiKV 集群。
2 准备迁移工具
首先用过一下地址下载工具
wget https://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz
wget https://download.pingcap.org/tidb-toolkit-latest-linux-amd64.tar.gz
3 准备MySQL数据
CREATE DATABASE mytest;
USE mytest;
CREATE TABLE mytest.t1 (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
c CHAR (32),
PORT INT
);
insert into t1 values (),(),(),(),(),(),(),();
insert into t1 (id) select null from t1;
insert into t1 (id) select null from t1;
insert into t1 (id) select null from t1;
insert into t1 (id) select null from t1;
insert into t1 (id) select null from t1;
update t1 set c=md5(id), port=@@port;
CREATE TABLE mytest.t2 (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
c CHAR (32),
PORT INT
);
insert into t2 values (),(),(),(),(),(),(),();
insert into t2 (id) select null from t2;
insert into t2 (id) select null from t2;
insert into t2 (id) select null from t2;
insert into t2 (id) select null from t2;
insert into t2 (id) select null from t2;
update t2 set c=md5(id), port=@@port;
4 导出数据
mkdir -p /data/my_database/
cd /home/tidb-enterprise-tools-latest-linux-amd64/bin
./mydumper -h 192.168.222.132 -P 3306 -u root -p 123456 -t 16 -F 256 -B mytest -T t1,t2 --skip-tz-utc -o /data/my_database/
cd /data/my_database
其中:
- -B mytest :从 mytest 数据库导出。
- -T t1,t2:只导出 t1 和 t2 这两个表。
- -t 16:使用 16 个线程导出数据。
- -F 256:将每张表切分成多个文件,每个文件大小约为 256 MB。
- --skip-tz-utc:添加这个参数则会忽略掉 TiDB 与导数据的机器之间时区设置不一致的情况,禁止自动转换。
这样全量备份数据就导出到了/data/my_database目录中。
5 启动tikv-importer
cd /home/tidb-toolkit-latest-linux-amd64/bin
修改配置文件
vim tikv-importer.toml
# TiKV Importer 配置文件模版
# 日志文件。
log-file = "tikv-importer.log"
# 日志等级:trace、debug、info、warn、error、off。
log-level = "info"
[server]
# tikv-importer 监听的地址,tidb-lightning 需要连到这个地址进行数据写入。
addr = "192.168.222.136:8287"
[import]
# 存储引擎文档 (engine file) 的文件夹路径。
import-dir = "/mnt/ssd/data.import/"
启动tikv-importer
nohup ./tikv-importer -C tikv-importer.toml > nohup.out &
6 启动tidb-lightning
启动命令比较复杂,建议使用脚本,如下:
vim run.sh
脚本内容如下
#!/bin/bash
nohup ./tidb-lightning \
--importer 192.168.1.101:8287 \
-d /data/my_database/ \
--pd-urls 0.0.0.0:2379 \
--tidb-host 192.168.1.101 \
--tidb-user root \
--log-file tidb-lightning.log \
> nohup.out &
修改脚本权限
chmod 755 run.sh
启动脚本
./run.sh
这是去查看TiDB,发现mysql中指定的数据已经全部同步到TiDB中