Tidb lightning恢复

Tidb lightning恢复

𝓓𝓸𝓷 Lv6

一、安装Lightning

可以通过下列任意方式获取 Lightning:

  • TiUP 执行 tiup install lightning 命令。获取后,使用 tiup lightning … 命令运行 Lightning。
  • 下载包含 Lightning 的 tidb-toolkit 安装包。
1.使用 TiUP 联网部署(推荐)
1
2
3
4
5
6
7
8
9
10
(1) 执行如下命令安装 TiUP 工具

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
安装完成后,~/.bashrc 已将 TiUP 加入到路径中,你需要新开一个终端或重新声明全局变量 source ~/.bashrc 来使用 TiUP。(也可能是~/.profile,以 TiUP 输出为准。)

如果tiup工具已经安装,则直接进入第(2)步安装Lightning 组件

(2) 安装 TiUP Lightning 组件

tiup install tidb-lightning
2.手动部署
1
2
tar -zxvf tidb-lightning-${version}-linux-amd64.tar.gz
chmod +x tidb-lightning

tidb-toolkit 安装包下载说明:

  1. 访问 TiDB 社区版页面。
  2. 找到 TiDB-community-toolkit 软件包,点击立即下载

注意

  • 点击立即下载后,默认下载当前 TiDB 的最新发布版本。如需下载其它版本,请在 TiDB 社区版页面底部查看其它版本下载信息。
  • 如需在 Kubernetes 上部署运维 TiDB,无需下载 TiDB-community-toolkit 软件包,请参考离线安装 TiDB Operator
  • 如需使用 PD Control 工具 pd-ctl,请下载 TiDB-community-server 软件包

在 TiDB 工具包中,你可以依据要使用的工具,选择安装对应的离线包。

工具 离线包名称
TiUP tiup-linux-{arch}.tar.gz tiup-{tiup-version}-linux-{arch}.tar.gz dm-{tiup-version}-linux-{arch}.tar.gz server-{version}-linux-{arch}.tar.gz
Dumpling dumpling-{version}-linux-{arch}.tar.gz
TiDB Lightning tidb-lightning-ctl tidb-lightning-{version}-linux-{arch}.tar.gz
TiDB DM (Data Migration) dm-worker-{version}-linux-{arch}.tar.gz dm-master-{version}-linux-{arch}.tar.gz dmctl-{version}-linux-{arch}.tar.gz
TiCDC cdc-{version}-linux-{arch}.tar.gz
Backup & Restore (BR) br-{version}-linux-{arch}.tar.gz
sync-diff-inspector sync_diff_inspector
PD Recover pd-recover-{version}-linux-{arch}.tar.gz

注意

以上离线包名称中,{version} 取决于离线包中工具的版本号,{arch} 取决于离线包对应的架构(amd64 或 arm64)。

3.升级 TiDB Lightning

你可以通过替换二进制文件升级 TiDB Lightning,无需其他配置。重启 TiDB Lightning 的具体操作参见 FAQ

如果当前有运行的导入任务,推荐任务完成后再升级 TiDB Lightning。否则,你可能需要从头重新导入,因为无法保证断点可以跨版本工作。

二、Lightning介绍

TiDB Lightning 支持从多种类型的文件导入数据到 TiDB 集群,包括 CSV、SQL、Parquet 文件。

1.Lightning原理介绍

image-20250905163344205

注意:

如何中途导入失败,一定要手工将导入模式切换为普通模式

lightning适合大量新数据需要迅速导入到Tidb数据库中,支持每小时400-500G数据导入

image-20250905164057791

TiDB Lightning 目前支持两种导入方式,通过 backend 配置区分。不同的模式决定 TiDB Lightning 如何将数据导入到目标 TiDB 集群。

  • 物理导入模式:TiDB Lightning 首先将数据编码成键值对并排序存储在本地临时目录,然后将这些键值对上传到各个 TiKV 节点,最后调用 TiKV Ingest 接口将数据插入到 TiKV 的 RocksDB 中。如果用于初始化导入,请优先考虑使用物理导入模式,其拥有较高的导入速度。物理导入模式对应的后端模式为 local
  • 逻辑导入模式:TiDB Lightning 先将数据编码成 SQL,然后直接运行这些 SQL 语句进行数据导入。如果需要导入的集群为生产环境线上集群,或需要导入的目标表中已包含有数据,则应使用逻辑导入模式。逻辑导入模式对应的后端模式为 tidb
导入模式 物理导入模式 逻辑导入模式
后端 local tidb
速度 快 (100 ~ 500 GiB/小时) 慢 (10 ~ 50 GiB/小时)
资源使用率
占用网络带宽
导入时是否满足 ACID
目标表 必须为空 可以不为空
支持 TiDB 集群版本 >= v4.0.0 全部
导入期间是否允许 TiDB 对外提供服务 受限制

注意

以上性能数据用于对比两种模式的导入性能差异,实际导入速度受硬件配置、表结构、索引数量等多方面因素影响。

2.目标数据库权限要求

TiDB Lightning 导入数据时,根据导入方式和启用特性等,需要下游数据库用户具备不同的权限,可参考下表:

特性 作用域 所需权限 备注
必需 基本功能 目标 table CREATE,SELECT,INSERT,UPDATE,DELETE,DROP,ALTER DROP 仅 tidb-lightning-ctl 在执行 checkpoint-destroy-all 时需要
目标 database CREATE
必需 逻辑导入模式 information_schema.columns SELECT
物理导入模式 mysql.tidb SELECT
- SUPER
- RESTRICTED_VARIABLES_ADMIN,RESTRICTED_TABLES_ADMIN 当目标 TiDB 开启 SEM
推荐 冲突检测,max-error lightning.task-info-schema-name 配置的 schema SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 如不需要,该值必须设为””
可选 并行导入 lightning.meta-schema-name 配置的 schema SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 如不需要,该值必须设为””
可选 checkpoint.driver = “mysql” checkpoint.schema 设置 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 使用数据库而非文件形式存放 checkpoint 信息时需要
3.目标数据库空间要求

