背景
如果不想使用 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 方式是一个很好的接入方式。