背景
如果不想使用 Lighting 命令行模式来导入数据,而是集中到自己的管理平台上,那么可以将 lighting 启动为一个服务,然后调用即可。
API
lightning web 模式 api:
- POST /tasks,body 是配置文件,返回 json,字段 id 表示 task id。
- GET /progress/task
手动测试
启用服务器模式
方式有如下几种:
- 在启动
tidb-lightning
时加上命令行参数--server-mode
。
tiup tidb-lightning --server-mode --status-addr :8289
- 在配置文件中设置
lightning.server-mode
。
[lightning]
server-mode = true
status-addr = ':8289'
Web Ui
可以看到,我们使用 Web ui 上传相关配置即可调用 lighting 来导入数据
其他测试信息
Schema
CREATE TABLE test.`orders_range` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`customer_surname` varchar(30) DEFAULT NULL,
`store_id` int(11) DEFAULT NULL,
`salesperson_id` int(11) DEFAULT NULL,
`order_Date` date DEFAULT NULL,
`note` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=30002
PARTITION BY RANGE (`id`)
(PARTITION `p0` VALUES LESS THAN (5),
PARTITION `p1` VALUES LESS THAN (10),
PARTITION `p3` VALUES LESS THAN (15))
CSV
cat test.orders_range.csv ✔ wangjun@vm172-16-201-210 16:37:07
1,"aa",1,1,"2022-11-07 13:56:11.000","test"
2,"bb",2,2,"2022-11-07 13:56:12.000","test2"
Lighting web 加载的 toml 配置
[lightning]
# 日志
level = "info"
file = "tidb-lightning.log"
[tikv-importer]
# 选择使用的 local 后端
backend = "tidb"
# 设置排序的键值对的临时存放地址,目标路径需要是一个空目录
sorted-kv-dir = "/data/wangjun/tidb-tools/sorted-kv-dir"
[mydumper]
# 源数据目录。
data-source-dir = "/data/wangjun/tidb-tools/csv"
[mydumper.csv]
# 字段分隔符,支持一个或多个字符,默认值为 ','。如果数据中可能有逗号,建议源文件导出时分隔符使用非常见组合字符例如'|+|'。
separator = ','
# 引用定界符,设置为空表示字符串未加引号。
delimiter = '"'
# 行尾定界字符,支持一个或多个字符。设置为空(默认值)表示 "\n"(换行)和 "\r\n" (回车+换行),均表示行尾。
terminator = ""
# CSV 文件是否包含表头。
# 如果为 true,首行将会被跳过。
header = false
# CSV 是否包含 NULL。
# 如果为 true,CSV 文件的任何列都不能解析为 NULL。
not-null = false
# 如果 `not-null` 为 false(即 CSV 可以包含 NULL),
# 为以下值的字段将会被解析为 NULL。
null = '\N'
# 是否解析字段内的反斜线转义符。
backslash-escape = true
# 是否移除以分隔符结束的行。
trim-last-separator = false
# 配置通配符规则,默认规则会过滤 mysql、sys、INFORMATION_SCHEMA、PERFORMANCE_SCHEMA、METRICS_SCHEMA、INSPECTION_SCHEMA 系统数据库下的所有表
# 若不配置该项,导入系统表时会出现“找不到 schema”的异常
# filter = ['*.*', '!mysql.*', '!sys.*', '!INFORMATION_SCHEMA.*', '!PERFORMANCE_SCHEMA.*', '!METRICS_SCHEMA.*', '!INSPECTION_SCHEMA.*']
[tidb]
# 目标集群的信息
host = "127.0.0.1"
port = 4201
user = "root"
password = "tidb@123"
# 表架构信息在从 TiDB 的“状态端口”获取。
status-port = 10080
# 集群 pd 的地址
pd-addr = "127.0.0.1:2379"
API 方式调用
UI 方式成功后,按照 API 章节说明,我们尝试使用 Postman 调用来尝试使用。
使用方法如下图:
点击 send ,可以看到返回任务 ID,从 Web ui 也可以看到调用成功:
结论
如果在自家内网环境,不想登录服务器去启动 lighting,而是兼容到自家的调度平台,Lightning web 方式是一个很好的接入方式。