Skip to content

Commit

Permalink
This is an automated cherry-pick of pingcap#19047
Browse files Browse the repository at this point in the history
Signed-off-by: ti-chi-bot <[email protected]>
  • Loading branch information
3AceShowHand authored and ti-chi-bot committed Nov 13, 2024
1 parent 67624af commit dc753d3
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 6 deletions.
21 changes: 15 additions & 6 deletions ticdc/ticdc-compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,24 @@ summary: 了解 TiCDC 兼容性相关限制和问题处理。

本文介绍了与 TiCDC 有关的一系列兼容性问题及其处理方案。

<!--
## 组件兼容性矩阵
## TiCDC 与 TiDB Lightning 的兼容性

TODO
[TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md) 支持[逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode.md)[物理导入模式](/tidb-lightning/tidb-lightning-physical-import-mode.md)两种数据导入模式。本章节介绍这两种模式与 TiCDC 的兼容性,以及同时使用 TiDB Lightning 和 TiCDC 时的操作步骤。

## 特性兼容性矩阵
在逻辑导入模式下,TiDB Lightning 通过执行 SQL 语句导入数据。此模式与 TiCDC 兼容。你可以按照以下步骤同时使用 TiDB Lightning 逻辑导入模式和 TiCDC 进行数据同步:

TODO
-->
1. 创建 changefeed,详情参考[创建同步任务](/ticdc/ticdc-manage-changefeed.md#创建同步任务)
2. 启动 TiDB Lightning 并使用逻辑模式模式导入数据,详情参考[使用逻辑导入模式](/tidb-lightning/tidb-lightning-logical-import-mode-usage.md)

在物理导入模式下,TiDB Lightning 通过向 TiKV 插入 SST 文件的方式导入数据。TiCDC 与此模式不兼容,不支持同步通过物理模式导入的数据。如果你需要同时使用 TiDB Lightning 物理导入模式和 TiCDC,可以根据 TiCDC 下游系统的类型选择以下解决方案:

- 下游系统是 TiDB 集群:
1. 使用 TiDB Lightning 分别向上下游 TiDB 集群导入数据,以确保两个集群的数据一致性。
2. 创建 changefeed,用于同步后续通过 SQL 写入的增量数据。详情参考[创建同步任务](/ticdc/ticdc-manage-changefeed.md#创建同步任务)

- 下游系统不是 TiDB 集群:
1. 使用下游系统提供的离线导入工具,将 TiDB Lightning 的输入文件导入到下游系统。
2. 创建 changefeed,用于同步后续通过 SQL 写入的增量数据。详情参考[创建同步任务](/ticdc/ticdc-manage-changefeed.md#创建同步任务)

## 命令行参数和配置文件兼容性

Expand Down
102 changes: 102 additions & 0 deletions tidb-lightning/tidb-lightning-compatibility-and-scenarios.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
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 复制。

- 如果你需要在同一个集群上同时使用 TiDB Lightning 和 TiCDC,请参考 [TiCDC 与 TiDB Lightning 的兼容性](/ticdc/ticdc-compatibility.md#ticdc-与-tidb-lightning-的兼容性)

- `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 dc753d3

Please sign in to comment.