From 82c421646a3971126374ae3a4a8c123feb703161 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Fri, 7 Jun 2024 18:11:58 +0800 Subject: [PATCH] tidb-lightning: add a new doc about compatibility and scenarios (#17481) --- TOC.md | 1 + sql-statements/sql-statement-import-into.md | 2 +- ...b-lightning-compatibility-and-scenarios.md | 100 ++++++++++++++++++ 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 tidb-lightning/tidb-lightning-compatibility-and-scenarios.md diff --git a/TOC.md b/TOC.md index d41bfdc673ab..0855d682f19c 100644 --- a/TOC.md +++ b/TOC.md @@ -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) diff --git a/sql-statements/sql-statement-import-into.md b/sql-statements/sql-statement-import-into.md index 827943e41f7d..51e4f90e6b27 100644 --- a/sql-statements/sql-statement-import-into.md +++ b/sql-statements/sql-statement-import-into.md @@ -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 的可用空间。建议预留大于等于所需导入数据的存储空间,以保证最佳导入性能。 diff --git a/tidb-lightning/tidb-lightning-compatibility-and-scenarios.md b/tidb-lightning/tidb-lightning-compatibility-and-scenarios.md new file mode 100644 index 000000000000..362d27e45fcd --- /dev/null +++ b/tidb-lightning/tidb-lightning-compatibility-and-scenarios.md @@ -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 等格式的文件并写入到数据库。