Skip to content

Commit f975217

Browse files
authored
ticdc: update doc about ddl white list (#19151)
1 parent 3b8cb40 commit f975217

File tree

3 files changed

+63
-38
lines changed

3 files changed

+63
-38
lines changed

ticdc/ticdc-changefeed-config.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ Info: {"upstream_id":7178706266519722477,"namespace":"default","id":"simple-repl
4747
- 该配置会同时影响 filter 和 sink 相关配置。
4848
- 默认值:`false`
4949
50+
### `force-replicate`
51+
52+
- 指定是否强制[同步没有有效索引的表](/ticdc/ticdc-manage-changefeed.md#同步没有有效索引的表)。
53+
- 默认值: `false`
54+
5055
### `enable-sync-point` <span class="version-mark">从 v6.3.0 版本开始引入</span>
5156
5257
- 是否开启 Syncpoint 功能,从 v6.3.0 开始支持,该功能默认关闭。

ticdc/ticdc-ddl.md

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -11,38 +11,51 @@ summary: 了解 TiCDC 支持同步的 DDL 和一些特殊情况
1111

1212
目前 TiCDC 在同步 DDL 时使用白名单策略,只有在白名单中的 DDL 操作才会被同步到下游系统,不在白名单中的 DDL 操作将不会被 TiCDC 同步。
1313

14-
以下为 TiCDC 支持同步的 DDL 的列表。
15-
16-
- create database
17-
- drop database
18-
- create table
19-
- drop table
20-
- add column
21-
- drop column
22-
- create index / add index
23-
- drop index
24-
- truncate table
25-
- modify column
26-
- rename table
27-
- alter column default value
28-
- alter table comment
29-
- rename index
30-
- add partition
31-
- drop partition
32-
- truncate partition
33-
- create view
34-
- drop view
35-
- alter table character set
36-
- alter database character set
37-
- recover table
38-
- add primary key
39-
- drop primary key
40-
- rebase auto id
41-
- alter table index visibility
42-
- exchange partition
43-
- reorganize partition
44-
- alter table ttl
45-
- alter table remove ttl
14+
此外,TiCDC 会根据表中是否具有[有效索引](/ticdc/ticdc-overview.md#有效索引)以及配置项 [`force-replicate`](/ticdc/ticdc-changefeed-config.md#force-replicate) 是否为 `true` 来决定是否将 DDL 同步到下游。当 `force-replicate=true` 时,同步任务会尝试强制[同步没有有效索引的表](/ticdc/ticdc-manage-changefeed.md#同步没有有效索引的表)
15+
16+
以下为 TiCDC 支持同步的 DDL 的列表。该表中出现的缩写字母含义如下:
17+
18+
- Y:在该条件下可以同步到下游。
19+
- N:在该条件下不会同步到下游。
20+
21+
> **注意:**
22+
>
23+
> - 当上游表不存在有效索引,且未配置 `force-replicate=true` 时,该表不会被同步,但是之后在该表上创建有效索引的 DDL (`CREATE INDEX``ADD INDEX``ADD PRIMARY KEY`)会被同步,下游表和上游表结构可能产生不一致从而导致后续数据同步失败。
24+
> - 删除最后一个有效索引的 DDL(`DROP INDEX``DROP PRIMARY KEY`)不会被同步,并且导致后续数据同步失败。
25+
26+
| DDL | 存在有效索引 | 无有效索引且 `force-replicate` 为默认值 `false` | 无有效索引且 `force-replicate``true` |
27+
|---|:---:|:---:| :---: |
28+
| `CREATE DATABASE` | Y | Y | Y |
29+
| `DROP DATABASE` | Y | Y | Y |
30+
| `ALTER DATABASE CHARACTER SET` | Y | Y | Y |
31+
| `CREATE INDEX` | Y | Y | Y |
32+
| `ADD INDEX` | Y | Y | Y |
33+
| `DROP INDEX` | Y | N | Y |
34+
| `ADD PRIMARY KEY` | Y | Y | Y |
35+
| `DROP PRIMARY KEY` | Y | N | Y |
36+
| `CREATE TABLE` | Y | N | Y |
37+
| `DROP TABLE` | Y | N | Y |
38+
| `ADD COLUMN` | Y | N | Y |
39+
| `DROP COLUMN` | Y | N | Y |
40+
| `TRUNCATE TABLE` | Y | N | Y |
41+
| `MODIFY COLUMN` | Y | N | Y |
42+
| `RENAME TABLE` | Y | N | Y |
43+
| `ALTER COLUMN DEFAULT VALUE` | Y | N | Y |
44+
| `ALTER TABLE COMMENT` | Y | N | Y |
45+
| `RENAME INDEX` | Y | N | Y |
46+
| `ADD PARTITION` | Y | N | Y |
47+
| `DROP PARTITION` | Y | N | Y |
48+
| `TRUNCATE PARTITION` | Y | N | Y |
49+
| `CREATE VIEW` | Y | N | Y |
50+
| `DROP VIEW` | Y | N | Y |
51+
| `ALTER TABLE CHARACTER SET` | Y | N | Y |
52+
| `RECOVER TABLE` | Y | N | Y |
53+
| `REBASE AUTO ID` | Y | N | Y |
54+
| `ALTER TABLE INDEX VISIBILITY` | Y | N | Y |
55+
| `EXCHANGE PARTITION` | Y | N | Y |
56+
| `REORGANIZE PARTITION` | Y | N | Y |
57+
| `ALTER TABLE TTL` | Y | N | Y |
58+
| `ALTER TABLE REMOVE TTL` | Y | N | Y |
4659

4760
## DDL 同步注意事项
4861

ticdc/ticdc-overview.md

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,23 @@ TiCDC 作为 TiDB 的增量数据同步工具,通过 PD 内部的 etcd 实现
6666

6767
另外,从上面的架构图中也可以看到,目前 TiCDC 支持将数据同步到 TiDB、MySQL 数据库、Kafka 以及存储服务等。
6868

69+
## 有效索引
70+
71+
一般情况,TiCDC 只会同步存在有效索引的表到下游。当表中的索引满足以下条件之一,即为有效索引:
72+
73+
- 主键 (`PRIMARY KEY`) 为有效索引。
74+
- 唯一索引 (`UNIQUE INDEX`) 中每一列在表结构中明确定义为非空 (`NOT NULL`) 且不存在虚拟生成列 (`VIRTUAL GENERATED COLUMNS`)。
75+
76+
> **注意:**
77+
>
78+
> 在设置 [`force-replicate`](/ticdc/ticdc-changefeed-config.md#force-replicate)`true` 后,TiCDC 会强制[同步没有有效索引的表](/ticdc/ticdc-manage-changefeed.md#同步没有有效索引的表)
79+
6980
## 最佳实践
7081

7182
- 使用 TiCDC 在两个 TiDB 集群间同步数据时,如果上下游的延迟超过 100 ms:
7283
- 对于 v6.5.2 之前的版本,推荐将 TiCDC 部署在下游 TiDB 集群所在的区域 (IDC, region)
7384
- 经过优化后,对于 v6.5.2 及之后的版本,推荐将 TiCDC 部署在上游集群所在的区域 (IDC, region)。
74-
- TiCDC 同步的表需要至少存在一个**有效索引**的表,**有效索引**的定义如下:
75-
76-
- 主键 (`PRIMARY KEY`) 为有效索引。
77-
- 唯一索引 (`UNIQUE INDEX`) 中每一列在表结构中明确定义非空 (`NOT NULL`) 且不存在虚拟生成列 (`VIRTUAL GENERATED COLUMNS`)。
78-
85+
- TiCDC 同步的表至少存在一个[有效索引](#有效索引)
7986
- 在使用 TiCDC 实现容灾的场景下,为实现最终一致性,需要配置 [redo log](/ticdc/ticdc-sink-to-mysql.md#灾难场景的最终一致性复制) 并确保 redo log 写入的存储系统在上游发生灾难时可以正常读取。
8087

8188
## TiCDC 处理数据变更的实现原理
@@ -141,4 +148,4 @@ WHERE `A` = 1 OR `A` = 2;
141148
- 在 BR v8.2.0 之前的版本中,当集群存在 TiCDC 同步任务时,BR 不支持进行[数据恢复](/br/backup-and-restore-overview.md)。详情请参考[为什么在上游使用了 TiDB Lightning 和 BR 恢复了数据之后,TiCDC 同步会出现卡顿甚至卡住](/ticdc/ticdc-faq.md#为什么在上游使用了-tidb-lightning-物理导入模式和-br-恢复了数据之后ticdc-同步会出现卡顿甚至卡住)
142149
- 从 BR v8.2.0 起,BR 数据恢复对 TiCDC 的限制被放宽:如果所恢复数据的 BackupTS(即备份时间)早于 Changefeed 的 [CheckpointTS](/ticdc/ticdc-architecture.md#checkpointts)(即记录当前同步进度的时间戳),BR 数据恢复可以正常进行。考虑到 BackupTS 通常较早,此时可以认为绝大部分场景下,当集群存在 TiCDC 同步任务时,BR 都可以进行数据恢复。
143150

144-
对上游存在较大事务的场景提供部分支持,详见 [TiCDC 是否支持同步大事务?有什么风险吗?](/ticdc/ticdc-faq.md#ticdc-支持同步大事务吗有什么风险吗)
151+
对上游存在较大事务的场景提供部分支持,详见 [TiCDC 是否支持同步大事务?有什么风险吗?](/ticdc/ticdc-faq.md#ticdc-支持同步大事务吗有什么风险吗)

0 commit comments

Comments
 (0)