目标 TiKV 集群必须有足够空间接收新导入的数据。除了标准硬件配置以外,目标 TiKV 集群的总存储空间必须大于 数据源大小 × 副本数量 × 2。例如集群默认使用 3 副本,那么总存储空间需为数据源大小的 6 倍以上。公式中的 2 倍可能难以理解,其依据是以下因素的估算空间占用:

  • 索引会占据额外的空间
  • RocksDB 的空间放大效应

目前无法精确计算 Dumpling 从 MySQL 导出的数据大小,但你可以用下面 SQL 语句统计信息表的 DATA_LENGTH 字段估算数据量:

统计所有 schema 大小,单位 MiB,注意修改 ${schema_name}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- 统计所有 schema 大小
SELECT
TABLE_SCHEMA,
FORMAT_BYTES(SUM(DATA_LENGTH)) AS 'Data Size',
FORMAT_BYTES(SUM(INDEX_LENGTH)) 'Index Size'
FROM
information_schema.tables
GROUP BY
TABLE_SCHEMA;

-- 统计最大的 5 个单表
SELECT
TABLE_NAME,
TABLE_SCHEMA,
FORMAT_BYTES(SUM(data_length)) AS 'Data Size',
FORMAT_BYTES(SUM(index_length)) AS 'Index Size',
FORMAT_BYTES(SUM(data_length+index_length)) AS 'Total Size'
FROM
information_schema.tables
GROUP BY
TABLE_NAME,
TABLE_SCHEMA
ORDER BY
SUM(DATA_LENGTH+INDEX_LENGTH) DESC
LIMIT
5;
4.指定数据源位置
1
2
3
[mydumper]
# 本地源数据目录或 S3 等外部存储 URI。关于外部存储 URI 详情可参考 https://docs.pingcap.com/zh/tidb/dev/backup-and-restore-storages#uri-格式。
data-source-dir = "/data/my_database"

TiDB Lightning 运行时将查找 data-source-dir 中所有符合命令规则的文件。

