- 关于 TiDB
- 主要概念
- 操作指南
- 快速上手
- 部署
- 配置
- 安全
- 安全传输层协议 (TLS)
- 生成自签名证书
- 监控
- 迁移
- 运维
- Ansible 常见运维操作
- 备份与恢复
- 定位异常查询
- 扩容缩容
- 升级
- 故障诊断
- 参考手册
- SQL
- 与 MySQL 兼容性对比
- SQL 语言结构
- 表属性和列属性
- 数据类型
- 函数与操作符
- SQL 语句
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ALTER DATABASE
ALTER INSTANCE
ALTER TABLE
ALTER USER
ANALYZE TABLE
BEGIN
CHANGE COLUMN
COMMIT
CREATE DATABASE
CREATE INDEX
CREATE ROLE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP ROLE
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW ANALYZE STATUS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEXES [FROM|IN]
SHOW INDEX [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW SCHEMAS
SHOW STATUS
SHOW [FULL] TABLES
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SPLIT REGION
START TRANSACTION
TRACE
TRUNCATE
UPDATE
USE
- 约束
- 生成列
- 分区表
- 字符集
- SQL 模式
- 视图
- 配置
- tidb-server
- pd-server
- tikv-server
- 安全
- 事务
- 系统数据库
- 错误码
- 支持的连接器和 API
- 垃圾回收 (GC)
- 性能调优
- 监控指标
- 报警规则
- 最佳实践
- TiSpark 使用指南
- TiKV
- TiFlash
- TiDB Binlog
- 工具
- TiDB in Kubernetes
- 常见问题 (FAQ)
- 技术支持
- 贡献
- 版本发布历史
- 发布版本汇总
- v3.1
- v3.0
- v2.1
- v2.0
- v1.0
- 术语表
你正在查看 TiDB 数据库的较旧版本 (TiDB v3.1) 的文档。
TiDB Lightning 部署与执行
本文主要介绍 TiDB Lightning 使用 Importer-backend(默认)进行数据导入的硬件需求,以及使用 TiDB Ansible 部署与手动部署 TiDB Lightning 这两种部署方式。
如果你不希望影响 TiDB 集群的对外服务,可以参考 TiDB Lightning TiDB-backend 中的硬件需求与部署方式进行数据导入。
注意事项
在使用 TiDB Lightning 前,需注意以下事项:
TiDB Lightning 运行后,TiDB 集群将无法正常对外提供服务。
若
tidb-lightning
崩溃,集群会留在“导入模式”。若忘记转回“普通模式”,集群会产生大量未压缩的文件,继而消耗 CPU 并导致延迟。此时,需要使用tidb-lightning-ctl
手动将集群转回“普通模式”:bin/tidb-lightning-ctl -switch-mode=normal
TiDB Lightning 需要下游 TiDB 有如下权限:
权限 作用域 SELECT Tables INSERT Tables UPDATE Tables DELETE Tables CREATE Databases, tables DROP Databases, tables ALTER Tables 如果配置项
checksum = true
,则 TiDB Lightning 需要有下游 TiDB admin 用户权限。
硬件需求
tidb-lightning
和 tikv-importer
这两个组件皆为资源密集程序,建议各自单独部署。
为了优化效能,建议硬件配置如下:
tidb-lightning
- 32+ 逻辑核 CPU
- 足够储存整个数据源的 SSD 硬盘,读取速度越快越好
- 使用万兆网卡,带宽需 300 MB/s 以上
- 运行过程默认会占满 CPU,建议单独部署。条件不允许的情况下可以和其他组件(比如
tidb-server
)部署在同一台机器上,然后通过配置region-concurrency
限制tidb-lightning
使用 CPU 资源。
tikv-importer
- 32+ 逻辑核 CPU
- 40 GB+ 内存
- 1 TB+ SSD 硬盘,IOPS 越高越好(要求 ≥8000)
- 硬盘必须大于最大的 N 个表的大小总和,其中 N = max(index-concurrency, table-concurrency)。
- 使用万兆网卡,带宽需 300 MB/s 以上
- 运行过程中 CPU、I/O 和网络带宽都可能占满,建议单独部署。
如果机器充裕的话,可以部署多套 tidb-lightning
+ tikv-importer
,然后将源数据以表为粒度进行切分,并发导入。
tidb-lightning
是 CPU 密集型程序,如果和其它程序混合部署,需要通过region-concurrency
限制tidb-lightning
的 CPU 实际占用核数,否则会影响其他程序的正常运行。建议将混合部署机器上 75% 的 CPU 资源分配给tidb-lightning
。例如,机器为 32 核,则tidb-lightning
的region-concurrency
可设为 “24”。tikv-importer
将中间数据存储缓存到内存上以加速导入过程。占用内存大小可以通过 (max-open-engines
×write-buffer-size
× 2) + (num-import-jobs
×region-split-size
× 2) 计算得来。如果磁盘写入速度慢,缓存可能会带来更大的内存占用。
此外,目标 TiKV 集群必须有足够空间接收新导入的数据。除了标准硬件配置以外,目标 TiKV 集群的总存储空间必须大于 数据源大小 × 副本数量 × 2。例如集群默认使用 3 副本,那么总存储空间需为数据源大小的 6 倍以上。
导出数据
使用 mydumper
从 MySQL 导出数据,如下:
./bin/mydumper -h 127.0.0.1 -P 3306 -u root -t 16 -F 256 -B test -T t1,t2 --skip-tz-utc -o /data/my_database/
其中:
-B test
:从test
数据库导出。-T t1,t2
:只导出t1
和t2
这两个表。-t 16
:使用 16 个线程导出数据。-F 256
:将每张表切分成多个文件,每个文件大小约为 256 MB。--skip-tz-utc
:添加这个参数则会忽略掉 TiDB 与导数据的机器之间时区设置不一致的情况,禁止自动转换。
如果数据源是 CSV 文件,请参考 CSV 支持获取配置信息。
部署 TiDB Lightning
本节介绍 TiDB Lightning 的两种部署方式:使用 TiDB Ansible 部署和手动部署。
使用 TiDB Ansible 部署 TiDB Lightning
TiDB Lightning 可随 TiDB 集群一起用 TiDB Ansible 部署。
编辑
inventory.ini
,分别配置一个 IP 来部署tidb-lightning
和tikv-importer
。... [importer_server] 192.168.20.9 [lightning_server] 192.168.20.10 ...
修改
group_vars/*.yml
的变量配置这两个工具。group_vars/all.yml
... # tikv-importer 的监听端口。需对 tidb-lightning 服务器开放。 tikv_importer_port: 8287 ...
group_vars/lightning_server.yml
--- dummy: # 提供监控告警的端口。需对监控服务器 (monitoring_server) 开放。 tidb_lightning_pprof_port: 8289 # 获取数据源(Mydumper SQL dump 或 CSV)的路径。 data_source_dir: "{{ deploy_dir }}/mydumper"
group_vars/importer_server.yml
--- dummy: # 储存引擎文件的路径。需存放在空间足够大的分区。 import_dir: "{{ deploy_dir }}/data.import"
开始部署。
ansible-playbook bootstrap.yml && ansible-playbook deploy.yml
将数据源写入
data_source_dir
指定的路径。登录
tikv-importer
的服务器,并执行以下命令来启动 Importer。scripts/start_importer.sh
登录
tidb-lightning
的服务器,并执行以下命令来启动 Lightning,开始导入过程。scripts/start_lightning.sh
完成后,在
tikv-importer
的服务器执行scripts/stop_importer.sh
来关闭 Importer。
手动部署 TiDB Lightning
第 1 步:部署 TiDB 集群
在开始数据导入之前,需先部署一套要进行导入的 TiDB 集群 (版本要求 2.0.9 以上),建议使用最新版。部署方法可参考 TiDB 快速入门指南。
第 2 步:下载 TiDB Lightning 安装包
在工具下载页面下载 TiDB Lightning 安装包(需选择与 TiDB 集群相同的版本)。
第 3 步:启动 tikv-importer
从安装包上传
bin/tikv-importer
。配置
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.20.10:8287" [metric] # 给 Prometheus 客户端的推送任务名称。 job = "tikv-importer" # 给 Prometheus 客户端的推送间隔。 interval = "15s" # Prometheus Pushgateway 地址。 address = "" [import] # 存储引擎文档 (engine file) 的文件夹路径。 import-dir = "/mnt/ssd/data.import/"
上面仅列出了
tikv-importer
的基本配置。完整配置请参考tikv-importer
配置说明。运行
tikv-importer
。nohup ./tikv-importer -C tikv-importer.toml > nohup.out &
第 4 步:启动 tidb-lightning
从安装包上传
bin/tidb-lightning
及bin/tidb-lightning-ctl
。将数据源写入到同样的机器。
配置
tidb-lightning.toml
。对于没有出现在下述模版中的配置,TiDB Lightning 给出配置错误的提醒并退出。[lightning] # 转换数据的并发数,默认为逻辑 CPU 数量,不需要配置。 # 混合部署的情况下可以配置为逻辑 CPU 的 75% 大小。 # region-concurrency = # 日志 level = "info" file = "tidb-lightning.log" [tikv-importer] # tikv-importer 的监听地址,需改成 tikv-importer 服务器的实际地址。 addr = "172.16.31.10:8287" [mydumper] # Mydumper 源数据目录。 data-source-dir = "/data/my_database" [tidb] # 目标集群的信息。tidb-server 的监听地址,填一个即可。 host = "172.16.31.1" port = 4000 user = "root" password = "" # 表架构信息在从 TiDB 的“状态端口”获取。 status-port = 10080
上面仅列出了
tidb-lightning
的基本配置。完整配置请参考tidb-lightning
配置说明。运行
tidb-lightning
。如果直接在命令行中用nohup
启动程序,可能会因为 SIGHUP 信号而退出,建议把nohup
放到脚本里面,如:#!/bin/bash nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &
升级 TiDB Lightning
你可以通过替换二进制文件升级 TiDB Lightning,无需其他配置。重启 TiDB Lightning 的具体操作参见 FAQ。
如果当前有运行的导入任务,推荐任务完成后再升级 TiDB Lightning。否则,你可能需要从头重新导入,因为无法保证断点可以跨版本工作。