Skip to content

Commit

Permalink
tidb-lightning: add a new doc about compatibility and scenarios (#17481)
Browse files Browse the repository at this point in the history
  • Loading branch information
hfxsd authored Jun 7, 2024
1 parent 0a0772f commit 82c4216
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 1 deletion.
1 change: 1 addition & 0 deletions TOC.md
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,7 @@
- TiDB Lightning
- [概述](/tidb-lightning/tidb-lightning-overview.md)
- [`IMPORT INTO` 和 TiDB Lightning 对比](/tidb-lightning/import-into-vs-tidb-lightning.md)
- [`IMPORT INTO` 和 TiDB Lightning 与日志备份和 TiCDC 的兼容性](/tidb-lightning/tidb-lightning-compatibility-and-scenarios.md)
- [快速上手](/get-started-with-tidb-lightning.md)
- [部署 TiDB Lightning](/tidb-lightning/deploy-tidb-lightning.md)
- [目标数据库要求](/tidb-lightning/tidb-lightning-requirements.md)
Expand Down
2 changes: 1 addition & 1 deletion sql-statements/sql-statement-import-into.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ summary: TiDB 数据库中 IMPORT INTO 的使用概况。

- 只支持导入数据到数据库中已有的空表。
- 不支持事务,也无法回滚。在显式事务 (`BEGIN`/`END`) 中执行会报错。
- 不支持和 [Backup & Restore](/br/backup-and-restore-overview.md)[`FLASHBACK CLUSTER`](/sql-statements/sql-statement-flashback-cluster.md)[创建索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)、TiDB Lightning 导入、TiCDC 数据同步、[Point-in-time recovery (PITR)](/br/br-log-architecture.md) 等功能同时工作。
- 不支持和 [Backup & Restore](/br/backup-and-restore-overview.md)[`FLASHBACK CLUSTER`](/sql-statements/sql-statement-flashback-cluster.md)[创建索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)、TiDB Lightning 导入、TiCDC 数据同步、[Point-in-time recovery (PITR)](/br/br-log-architecture.md) 等功能同时工作。相关兼容性介绍,请参见 [`IMPORT INTO` 和 TiDB Lightning 与日志备份和 TiCDC 的兼容性](/tidb-lightning/tidb-lightning-compatibility-and-scenarios.md)
- 导入数据的过程中,请勿在目标表上执行 DDL 和 DML 操作,也不要在目标数据库上执行 [`FLASHBACK DATABASE`](/sql-statements/sql-statement-flashback-database.md),否则会导致导入失败或数据不一致。导入期间也不建议进行读操作,因为读取的数据可能不一致。请在导入完成后再进行读写操作。
- 导入期间会占用大量系统资源,建议 TiDB 节点使用 32 核以上的 CPU 和 64 GiB 以上内存以获得更好的性能。导入期间会将排序好的数据写入到 TiDB [临时目录](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入)下,建议优先考虑配置闪存等高性能存储介质。详情请参考[物理导入使用限制](/tidb-lightning/tidb-lightning-physical-import-mode.md#必要条件及限制)
- TiDB [临时目录](/tidb-configuration-file.md#temp-dir-从-v630-版本开始引入)至少需要有 90 GiB 的可用空间。建议预留大于等于所需导入数据的存储空间,以保证最佳导入性能。
Expand Down
100 changes: 100 additions & 0 deletions tidb-lightning/tidb-lightning-compatibility-and-scenarios.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
---
title: IMPORT INTO 和 TiDB Lightning 与日志备份和 TiCDC 的兼容性
summary: 了解 IMPORT INTO 和 TiDB Lightning 与日志备份和 TiCDC 的兼容性及使用场景。
---

# IMPORT INTO 和 TiDB Lightning 与日志备份和 TiCDC 的兼容性

本文档介绍 TiDB Lightning 和 [`IMPORT INTO`](/sql-statements/sql-statement-import-into.md)[日志备份](/br/br-pitr-guide.md)[TiCDC](/ticdc/ticdc-overview.md) 的兼容性,以及某些特殊的使用场景。

## `IMPORT INTO` 和 TiDB Lightning 对比

[`IMPORT INTO`](/sql-statements/sql-statement-import-into.md) 目前已经集成了 TiDB Lightning 的物理导入模式,但二者还存在一些差异。详情请参见 [`IMPORT INTO` 和 TiDB Lightning 对比](/tidb-lightning/import-into-vs-tidb-lightning.md)

## 与日志备份和 TiCDC 的兼容性

- TiDB Lightning 的[逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode.md)与日志备份以及 TiCDC 兼容。

- TiDB Lightning 的[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)与日志备份以及 TiCDC 均不兼容。原因是 TiDB Lightning 物理导入模式是将源数据编码后的 KV Pairs 直接 Ingest 到 TiKV,该过程 TiKV 不会产生相应的 Change log,由于没有这部分的 Change log,相关数据无法通过日志备份的方式备份,也无法被 TiCDC 复制。

- `IMPORT INTO` 与日志备份以及 TiCDC 均不兼容。原因是 `IMPORT INTO` 的导入过程也是将源数据编码后的 KV Pairs 直接 Ingest 到 TiKV。

## TiDB Lightning 逻辑导入模式的使用场景

如果 TiDB Lightning 逻辑导入的性能可以满足业务的性能要求,且业务要求 TiDB Lightning 导入的表进行数据备份,或者使用 TiCDC 同步到下游,建议使用 TiDB Lightning 逻辑导入模式。

## TiDB Lightning 物理导入模式的使用场景

本节介绍 TiDB Lightning 物理导入模式与[日志备份](/br/br-pitr-guide.md)[TiCDC](/ticdc/ticdc-overview.md) 同时使用时的操作方法。

如果 TiDB Lightning 逻辑导入的性能无法满足业务的性能要求,且只能使用 TiDB Lightning 物理导入模式的场景,同时这些表还需要备份或者使用 TiCDC 同步到下游,则建议使用以下方案进行处理。

### 和日志备份同时使用

可根据如下不同的场景进行操作:

- 场景 1:物理导入模式的表不需要备份

该场景下,如果开启了 [PITR](/br/br-log-architecture.md#pitr),启动 TiDB Lightning 后兼容性检查会报错。如果你确定这些表不需要备份或者[日志备份](/br/br-pitr-guide.md),你可以把 [TiDB Lightning 配置文件](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置)中的 `Lightning.check-requirements` 参数改成 `false`,然后重新启动导入任务即可。

- 场景 2:物理导入模式导入完成后,该表不会有新的 DML 操作

该场景由于不涉及增量数据写入,因此在 TiDB Lightning 物理导入模式完成数据导入后,对该表执行一次表级别快照备份即可,操作步骤请参考[备份单张表的数据](/br/br-snapshot-manual.md#备份单张表的数据)

在数据恢复时,对该表的快照数据进行恢复,操作步骤请参考[恢复单张表格](/br/br-snapshot-manual.md#恢复单张表的数据)

- 场景 3:物理导入模式导入完成后,该表会执行新的 DML 操作(不支持)

该场景下,对该表的备份操作,只能在执行[全量快照备份](/br/br-snapshot-guide.md)[日志备份](/br/br-pitr-guide.md)之间二选一,无法备份并恢复该表的全量快照数据+日志备份数据。

### 和 TiCDC 同时使用

该场景短期内无法兼容,因为 TiCDC 很难追上 TiDB Lightning 物理导入的写入速度,可能造成集群同步延迟不断增加。

可根据如下不同的场景进行操作:

- 场景 1:该表不需要被 TiCDC 同步到下游。

在该场景下,如果开启了 TiCDC 同步任务,启动 TiDB Lightning 后兼容性检查会报错。如果你确定这些表不需要被 TiCDC 同步,你可以把 [TiDB Lightning 配置文件](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置)中的 `Lightning.check-requirements` 参数改成 `false`,然后重新启动导入任务即可。

- 场景 2:该表需要被 TiCDC 同步到下游。

在该场景下,由于上游 TiDB 集群开启了 TiCDC 同步任务,因此启动 TiDB Lightning 后兼容性检查会报错。你需要在上游 TiDB 集群把 [TiDB Lightning 配置文件](/tidb-lightning/tidb-lightning-configuration.md#tidb-lightning-任务配置)中的 `Lightning.check-requirements` 参数改成 `false`,然后重新启动导入任务即可。

上游 TiDB 集群的导入任务完成后,再使用 TiDB Lightning 在下游 TiDB 集群也导入一份同样的数据。如果下游是 Redshift、Snowflake 等数据库,可直接让这些数据库从 Cloud Storage 读取 CSV、SQL、Parquet 等格式的文件并写入到数据库。

## `IMPORT INTO` 的使用场景

本节介绍 `IMPORT INTO`[日志备份](/br/br-pitr-guide.md)[TiCDC](/ticdc/ticdc-overview.md) 同时使用时的操作方法。

### 和日志备份同时使用

可根据如下不同的场景进行操作:

- 场景 1:导入的表不需要备份

该场景下,如果开启了 [PITR](/br/br-log-architecture.md#pitr),提交 `IMPORT INTO` SQL 语句后兼容性检查会报错。如果你确定这些表不需要备份或者[日志备份](/br/br-pitr-guide.md),你可以在该 SQL 的 [`WithOptions`](/sql-statements/sql-statement-import-into.md#withoptions) 里带上参数 `DISABLE_PRECHECK`(从 v8.0.0 版本引入)重新提交即可,这样数据导入任务会忽略该兼容性检查,直接导入数据。

- 场景 2:导入完成后,该表不会有新的 DML 操作

该场景由于不涉及增量数据写入,因此在完成数据导入后,对该表执行一次表级别快照备份即可,操作步骤请参考[备份单张表的数据](/br/br-snapshot-manual.md#备份单张表的数据)

在数据恢复时,对该表的快照数据进行恢复,操作步骤请参考[恢复单张表格](/br/br-snapshot-manual.md#恢复单张表的数据)

- 场景 3:导入完成后,该表会执行新的 DML 操作(不支持)

该场景下,对该表的备份操作,只能在执行[全量快照备份](/br/br-snapshot-guide.md)[日志备份](/br/br-pitr-guide.md)之间二选一,无法备份并恢复该表的全量快照数据+日志备份数据。

### 和 TiCDC 同时使用

可根据如下不同的场景进行操作:

- 场景 1:该表不需要被 TiCDC 同步到下游。

在该场景下,如果开启了 TiCDC Changefeed,提交 `IMPORT INTO` SQL 语句后兼容性检查会报错。如果你确定这些表不需要被 TiCDC 同步,你可以在该 SQL 的 [`WithOptions`](/sql-statements/sql-statement-import-into.md#withoptions) 里带上参数 `DISABLE_PRECHECK`(从 v8.0.0 版本引入)重新提交即可,这样数据导入任务会忽略该兼容性检查,直接导入数据。

- 场景 2:该表需要被 TiCDC 同步到下游。

在该场景下,如果上游 TiDB 集群开启了 TiCDC 同步任务,提交 `IMPORT INTO` SQL 语句后兼容性检查会报错。你需要在该 SQL 的 [`WithOptions`](/sql-statements/sql-statement-import-into.md#withoptions) 里带上参数 `DISABLE_PRECHECK`(从 v8.0.0 版本引入)重新提交即可。

上游 TiDB 集群的导入任务完成后,再使用 `IMPORT INTO` 在下游 TiDB 集群也导入一份同样的数据。如果下游是 Redshift、Snowflake 等数据库,可直接让这些数据库从 Cloud Storage 读取 CSV、SQL、Parquet 等格式的文件并写入到数据库。

0 comments on commit 82c4216

Please sign in to comment.