文件类型 分类 命名规则
Schema 文件 包含 DDL 语句 CREATE TABLE 的文件 ${db_name}.${table_name}-schema.sql
Schema 文件 包含 CREATE DATABASE DDL 语句的文件 ${db_name}-schema-create.sql
数据文件 包含整张表的数据文件,该文件会被导入 ${db_name}.${table_name} `${db_name}.${table_name}.${csv
数据文件 如果一个表分布于多个数据文件,这些文件命名需加上文件编号的后缀 `${db_name}.${table_name}.001.${csv
压缩文件 上述所有类型文件如带压缩文件名后缀,如 gzipsnappyzstd,TiDB Lightning 会流式解压后进行导入。注意 Snappy 压缩文件必须遵循官方 Snappy 格式。不支持其他非官方压缩格式。 `${db_name}.${table_name}.${csv

TiDB Lightning 尽量并行处理数据,由于文件必须顺序读取,所以数据处理协程是文件级别的并发(通过 region-concurrency 配置控制)。因此导入大文件时性能比较差。通常建议单个文件尺寸为 256MiB,以获得最好的性能。

5.表库重命名

TiDB Lightning 运行时会按照数据文件的命名规则将数据导入到相应的数据库和表。如果数据库名或表名发生了变化,你可以先重命名文件,然后再导入,或者使用正则表达式在线替换对象名称。

(1) 批量重命名文件

如果你使用的是 Red Hat Linux 或基于 Red Hat 的 Linux 发行版,可以使用 rename 命令对 data-source-dir 目录下的文件进行批量重命名。例如:

1
rename srcdb. tgtdb. *.sql

修改了文件中的数据库名后,建议删除 data-source-dir 目录下包含 CREATE DATABASE DDL 语句的 ${db_name}-schema-create.sql 文件。如果修改的是表名,还需要修改包含 CREATE TABLE DDL 语句的 ${db_name}.${table_name}-schema.sql 文件中的表名。

(2) 使用正则表达式在线替换名称

要使用正则表达式在线替换名称,你需要在 [[mydumper.files]] 配置中使用 pattern 匹配文件名,将 schematable 换成目标名。具体配置请参考自定义文件匹配

下面是使用正则表达式在线替换名称的示例。其中:

  • 数据文件 pattern 的匹配规则是 '^({schema_regrex})\.({table_regrex})\.({file_serial_regrex})\.(csv|parquet|sql)'
  • schema 可以指定为 '$1',代表第一个正则表达式 schema_regrex 取值不变;schema 也可以指定为一个字符串,如 'tgtdb',代表固定的目标数据库名。
  • table 可以指定为 '$2',代表第二个正则表达式 table_regrex 取值不变;table 也可以指定为一个字符串,如 't1',代表固定的目标表名。
  • type 可以指定为 '$3',代表数据文件类型;type 可以指定为 "table-schema"(代表 schema.sql 文件) 或 "schema-schema"(代表 schema-create.sql 文件)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[mydumper]
data-source-dir = "/some-subdir/some-database/"
[[mydumper.files]]
pattern = '^(srcdb)\.(.*?)-schema-create\.sql'
schema = 'tgtdb'
type = "schema-schema"
[[mydumper.files]]
pattern = '^(srcdb)\.(.*?)-schema\.sql'
schema = 'tgtdb'
table = '$2'
type = "table-schema"
[[mydumper.files]]
pattern = '^(srcdb)\.(.*?)\.(?:[0-9]+)\.(csv|parquet|sql)'
schema = 'tgtdb'
table = '$2'
type = '$3'

如果是使用 gzip 方式备份的数据文件,需要对应地配置压缩格式。数据文件 pattern 的匹配规则是 '^({schema_regrex})\.({table_regrex})\.({file_serial_regrex})\.(csv|parquet|sql)\.(gz)'compression 可以指定为 '$4' 代表是压缩文件格式。示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[mydumper]
data-source-dir = "/some-subdir/some-database/"
[[mydumper.files]]
pattern = '^(srcdb)\.(.*?)-schema-create\.(sql)\.(gz)'
schema = 'tgtdb'
type = "schema-schema"
compression = '$4'
[[mydumper.files]]
pattern = '^(srcdb)\.(.*?)-schema\.(sql)\.(gz)'
schema = 'tgtdb'
table = '$2'
type = "table-schema"
compression = '$4'
[[mydumper.files]]
pattern = '^(srcdb)\.(.*?)\.(?:[0-9]+)\.(sql)\.(gz)'
schema = 'tgtdb'
table = '$2'
type = '$3'
compression = '$4'
6.表库过滤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
命令行过滤表:
tiup tidb-lightning -f 'foo*.*' -f 'bar*.*' -d /tmp/data/ --backend tidb

配置文件过滤表:
[mydumper]
filter = ['foo*.*', 'bar*.*']

使用单独的文件控制:
vim /tmp/filter.txt
employees.*
*.WorkOrder

$ tiup dumpling -f '@/tmp/filter.txt'
等价于:
$ tiup dumpling -f 'employees.*' -f '*.WorkOrder'
7.冲突检测
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[conflict]
# 从 v7.3.0 开始引入的新版冲突数据处理策略。默认值为 ""。从 v8.0.0 开始,TiDB Lightning 优化了物理导入模式和逻辑导入模式的冲突策略。
# - "":不进行冲突数据检测和处理。如果源文件存在主键或唯一键冲突的记录,后续步骤会报错
# - "error":检测到导入的数据存在主键或唯一键冲突的数据时,终止导入并报错
# - "replace":遇到主键或唯一键冲突的数据时,保留最新的数据,覆盖旧的数据。
# 冲突数据将被记录到目标 TiDB 集群中的 `lightning_task_info.conflict_view` 视图中。
# 在 `lightning_task_info.conflict_view` 视图中,如果某行的 `is_precheck_conflict` 字段为 `0`,表示该行记录的冲突数据是通过后置冲突检测发现的;如果某行的 `is_precheck_conflict` 字段为 `1`,表示该行记录的冲突数据是通过前置冲突检测发现的。
# 你可以根据业务需求选择正确的记录重新手动写入到目标表中。注意,该方法要求目标 TiKV 的版本为 v5.2.0 或更新版本。
strategy = ""
# 控制是否开启前置冲突检测,即导入数据到 TiDB 前,先检查所需导入的数据是否存在冲突。该参数默认值为 false,表示仅开启后置冲突检测。取值为 true 时,表示同时开启前置冲突检测和后置冲突检测。冲突记录数量高于 1,000,000 的场景建议配置 `precheck-conflict-before-import = true`,可以提升冲突检测的性能,反之建议关闭。
# precheck-conflict-before-import = false
# threshold = 10000
# 从 v8.1.0 开始,TiDB Lightning 会自动将 `max-record-rows` 的值设置为 `threshold` 的值,并忽略用户输入,因此无需再单独配置 `max-record-rows`。`max-record-rows` 将在未来版本中废弃。
# max-record-rows = 10000
在 v8.0.0 之前的版本中,TiDB Lightning 逻辑导入模式有一套数据冲突处理策略,而物理导入模式有两套数据冲突处理策略,不易理解和配置。

在 v8.0.0 中,TiDB Lightning 废弃了物理导入模式下的旧版冲突检测策略,并以实验特性支持通过 conflict.strategy 参数统一控制逻辑导入和物理导入模式的冲突检测策略,并简化了该参数的配置。此外,在物理导入模式下,当导入遇到主键或唯一键冲突的数据时,replace 策略支持保留最新的数据、覆盖旧的数据。在 v8.1.0 中,以 replace 方式处理冲突数据的功能成为正式功能

TiDB 的冲突处理策略主要通过配置项 conflict.strategy 指定,主要支持以下三种模式:

冲突处理策略
‌默认模式(不处理冲突)‌
当 conflict.strategy 未设置或设置为空时,TiDB 不进行冲突检测,导入过程中遇到主键或唯一键冲突会直接报错。 ‌
1

‌终止导入(error)‌
设置为 error 时,检测到冲突后立即终止导入并报错。 ‌
1

‌跳过错误(skip)‌
设置为 skip 时,系统会跳过冲突数据继续导入,但需配合 conflict.max-record-rows 设置最大记录行数,超过后停止导入。
7.CSV

(1) 表结构

CSV 文件是没有表结构的。要导入 TiDB,就必须为其提供表结构。可以通过以下任一方法实现:

  • 创建包含 DDL 语句的 ${db_name}.${table_name}-schema.sql${db_name}-schema-create.sql
  • 在 TiDB 中手动创建。

(2)配置

CSV 格式可在 tidb-lightning.toml 文件中 [mydumper.csv] 下配置。大部分设置项在 MySQL 的 LOAD DATA 语句中都有对应的选项。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[mydumper.csv]
# 字段分隔符,支持一个或多个字符,默认值为 ','。如果数据中可能有逗号,建议源文件导出时分隔符使用非常见组合字符例如'|+|'。
separator = ','
# 引用定界符,设置为空表示字符串未加引号。
delimiter = '"'
# 行尾定界字符,支持一个或多个字符。设置为空(默认值)表示 "\n"(换行)和 "\r\n" (回车+换行),均表示行尾。
terminator = ""
# CSV 文件是否包含表头。
# 如果为 true,首行将会被跳过,且基于首行映射目标表的列。
header = true
# CSV 是否包含 NULL。
# 如果为 true,CSV 文件的任何列都不能解析为 NULL。
not-null = false
# 如果 `not-null` 为 false(即 CSV 可以包含 NULL),
# 为以下值的字段将会被解析为 NULL。
null = '\N'
# 是否解析字段内的反斜线转义符。
backslash-escape = true
# 是否将 `separator` 字段当作终止符,并移除尾部所有分隔符。
trim-last-separator = false

(3) 不可配置项

TiDB Lightning 并不完全支持 LOAD DATA 语句中的所有配置项。例如:

  • 不可使用行前缀 (LINES STARTING BY)。
  • 不可跳过表头 (IGNORE n LINES)。如有表头,必须是有效的列名。

(4) 启用严格格式

导入文件的大小统一约为 256 MB 时,TiDB Lightning 可达到最佳工作状态。如果导入单个 CSV 大文件,TiDB Lightning 只能使用一个线程来处理,这会降低导入速度。

要解决此问题,可先将 CSV 文件分割为多个文件。对于通用格式的 CSV 文件,在没有读取整个文件的情况下无法快速确定行的开始和结束位置。因此,默认情况下 TiDB Lightning 不会自动分割 CSV 文件。但如果你确定待导入的 CSV 文件符合特定的限制要求,则可以启用 strict-format 设置。启用后,TiDB Lightning 会将单个 CSV 大文件分割为单个大小为 256 MB 的多个文件块进行并行处理。

1
2
[mydumper]
strict-format = true

严格格式的 CSV 文件中,每个字段仅占一行,即必须满足以下条件之一:

  • delimiter 为空;
  • 每个字段不包含 terminator 对应的字符串。在默认配置下,对应每个字段不包含 CR (\r)或 LF(\n)。

如果 CSV 文件不是严格格式但 strict-format 被误设为 true,跨多行的单个完整字段会被分割成两部分,导致解析失败,甚至不报错地导入已损坏的数据。

(5) 常见配置示例

  • CSV

默认设置已按照 RFC 4180 调整。

1
2
3
4
5
6
7
[mydumper.csv]
separator = ',' # 如果数据中可能有逗号,建议源文件导出时分隔符使用非常见组合字符例如'|+|'
delimiter = '"'
header = true
not-null = false
null = '\N'
backslash-escape = true

示例内容:

1
2
3
4
5
ID,Region,Count
1,"East",32
2,"South",\N
3,"West",10
4,"North",39
  • TSV
1
2
3
4
5
6
7
[mydumper.csv]
separator = "\t"
delimiter = ''
header = true
not-null = false
null = 'NULL'
backslash-escape = false

示例内容:

1
2
3
4
5
ID    Region    Count
1 East 32
2 South NULL
3 West 10
4 North 39
  • TPC-H DBGEN
1
2
3
4
5
6
7
[mydumper.csv]
separator = '|'
delimiter = ''
terminator = "|\n"
header = false
not-null = true
backslash-escape = false

示例内容:

1
2
3
4
1|East|32|
2|South|0|
3|West|10|
4|North|39|
8.SQL

TiDB Lightning 在处理 SQL 文件时,由于无法对单个文件进行快速分割,因此无法通过增加并发提高单个文件的导入速度。鉴于此,导出数据为 SQL 文件时应尽量避免单个 SQL 文件过大,通常单文件在 256MiB 左右可以达到最佳性能。

9.压缩文件

TiDB Lightning 目前支持由 Dumpling 导出的压缩文件或满足符合上文命名规则的压缩文件,目前支持 gzipsnappyzstd 压缩算法的压缩文件。在文件名符合命名规则时,TiDB Lightning 会自动识别压缩算法在流式解压后导入,无需额外配置。

注意

  • 由于 TiDB Lightning 无法对单个大压缩文件进行并发解压,因此压缩文件的大小会直接影响导入速度。建议压缩数据文件解压后的源文件大小不超过 256 MiB。
  • TiDB Lightning 仅支持导入各自独立压缩的数据文件,不支持导入多个数据文件组成的单个压缩文件集合包。
  • TiDB Lightning 不支持二次压缩的 parquet 文件,例如 db.table.parquet.snappy。如需压缩 parquet 文件,你可以配置 parquet 文件数据存储的压缩格式。
  • TiDB v6.4.0 及之后版本的 TiDB Lightning 支持后缀为压缩算法 gzipsnappyzstd 的数据文件。其他后缀名会报错。你可以将不支持的文件移出导入数据目录来避免此类错误。 Snappy 压缩文件必须遵循官方 Snappy 格式。不支持其他非官方压缩格式。

三、Lightning恢复

https://docs.pingcap.com/zh/tidb/v7.5/tidb-lightning-configuration/

1.源库与目标库数据库名不同,表名相同(CSV格式)

将源库mydb的表t、t1、t2恢复到目标库test, 若在导入过程中检测到冲突数据,则可以查询 lightning_task_info.conflict_error_v3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
(1) 备份
DATE=`date +%Y%m%d`
tiup dumpling -u root -h 192.168.1.181 -P 4000 --filetype csv -o /backup/tidb/dumpling/$DATE -t 10 -r 20000 -F 256MiB -p 123456 > /tmp/dumpling_full_${DATE}.log

(2) 查看备份
[tidb@monitor 20250905]$ ll
total 32
-rw-r--r-- 1 tidb admin 146 Sep 5 16:15 metadata
-rw-r--r-- 1 tidb admin 132 Sep 5 16:15 mydb-schema-create.sql
-rw-r--r-- 1 tidb admin 37 Sep 5 16:15 mydb.t1.0000000010000.csv
-rw-r--r-- 1 tidb admin 210 Sep 5 16:15 mydb.t1-schema.sql
-rw-r--r-- 1 tidb admin 15 Sep 5 16:15 mydb.t2.0000000010000.csv
-rw-r--r-- 1 tidb admin 175 Sep 5 16:15 mydb.t2-schema.sql
-rw-r--r-- 1 tidb admin 174 Sep 5 16:15 mydb.t-schema.sql
-rw-r--r-- 1 tidb admin 132 Sep 5 16:15 test-schema-create.sql


mysql> select * from mydb.t1;
+------+--------+
| id | name |
+------+--------+
| 1 | 张三 |
| 2 | 陈明 |
+------+--------+
2 rows in set (0.01 sec)

(3) 处理库名或表名
如果数据库名或表名发生了变化,你可以先重命名文件,然后再导入,或者使用正则表达式在线替换对象名称。
Linux系统: rename srcdb. tgtdb. *.sql

[tidb@monitor 20250905]$ rename mydb. test. *.sql
[tidb@monitor 20250905]$ rename mydb. test. *.csv

[tidb@monitor 20250905]$ ll
total 32
-rw-r--r-- 1 tidb admin 146 Sep 5 16:15 metadata
-rw-r--r-- 1 tidb admin 132 Sep 5 16:15 mydb-schema-create.sql
-rw-r--r-- 1 tidb admin 132 Sep 5 16:15 test-schema-create.sql
-rw-r--r-- 1 tidb admin 37 Sep 5 16:15 test.t1.0000000010000.csv
-rw-r--r-- 1 tidb admin 210 Sep 5 16:15 test.t1-schema.sql
-rw-r--r-- 1 tidb admin 15 Sep 5 16:15 test.t2.0000000010000.csv
-rw-r--r-- 1 tidb admin 175 Sep 5 16:15 test.t2-schema.sql
-rw-r--r-- 1 tidb admin 174 Sep 5 16:15 test.t-schema.sql

[tidb@monitor 20250905]$ rm -rf mydb-schema-create.sql

[tidb@monitor 20250905]$ ll
total 28
-rw-r--r-- 1 tidb admin 146 Sep 5 16:15 metadata
-rw-r--r-- 1 tidb admin 132 Sep 5 16:15 test-schema-create.sql
-rw-r--r-- 1 tidb admin 37 Sep 5 16:15 test.t1.0000000010000.csv
-rw-r--r-- 1 tidb admin 210 Sep 5 16:15 test.t1-schema.sql
-rw-r--r-- 1 tidb admin 15 Sep 5 16:15 test.t2.0000000010000.csv
-rw-r--r-- 1 tidb admin 175 Sep 5 16:15 test.t2-schema.sql
-rw-r--r-- 1 tidb admin 174 Sep 5 16:15 test.t-schema.sql


修改了文件中的数据库名后,建议删除 data-source-dir 目录下包含 CREATE DATABASE DDL 语句的 ${db_name}-schema-create.sql 文件。如果修改的是表名,还需要修改包含 CREATE TABLE DDL 语句的 ${db_name}.${table_name}-schema.sql 文件中的表名。


(4) 创建toml配置文件

[tidb@monitor ~]$ vi tidb-lightning-csv.toml

[lightning]
# region-concurrency =
level = "info"
file = "tidb-lightning.log"

[tikv-importer]
backend = "local"
sorted-kv-dir = "/tmp/lightning_sorted_dir"

[mydumper]
data-source-dir = "/backup/tidb/dumpling/20250905"
filter = ['test.*']
no-schema = true

[tidb]
host = "192.168.1.181"
port = 4000
user = "root"
password = "123456"
status-port = 10080
pd-addr = "192.168.1.183:2379"

[checkpoint]
enable =true
driver = "file"
dsn = "/tmp/tidb_lightning_checkpoint.pb"
keep-after-success = false

[mydumper.csv]
separator = ','
delimiter = '"'
terminator = ""
header = false
not-null = false
null = '\N'
backslash-escape = true
trim-last-separator = false


(5) 导入
[tidb@monitor ~]$ tiup tidb-lightning -config tidb-lightning.toml
Starting component tidb-lightning: /home/tidb/.tiup/components/tidb-lightning/v8.5.3/tidb-lightning -config tidb-lightning.toml
Verbose debug logs will be written to tidb-lightning.log

+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| # | CHECK ITEM | TYPE | PASSED |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 1 | Source data files size is proper | performance | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 2 | the checkpoints are valid | critical | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 3 | table schemas are valid | critical | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 4 | all importing tables on the target are empty | critical | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 5 | source csv files contains header row but `mydumper.csv.header` is false, checked table is `test`.`t2` | critical | false |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 6 | Cluster version check passed | critical | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 7 | Lightning has the correct storage permission | critical | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 8 | local source dir and temp-kv dir are in different disks | performance | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 9 | local disk resources are rich, estimate sorted data size 17B, local available is 27.66GiB | critical | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 10 | The storage space is rich, which TiKV/Tiflash is 135.3GiB/0B. The estimated storage space is 51B/0B. | performance | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 11 | Cluster doesn't have too many empty regions | performance | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 12 | Cluster region distribution is balanced | performance | true |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+
| 13 | found PiTR log streaming task(s): [pitr], | critical | false |
| | local backend is not compatible with them. Please switch to tidb backend then try again. | | |
+----+-------------------------------------------------------------------------------------------------------+-------------+--------+

tidb lightning encountered error: [Lightning:PreCheck:ErrPreCheckFailed]tidb-lightning pre-check failed: source csv files contains header row but `mydumper.csv.header` is false, checked table is `test`.`t2`;
found PiTR log streaming task(s): [pitr],
local backend is not compatible with them. Please switch to tidb backend then try again.

检查 test.t2.0000000010000.csv,发现有表头ID
[tidb@monitor 20250905]$ more test.t2.0000000010000.csv
"id"
1
2
3

将mydumper.csv中的参数header修改为 true,重新导入
[mydumper.csv]
header = true

由于tidb启用了pitr日志,故导入需要将tikv-importer参数backend = "local"设置为tidb
found PiTR log streaming task(s): [pitr]

[tidb@monitor ~]$ tiup tidb-lightning -config tidb-lightning.toml
Starting component tidb-lightning: /home/tidb/.tiup/components/tidb-lightning/v8.5.3/tidb-lightning -config tidb-lightning.toml
Verbose debug logs will be written to tidb-lightning.log

+---+----------------------------------------------+-------------+--------+
| # | CHECK ITEM | TYPE | PASSED |
+---+----------------------------------------------+-------------+--------+
| 1 | Source data files size is proper | performance | true |
+---+----------------------------------------------+-------------+--------+
| 2 | the checkpoints are valid | critical | true |
+---+----------------------------------------------+-------------+--------+
| 3 | Cluster version check passed | critical | true |
+---+----------------------------------------------+-------------+--------+
| 4 | Lightning has the correct storage permission | critical | true |
+---+----------------------------------------------+-------------+--------+

tidb lightning exit successfully


(6) 验证
mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t |
| t1 |
| t2 |
+----------------+
3 rows in set (0.00 sec)

mysql> select * from t1;
+------+--------+
| id | name |
+------+--------+
| 1 | 张三 |
| 2 | 陈明 |
+------+--------+
2 rows in set (0.00 sec)
2.源库与目标库数据库名相同,表名不相同(SQL格式)

将源库mydb的表t1恢复到源库mydb下的t100表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
(1) 备份
DATE=`date +%Y%m%d`
tiup dumpling -u root -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling/$DATE -t 10 -r 20000 -F 256MiB -p 123456 > /tmp/dumpling_full_${DATE}.log


(2) 查看备份
[tidb@monitor 20250909]$ ll
total 60
-rw-r--r-- 1 tidb admin 681 Sep 9 09:59 lightning_task_info.conflict_records_v2-schema.sql
-rw-r--r-- 1 tidb admin 147 Sep 9 09:59 lightning_task_info-schema-create.sql
-rw-r--r-- 1 tidb admin 146 Sep 9 09:59 metadata
-rw-r--r-- 1 tidb admin 132 Sep 9 09:59 mydb-schema-create.sql
-rw-r--r-- 1 tidb admin 118 Sep 9 09:59 mydb.t1.0000000010000.sql
-rw-r--r-- 1 tidb admin 210 Sep 9 09:59 mydb.t1-schema.sql
-rw-r--r-- 1 tidb admin 105 Sep 9 09:59 mydb.t2.0000000010000.sql
-rw-r--r-- 1 tidb admin 175 Sep 9 09:59 mydb.t2-schema.sql
-rw-r--r-- 1 tidb admin 174 Sep 9 09:59 mydb.t-schema.sql
-rw-r--r-- 1 tidb admin 132 Sep 9 09:59 test-schema-create.sql
-rw-r--r-- 1 tidb admin 118 Sep 9 09:59 test.t1.0000000010000.sql
-rw-r--r-- 1 tidb admin 210 Sep 9 09:59 test.t1-schema.sql
-rw-r--r-- 1 tidb admin 105 Sep 9 09:59 test.t2.0000000010000.sql
-rw-r--r-- 1 tidb admin 175 Sep 9 09:59 test.t2-schema.sql
-rw-r--r-- 1 tidb admin 174 Sep 9 09:59 test.t-schema.sql


mysql> select * from mydb.t1;
+------+--------+
| id | name |
+------+--------+
| 1 | 张三 |
| 2 | 陈明 |
+------+--------+
2 rows in set (0.01 sec)

(3) 处理库名或表名
如果数据库名或表名发生了变化,你可以先重命名文件,然后再导入,或者使用正则表达式在线替换对象名称。
Linux系统: rename srcdb. tgtdb. *.sql

[tidb@monitor 20250909]$ rename mydb.t1 mydb.t100 *.sql
[tidb@monitor 20250909]$ rm -rf mydb-schema-create.sql

[tidb@monitor 20250909]$ more mydb.t100-schema.sql
/*!40014 SET FOREIGN_KEY_CHECKS=0*/;
/*!40101 SET NAMES binary*/;
CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

[tidb@monitor 20250909]$ sed -i 's/CREATE TABLE `t1`/CREATE TABLE `t100`/g' mydb.t100-schema.sql
[tidb@monitor 20250909]$ more mydb.t100-schema.sql
/*!40014 SET FOREIGN_KEY_CHECKS=0*/;
/*!40101 SET NAMES binary*/;
CREATE TABLE `t100` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;


修改了文件中的数据库名后,建议删除 data-source-dir 目录下包含 CREATE DATABASE DDL 语句的 ${db_name}-schema-create.sql 文件。如果修改的是表名,还需要修改包含 CREATE TABLE DDL 语句的 ${db_name}.${table_name}-schema.sql 文件中的表名。

[tidb@monitor 20250909]$ ll
total 56
-rw-r--r-- 1 tidb admin 681 Sep 9 09:59 lightning_task_info.conflict_records_v2-schema.sql
-rw-r--r-- 1 tidb admin 147 Sep 9 09:59 lightning_task_info-schema-create.sql
-rw-r--r-- 1 tidb admin 146 Sep 9 09:59 metadata
-rw-r--r-- 1 tidb admin 118 Sep 9 09:59 mydb.t100.0000000010000.sql
-rw-r--r-- 1 tidb admin 212 Sep 9 10:18 mydb.t100-schema.sql
-rw-r--r-- 1 tidb admin 105 Sep 9 09:59 mydb.t2.0000000010000.sql
-rw-r--r-- 1 tidb admin 175 Sep 9 09:59 mydb.t2-schema.sql
-rw-r--r-- 1 tidb admin 174 Sep 9 09:59 mydb.t-schema.sql
-rw-r--r-- 1 tidb admin 132 Sep 9 09:59 test-schema-create.sql
-rw-r--r-- 1 tidb admin 118 Sep 9 09:59 test.t1.0000000010000.sql
-rw-r--r-- 1 tidb admin 210 Sep 9 09:59 test.t1-schema.sql
-rw-r--r-- 1 tidb admin 105 Sep 9 09:59 test.t2.0000000010000.sql
-rw-r--r-- 1 tidb admin 175 Sep 9 09:59 test.t2-schema.sql
-rw-r--r-- 1 tidb admin 174 Sep 9 09:59 test.t-schema.sql


(4) 创建toml配置文件

[tidb@monitor ~]$ vi tidb-lightning-sql.toml

[lightning]
# region-concurrency =
level = "info"
file = "tidb-lightning.log"

[tikv-importer]
backend = "tidb"

[mydumper]
data-source-dir = "/backup/tidb/dumpling/20250909"
filter = ['mydb.t100']
no-schema = true

[tidb]
host = "192.168.1.181"
port = 4000
user = "root"
password = "123456"
status-port = 10080
pd-addr = "192.168.1.183:2379"

[checkpoint]
enable =true
driver = "file"
dsn = "/tmp/tidb_lightning_checkpoint.pb"
keep-after-success = false


(5) 导入
[tidb@monitor ~]$ tiup tidb-lightning -config tidb-lightning-sql.toml
Starting component tidb-lightning: /home/tidb/.tiup/components/tidb-lightning/v8.5.3/tidb-lightning -config tidb-lightning-sql.toml
Verbose debug logs will be written to tidb-lightning.log

+---+----------------------------------------------+-------------+--------+
| # | CHECK ITEM | TYPE | PASSED |
+---+----------------------------------------------+-------------+--------+
| 1 | Source data files size is proper | performance | true |
+---+----------------------------------------------+-------------+--------+
| 2 | the checkpoints are valid | critical | true |
+---+----------------------------------------------+-------------+--------+
| 3 | Cluster version check passed | critical | true |
+---+----------------------------------------------+-------------+--------+
| 4 | Lightning has the correct storage permission | critical | true |
+---+----------------------------------------------+-------------+--------+

tidb lightning exit successfully


(6) 验证
mysql> use mydb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| t |
| t1 |
| t100 |
| t2 |
+----------------+
4 rows in set (0.00 sec)

mysql> select * from t100;
+------+--------+
| id | name |
+------+--------+
| 1 | 张三 |
| 2 | 陈明 |
+------+--------+
2 rows in set (0.00 sec)

3.源库与目标库数据库名和表名均相同(压缩全库恢复)
  • 使用物理恢复(backend=local),数据库中的表必须为空
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
(1) 备份
DATE=`date +%Y%m%d`
tiup dumpling -u root -h 192.168.1.181 -P 4000 --filetype sql -c gzip -o /backup/tidb/dumpling/$DATE -t 10 -r 20000 -F 256MiB -p 123456 > /tmp/dumpling_full_${DATE}.log

(2) 查看备份
[tidb@monitor 20250909]$ ll
total 72
-rw-r--r-- 1 tidb admin 393 Sep 9 16:54 lightning_task_info.conflict_records_v2-schema.sql.gz
-rw-r--r-- 1 tidb admin 150 Sep 9 16:54 lightning_task_info-schema-create.sql.gz
-rw-r--r-- 1 tidb admin 146 Sep 9 16:54 metadata
-rw-r--r-- 1 tidb admin 137 Sep 9 16:54 mydb-schema-create.sql.gz
-rw-r--r-- 1 tidb admin 143 Sep 9 16:54 mydb.t1.0000000010000.sql.gz
-rw-r--r-- 1 tidb admin 186 Sep 9 16:54 mydb.t1-schema.sql.gz
-rw-r--r-- 1 tidb admin 130 Sep 9 16:54 mydb.t2.0000000010000.sql.gz
-rw-r--r-- 1 tidb admin 168 Sep 9 16:54 mydb.t2-schema.sql.gz
-rw-r--r-- 1 tidb admin 167 Sep 9 16:54 mydb.t-schema.sql.gz
-rw-r--r-- 1 tidb admin 137 Sep 9 16:54 orcl-schema-create.sql.gz
-rw-r--r-- 1 tidb admin 145 Sep 9 16:54 orcl.t200.0000000010000.sql.gz
-rw-r--r-- 1 tidb admin 187 Sep 9 16:54 orcl.t200-schema.sql.gz
-rw-r--r-- 1 tidb admin 137 Sep 9 16:54 test-schema-create.sql.gz
-rw-r--r-- 1 tidb admin 143 Sep 9 16:54 test.t1.0000000010000.sql.gz
-rw-r--r-- 1 tidb admin 186 Sep 9 16:54 test.t1-schema.sql.gz
-rw-r--r-- 1 tidb admin 118 Sep 9 16:54 test.t2.0000000010000.sql.gz
-rw-r--r-- 1 tidb admin 168 Sep 9 16:54 test.t2-schema.sql.gz
-rw-r--r-- 1 tidb admin 167 Sep 9 16:54 test.t-schema.sql.gz

mysql> select * from mydb.t1;
+------+--------+
| id | name |
+------+--------+
| 1 | 张三 |
| 2 | 陈明 |
+------+--------+
2 rows in set (0.01 sec)


(3) 创建toml配置文件
[tidb@monitor ~]$ vi tidb-lightning-sql-gzip.toml

[lightning]
level = "info"
file = "tidb-lightning.log"

[tikv-importer]
backend = "local"
sorted-kv-dir = "/tmp/lightning_sorted_dir"

[mydumper]
data-source-dir = "/backup/tidb/dumpling/20250909"
filter = ['*.*', '!mysql.*', '!sys.*', '!INFORMATION_SCHEMA.*', '!PERFORMANCE_SCHEMA.*', '!METRICS_SCHEMA.*', '!INSPECTION_SCHEMA.*']
no-schema = true

[conflict]
strategy = "replace"
# 注意: replace只是针对主键会替换旧行记录,如果没有主键,则会插入重复的记录

[tidb]
host = "192.168.1.181"
port = 4000
user = "root"
password = "239131"
status-port = 10080
pd-addr = "192.168.1.183:2379"

[checkpoint]
enable =true
driver = "file"
dsn = "/tmp/tidb_lightning_checkpoint.pb"
keep-after-success = false

[post-restore]
checksum = "required"


(5) 模拟目标数据修改

mysql> use mydb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| t |
| t1 |
| t2 |
+----------------+
3 rows in set (0.00 sec)

mysql> select * from t;
Empty set (0.01 sec)

mysql> select * from t1;
+------+--------+
| id | name |
+------+--------+
| 1 | 张三 |
| 2 | 陈明 |
+------+--------+
2 rows in set (0.01 sec)

mysql> insert into t1 values (3,'刘敏');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1;
+------+--------+
| id | name |
+------+--------+
| 1 | 张三 |
| 2 | 陈明 |
| 3 | 刘敏 |
+------+--------+
3 rows in set (0.01 sec)


(5) 导入
[tidb@monitor ~]$ tiup tidb-lightning -config tidb-lightning-sql-gzip.toml

  • 使用逻辑恢复(backend=tidb),数据库中的表可以为空也可以不为空
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

[tidb@monitor ~]$ vi tidb-lightning-sql-gzip.toml

[lightning]
level = "info"
file = "tidb-lightning.log"

[tikv-importer]
backend = "tidb"

[mydumper]
data-source-dir = "/backup/tidb/dumpling/20250909"
filter = ['*.*', '!mysql.*', '!sys.*', '!INFORMATION_SCHEMA.*', '!PERFORMANCE_SCHEMA.*', '!METRICS_SCHEMA.*', '!INSPECTION_SCHEMA.*']
no-schema = true

[conflict]
strategy = "replace"
# 注意: replace只是针对主键会替换旧行记录,如果没有主键,则会插入重复的记录

[tidb]
host = "192.168.1.181"
port = 4000
user = "root"
password = "239131"
status-port = 10080
pd-addr = "192.168.1.183:2379"

[checkpoint]
enable =true
driver = "file"
dsn = "/tmp/tidb_lightning_checkpoint.pb"
keep-after-success = false

[post-restore]
checksum = "required"


(5) 导入
[tidb@monitor ~]$ tiup tidb-lightning -config tidb-lightning-sql-gzip.toml

4.源库和目标库库名不相同,表名不相同(在线替换名称)

将源库mydb的表t1恢复到目标库orcl库t200表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
(1) 备份t1表
[tidb@monitor 20250909]$ tiup dumpling -u root -h 192.168.1.181 -P 4000 --filetype sql -o /backup/tidb/dumpling/$DATE -t 10 -r 20000 -f mydb.t1 -F 256MiB -p 123456 > /tmp/dumpling_full_${DATE}.log

(2) 查看备份
[tidb@monitor 20250909]$ ll
total 16
-rw-r--r-- 1 tidb admin 146 Sep 9 11:29 metadata
-rw-r--r-- 1 tidb admin 132 Sep 9 11:29 mydb-schema-create.sql
-rw-r--r-- 1 tidb admin 118 Sep 9 11:29 mydb.t1.0000000010000.sql
-rw-r--r-- 1 tidb admin 210 Sep 9 11:29 mydb.t1-schema.sql

(3) 创建toml配置文件

[tidb@monitor ~]$ vi tidb-lightning-sql-replace.toml

[lightning]
# region-concurrency =
level = "info"
file = "tidb-lightning.log"

[tikv-importer]
backend = "tidb"

[mydumper]
data-source-dir = "/backup/tidb/dumpling/20250909"
no-schema = true

[[mydumper.files]]
pattern = '^(mydb)\.(.*?)-schema-create\.sql'
schema = 'orcl'
type = "schema-schema"

[[mydumper.files]]
pattern = '^(mydb)\.(.*?)-schema\.sql'
schema = 'orcl'
table = 't200'
type = "table-schema"

[[mydumper.files]]
pattern = '^(mydb)\.(.*?)\.(?:[0-9]+)\.(csv|parquet|sql)'
schema = 'orcl'
table = 't200'
type = '$3'

# schema、table 、type分别可以使用$1、$2、$3代替

[tidb]
host = "192.168.1.181"
port = 4000
user = "root"
password = "123456"
status-port = 10080
pd-addr = "192.168.1.183:2379"

[checkpoint]
enable =true
driver = "file"
dsn = "/tmp/tidb_lightning_checkpoint.pb"
keep-after-success = false


# 如果dumpling导出的数据压缩过,则toml在线替换需配置压缩文件名


(4) 导入
[tidb@monitor ~]$ tiup tidb-lightning -config tidb-lightning-sql-replace.toml
Starting component tidb-lightning: /home/tidb/.tiup/components/tidb-lightning/v8.5.3/tidb-lightning -config tidb-lightning-sql-replace.toml
Verbose debug logs will be written to tidb-lightning.log

+---+----------------------------------------------+-------------+--------+
| # | CHECK ITEM | TYPE | PASSED |
+---+----------------------------------------------+-------------+--------+
| 1 | Source data files size is proper | performance | true |
+---+----------------------------------------------+-------------+--------+
| 2 | the checkpoints are valid | critical | true |
+---+----------------------------------------------+-------------+--------+
| 3 | Cluster version check passed | critical | true |
+---+----------------------------------------------+-------------+--------+
| 4 | Lightning has the correct storage permission | critical | true |
+---+----------------------------------------------+-------------+--------+

tidb lightning exit successfully

(5) 校验
mysql> use orcl
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>
mysql> show tables;
+----------------+
| Tables_in_orcl |
+----------------+
| t200 |
+----------------+
1 row in set (0.00 sec)

mysql> select * from t200;
+------+--------+
| id | name |
+------+--------+
| 1 | 张三 |
| 2 | 陈明 |
+------+--------+
2 rows in set (0.01 sec)
  • Title: Tidb lightning恢复
  • Author: 𝓓𝓸𝓷
  • Created at : 2025-09-10 09:18:29
  • Updated at : 2025-09-10 11:58:07
  • Link: https://www.zhangdong.me/tidb-lightning.html
  • License: This work is licensed under CC BY-NC-SA 4.0.
评论