From f15e323e53a42b55e1ec5e2a094779cf8f23cdfa Mon Sep 17 00:00:00 2001 From: dongmen <414110582@qq.com> Date: Thu, 2 Nov 2023 13:38:49 +0800 Subject: [PATCH 1/6] add ticdc sql mode config --- ticdc/ticdc-changefeed-config.md | 4 ++++ ticdc/ticdc-ddl.md | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index 639608bbb310..1ea2940a6c48 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -65,6 +65,10 @@ enable-old-value = true # 注意:该参数只有当下游为 TiDB 时,才会生效。 # sync-point-retention = "1h" +# 设置解析 DDL 时使用的 SQL 模式,多个模式之间用逗号分隔 +# 默认值和 TiDB 的默认 SQL 模式一致 +# sql-mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + [mounter] # mounter 解码 KV 数据的线程数,默认值为 16 # worker-num = 16 diff --git a/ticdc/ticdc-ddl.md b/ticdc/ticdc-ddl.md index b0329e503ecc..a4e9b5f28324 100644 --- a/ticdc/ticdc-ddl.md +++ b/ticdc/ticdc-ddl.md @@ -88,3 +88,26 @@ rules = ['test.t*'] | `RENAME TABLE test.t1 TO test.ignore1, test.t3 TO test.ignore2` | 同步 | 旧的表库名,新的库名都符合 filter 规则 | | `RENAME TABLE test.t1 TO ignore.t1, test.t2 TO test.t22;` | 报错 | 新的库名 ignore 不符合 filter 规则 | | `RENAME TABLE test.t1 TO test.t4, test.t3 TO test.t1, test.t4 TO test.t3;` | 报错 | 在一条 DDL 中交换 test.t1 和 test.t3 两个表的名字,TiCDC 无法正确处理。请参考错误提示提示信息处理。 | + +### SQL 模式 + +TiCDC 默认采用 TiDB 的默认 SQL 模式来解析 DDL,如果你的上游 TiDB 集群使用了非默认的 SQL 模式,你需要在 TiCDC 的配置文件中指定 SQL 模式,否则 TiCDC 可能无法正确解析 DDL。关于 TiDB SQL 模式的更多信息,请参考 [SQL 模式](https://docs.pingcap.com/zh/tidb/stable/sql-mode/)。 + +例如,如果你的上游 TiDB 集群设置了 `ANSI_QUOTES` 模式,你需要在 changefeed 的配置文件中指定 SQL 模式: + +```toml +# 其中,前面的 "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 是 TiDB 默认的 SQL 模式 +# 后面的 "ANSI_QUOTES" 是你的上游 TiDB 集群添加的 SQL 模式 + +sql-mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES" +``` + +如果你未设置,那么 TiCDC 可能无法正确解析一些 DDL,例如: + +```sql +CREATE TABLE "t1" ("a" int PRIMARY KEY); +``` + +因为在 TiDB 的默认 SQL 模式下,双引号会被视为字符串而不是标志符,这将会导致 TiCDC 无法正确解析该 DDL。 + +因此,建议你在创建同步任务的时候,在配置文件中指定使用上游 TiDB 集群使用的 SQL 模式。 \ No newline at end of file From 745b0eb636d7198e4b1c96037ad91b7d0c3e688f Mon Sep 17 00:00:00 2001 From: Ran Date: Tue, 7 Nov 2023 10:15:51 +0800 Subject: [PATCH 2/6] Apply suggestions from code review --- ticdc/ticdc-ddl.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ticdc/ticdc-ddl.md b/ticdc/ticdc-ddl.md index a4e9b5f28324..6239df3a0c39 100644 --- a/ticdc/ticdc-ddl.md +++ b/ticdc/ticdc-ddl.md @@ -91,7 +91,7 @@ rules = ['test.t*'] ### SQL 模式 -TiCDC 默认采用 TiDB 的默认 SQL 模式来解析 DDL,如果你的上游 TiDB 集群使用了非默认的 SQL 模式,你需要在 TiCDC 的配置文件中指定 SQL 模式,否则 TiCDC 可能无法正确解析 DDL。关于 TiDB SQL 模式的更多信息,请参考 [SQL 模式](https://docs.pingcap.com/zh/tidb/stable/sql-mode/)。 +TiCDC 默认采用 TiDB 的默认 SQL 模式来解析 DDL 语句。如果你的上游 TiDB 集群使用了非默认的 SQL 模式,你需要在 TiCDC 的配置文件中指定 SQL 模式,否则 TiCDC 可能无法正确解析 DDL。关于 TiDB SQL 模式的更多信息,请参考 [SQL 模式](/sql-mode.md)。 例如,如果你的上游 TiDB 集群设置了 `ANSI_QUOTES` 模式,你需要在 changefeed 的配置文件中指定 SQL 模式: @@ -102,12 +102,12 @@ TiCDC 默认采用 TiDB 的默认 SQL 模式来解析 DDL,如果你的上游 T sql-mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES" ``` -如果你未设置,那么 TiCDC 可能无法正确解析一些 DDL,例如: +如果未设置 SQL 模式,那么 TiCDC 可能无法正确解析一些 DDL 语句,例如: ```sql CREATE TABLE "t1" ("a" int PRIMARY KEY); ``` -因为在 TiDB 的默认 SQL 模式下,双引号会被视为字符串而不是标志符,这将会导致 TiCDC 无法正确解析该 DDL。 +因为在 TiDB 的默认 SQL 模式下,双引号会被视为字符串而不是标志符,这将会导致 TiCDC 无法正确解析该 DDL 语句。 -因此,建议你在创建同步任务的时候,在配置文件中指定使用上游 TiDB 集群使用的 SQL 模式。 \ No newline at end of file +因此,在创建同步任务的时候,建议在配置文件中指定使用上游 TiDB 集群使用的 SQL 模式。 \ No newline at end of file From 600f18889e63e652296bdfefdae5811ce1aae1d1 Mon Sep 17 00:00:00 2001 From: dongmen <20351731+asddongmen@users.noreply.github.com> Date: Wed, 8 Nov 2023 14:48:11 +0800 Subject: [PATCH 3/6] Update ticdc/ticdc-ddl.md Co-authored-by: Aolin --- ticdc/ticdc-ddl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-ddl.md b/ticdc/ticdc-ddl.md index 6239df3a0c39..0b3e0978d7eb 100644 --- a/ticdc/ticdc-ddl.md +++ b/ticdc/ticdc-ddl.md @@ -89,7 +89,7 @@ rules = ['test.t*'] | `RENAME TABLE test.t1 TO ignore.t1, test.t2 TO test.t22;` | 报错 | 新的库名 ignore 不符合 filter 规则 | | `RENAME TABLE test.t1 TO test.t4, test.t3 TO test.t1, test.t4 TO test.t3;` | 报错 | 在一条 DDL 中交换 test.t1 和 test.t3 两个表的名字,TiCDC 无法正确处理。请参考错误提示提示信息处理。 | -### SQL 模式 +### SQL 模式 TiCDC 默认采用 TiDB 的默认 SQL 模式来解析 DDL 语句。如果你的上游 TiDB 集群使用了非默认的 SQL 模式,你需要在 TiCDC 的配置文件中指定 SQL 模式,否则 TiCDC 可能无法正确解析 DDL。关于 TiDB SQL 模式的更多信息,请参考 [SQL 模式](/sql-mode.md)。 From cfa5a01dc8b79b2a8c5cf2a455fb3e8a09d2f83f Mon Sep 17 00:00:00 2001 From: dongmen <20351731+asddongmen@users.noreply.github.com> Date: Wed, 8 Nov 2023 14:48:22 +0800 Subject: [PATCH 4/6] Update ticdc/ticdc-ddl.md Co-authored-by: Aolin --- ticdc/ticdc-ddl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-ddl.md b/ticdc/ticdc-ddl.md index 0b3e0978d7eb..cbb8a2571787 100644 --- a/ticdc/ticdc-ddl.md +++ b/ticdc/ticdc-ddl.md @@ -110,4 +110,4 @@ CREATE TABLE "t1" ("a" int PRIMARY KEY); 因为在 TiDB 的默认 SQL 模式下,双引号会被视为字符串而不是标志符,这将会导致 TiCDC 无法正确解析该 DDL 语句。 -因此,在创建同步任务的时候,建议在配置文件中指定使用上游 TiDB 集群使用的 SQL 模式。 \ No newline at end of file +因此,在创建同步任务的时候,建议在配置文件中指定使用上游 TiDB 集群设置的 SQL 模式。 \ No newline at end of file From 646945d4afaa936426672ecbdd9a79a147cc1098 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Mon, 25 Dec 2023 14:22:55 +0800 Subject: [PATCH 5/6] add info about v6.5.6 and v7.1.3 --- ticdc/ticdc-changefeed-config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index 1ea2940a6c48..1738bd5b24ff 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -65,7 +65,7 @@ enable-old-value = true # 注意:该参数只有当下游为 TiDB 时,才会生效。 # sync-point-retention = "1h" -# 设置解析 DDL 时使用的 SQL 模式,多个模式之间用逗号分隔 +# 从 v6.5.6 和 v7.1.3 起引入,设置解析 DDL 时使用的 SQL 模式,多个模式之间用逗号分隔 # 默认值和 TiDB 的默认 SQL 模式一致 # sql-mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" From a4c813ed26fb8cb108231fc1537c99f5c586cd34 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Mon, 25 Dec 2023 14:44:07 +0800 Subject: [PATCH 6/6] Update ticdc/ticdc-changefeed-config.md --- ticdc/ticdc-changefeed-config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md index 1738bd5b24ff..eb9b0664ce43 100644 --- a/ticdc/ticdc-changefeed-config.md +++ b/ticdc/ticdc-changefeed-config.md @@ -65,7 +65,7 @@ enable-old-value = true # 注意:该参数只有当下游为 TiDB 时,才会生效。 # sync-point-retention = "1h" -# 从 v6.5.6 和 v7.1.3 起引入,设置解析 DDL 时使用的 SQL 模式,多个模式之间用逗号分隔 +# 从 v6.5.6 和 v7.1.3 起引入,用于设置解析 DDL 时使用的 SQL 模式,多个模式之间用逗号分隔 # 默认值和 TiDB 的默认 SQL 模式一致 # sql-mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"