From d9a1f20bb603a7166d8471793d2a46b2c940a1d5 Mon Sep 17 00:00:00 2001 From: WangXiangUSTC Date: Mon, 15 Jun 2020 16:14:53 +0800 Subject: [PATCH 1/7] minor update --- zh/TOC.md | 2 +- zh/error-handling.md | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/zh/TOC.md b/zh/TOC.md index da8faf8a3..fcba6c831 100644 --- a/zh/TOC.md +++ b/zh/TOC.md @@ -43,7 +43,6 @@ - [手动处理 Sharding DDL Lock](manually-handling-sharding-ddl-locks.md) - [告警处理](handle-alerts.md) - [日常巡检](daily-check.md) -+ [DM Portal](dm-portal.md) + 故障处理 - [故障及处理方法](error-handling.md) - [性能问题及处理方法](handle-performance-issues.md) @@ -67,6 +66,7 @@ - [DM-worker 配置](dm-worker-configuration-file.md) - [上游数据库配置](source-configuration-file.md) - [任务配置](task-configuration-file.md) + - [使用 DM Portal 生成任务配置](dm-portal.md) - [监控指标](monitor-a-dm-cluster.md) - [告警信息](alert-rules.md) - [错误码](error-handling.md#常见故障处理方法) diff --git a/zh/error-handling.md b/zh/error-handling.md index 113e8a557..83bc29f89 100644 --- a/zh/error-handling.md +++ b/zh/error-handling.md @@ -148,3 +148,32 @@ aliases: ['/docs-cn/tidb-data-migration/dev/troubleshoot-dm/', '/docs-cn/tidb-da 在所有 DM 配置文件中,数据库相关的密码都必须使用经 dmctl 加密后的密文(若数据库密码为空,则无需加密)。有关如何使用 dmctl 加密明文密码,参见[使用 dmctl 加密上游 MySQL 用户密码](deploy-a-dm-cluster-using-ansible.md#使用-dmctl-加密上游-mysql-用户密码)。 此外,在 DM 运行过程中,上下游数据库的用户必须具备相应的读写权限。在启动同步任务过程中,DM 会自动进行相应权限的前置检查,详见[上游 MySQL 实例配置前置检查](precheck.md)。 + +### load 处理单元报错 `packet for query is too large. Try adjusting the 'max_allowed_packet' variable` + +#### 原因 + +* MySQL client 和 MySQL/TiDB Server 都有 `max_allowed_packet` 配额的限制,如果在使用过程中违反其中任何一个 `max_allowed_packet` 配额,客户端程序就会收到对应的报错。目前最新版本的 Syncer、Loader、DM 和 TiDB Server 的默认 `max_allowed_packet` 配额都为 `64M`。 + +* DM 的全量数据导入处理模块不支持对 dump sqls 文件进行切分,原因是 DM 的 dump 处理单元采用了最简单的编码实现,,如果在 DM 实现文件切分,那么需要在 `TiDB parser` 基础上实现一个完备的解析器才能正确的处理数据切分,但是随之会带来以下的问题: + + * 工作量大 + + * 复杂度高,不容易保证正确性 + + * 性能的极大降低 + +#### 解决方案 + +* 依据上面的原因,在代码层面不能简单的解决这个困扰,我们推荐的方式是:在 DM dump 处理单元提供的配置 `extra-args` 中设置 `statement-size`: + + 依据默认的 `--statement-size` 设置,DM 的 dump 处理单元默认生成的 `Insert Statement` 大小会尽量接近在 `1M` 左右,使用默认值就可以确保绝大部分情况不会出现该问题。 + + 有时候在 dump 过程中会出现下面的 `WARN` log,但是这个报错不影响 dump 的过程,只是表达了 dump 的表可能是宽表。 + + ``` + Row bigger than statement_size for xxx + ``` + +* 如果宽表的单行超过了 `64M`,那么需要修改以下配置,并且使之生效。 + * 在 TiDB Server 执行 `set @@global.max_allowed_packet=134217728` (`134217728 = 128M`) From 4161a12dceef6678c6faa203a220393240b52bdb Mon Sep 17 00:00:00 2001 From: WangXiangUSTC Date: Mon, 15 Jun 2020 17:07:38 +0800 Subject: [PATCH 2/7] address comment --- zh/error-handling.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/zh/error-handling.md b/zh/error-handling.md index 83bc29f89..3027f3859 100644 --- a/zh/error-handling.md +++ b/zh/error-handling.md @@ -153,7 +153,7 @@ aliases: ['/docs-cn/tidb-data-migration/dev/troubleshoot-dm/', '/docs-cn/tidb-da #### 原因 -* MySQL client 和 MySQL/TiDB Server 都有 `max_allowed_packet` 配额的限制,如果在使用过程中违反其中任何一个 `max_allowed_packet` 配额,客户端程序就会收到对应的报错。目前最新版本的 Syncer、Loader、DM 和 TiDB Server 的默认 `max_allowed_packet` 配额都为 `64M`。 +* MySQL client 和 MySQL/TiDB Server 都有 `max_allowed_packet` 配额的限制,如果在使用过程中违反其中任何一个 `max_allowed_packet` 配额,客户端程序就会收到对应的报错。目前最新版本的 DM 和 TiDB Server 的默认 `max_allowed_packet` 配额都为 `64M`。 * DM 的全量数据导入处理模块不支持对 dump sqls 文件进行切分,原因是 DM 的 dump 处理单元采用了最简单的编码实现,,如果在 DM 实现文件切分,那么需要在 `TiDB parser` 基础上实现一个完备的解析器才能正确的处理数据切分,但是随之会带来以下的问题: @@ -175,5 +175,6 @@ aliases: ['/docs-cn/tidb-data-migration/dev/troubleshoot-dm/', '/docs-cn/tidb-da Row bigger than statement_size for xxx ``` -* 如果宽表的单行超过了 `64M`,那么需要修改以下配置,并且使之生效。 +* 如果宽表的单行超过了 `64M`,那么需要修改以下两项配置,并且使之生效。 * 在 TiDB Server 执行 `set @@global.max_allowed_packet=134217728` (`134217728 = 128M`) + * 根据实际情况为 DM 的任务配置文件中的 `target-database` 增加配置 `max-allowed-packet: 134217728`(128M),然后 stop 任务后再重新 start 任务。 \ No newline at end of file From 457c540ef12c280f74172021f0bf03b47346fd03 Mon Sep 17 00:00:00 2001 From: WangXiangUSTC Date: Mon, 15 Jun 2020 17:11:49 +0800 Subject: [PATCH 3/7] format --- zh/error-handling.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zh/error-handling.md b/zh/error-handling.md index 3027f3859..788dff034 100644 --- a/zh/error-handling.md +++ b/zh/error-handling.md @@ -176,5 +176,7 @@ aliases: ['/docs-cn/tidb-data-migration/dev/troubleshoot-dm/', '/docs-cn/tidb-da ``` * 如果宽表的单行超过了 `64M`,那么需要修改以下两项配置,并且使之生效。 + * 在 TiDB Server 执行 `set @@global.max_allowed_packet=134217728` (`134217728 = 128M`) + * 根据实际情况为 DM 的任务配置文件中的 `target-database` 增加配置 `max-allowed-packet: 134217728`(128M),然后 stop 任务后再重新 start 任务。 \ No newline at end of file From ace5f9d3a1d028c113c3bdcd35ce8dfc38ac8672 Mon Sep 17 00:00:00 2001 From: WangXiangUSTC Date: Mon, 15 Jun 2020 17:27:19 +0800 Subject: [PATCH 4/7] Update zh/error-handling.md Co-authored-by: Xuecheng Zhang --- zh/error-handling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/error-handling.md b/zh/error-handling.md index 788dff034..ff995e58d 100644 --- a/zh/error-handling.md +++ b/zh/error-handling.md @@ -179,4 +179,4 @@ aliases: ['/docs-cn/tidb-data-migration/dev/troubleshoot-dm/', '/docs-cn/tidb-da * 在 TiDB Server 执行 `set @@global.max_allowed_packet=134217728` (`134217728 = 128M`) - * 根据实际情况为 DM 的任务配置文件中的 `target-database` 增加配置 `max-allowed-packet: 134217728`(128M),然后 stop 任务后再重新 start 任务。 \ No newline at end of file + * 根据实际情况为 DM 的任务配置文件中的 `target-database` 增加配置 `max-allowed-packet: 134217728`(128M),然后 `stop-task` 后再重新 `start-task`。 From 8c66e46fbd4da248949c577c5097c72bc9dac7e3 Mon Sep 17 00:00:00 2001 From: WangXiangUSTC Date: Thu, 18 Jun 2020 10:50:06 +0800 Subject: [PATCH 5/7] Apply suggestions from code review Co-authored-by: toutdesuite --- zh/error-handling.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zh/error-handling.md b/zh/error-handling.md index ff995e58d..609097f5f 100644 --- a/zh/error-handling.md +++ b/zh/error-handling.md @@ -165,18 +165,18 @@ aliases: ['/docs-cn/tidb-data-migration/dev/troubleshoot-dm/', '/docs-cn/tidb-da #### 解决方案 -* 依据上面的原因,在代码层面不能简单的解决这个困扰,我们推荐的方式是:在 DM dump 处理单元提供的配置 `extra-args` 中设置 `statement-size`: +* 推荐在 DM 的 dump 处理单元提供的配置 `extra-args` 中设置 `statement-size`: 依据默认的 `--statement-size` 设置,DM 的 dump 处理单元默认生成的 `Insert Statement` 大小会尽量接近在 `1M` 左右,使用默认值就可以确保绝大部分情况不会出现该问题。 - 有时候在 dump 过程中会出现下面的 `WARN` log,但是这个报错不影响 dump 的过程,只是表达了 dump 的表可能是宽表。 + 有时候在 dump 过程中会出现下面的 `WARN` log。这个 `WARN` log 不影响 dump 的过程,只是说明 dump 的表可能是宽表。 ``` Row bigger than statement_size for xxx ``` -* 如果宽表的单行超过了 `64M`,那么需要修改以下两项配置,并且使之生效。 +* 如果宽表的单行超过了 `64M`,需要修改以下两项配置,并且确保其生效。 * 在 TiDB Server 执行 `set @@global.max_allowed_packet=134217728` (`134217728 = 128M`) - * 根据实际情况为 DM 的任务配置文件中的 `target-database` 增加配置 `max-allowed-packet: 134217728`(128M),然后 `stop-task` 后再重新 `start-task`。 + * 根据实际情况为 DM 的任务配置文件中的 `target-database` 增加配置 `max-allowed-packet: 134217728`(128M),执行 `stop-task` 后再重新 `start-task`。 From c8d3fcec976add7f281a341ca358aeaf35830bb8 Mon Sep 17 00:00:00 2001 From: WangXiangUSTC Date: Thu, 18 Jun 2020 10:50:54 +0800 Subject: [PATCH 6/7] Apply suggestions from code review Co-authored-by: toutdesuite --- zh/error-handling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/error-handling.md b/zh/error-handling.md index 609097f5f..15404cb12 100644 --- a/zh/error-handling.md +++ b/zh/error-handling.md @@ -167,7 +167,7 @@ aliases: ['/docs-cn/tidb-data-migration/dev/troubleshoot-dm/', '/docs-cn/tidb-da * 推荐在 DM 的 dump 处理单元提供的配置 `extra-args` 中设置 `statement-size`: - 依据默认的 `--statement-size` 设置,DM 的 dump 处理单元默认生成的 `Insert Statement` 大小会尽量接近在 `1M` 左右,使用默认值就可以确保绝大部分情况不会出现该问题。 + 依据默认的 `--statement-size` 设置,DM 的 dump 处理单元默认生成的 `Insert Statement` 大小一般会在 `1M` 左右,使用默认值就可以确保绝大部分情况 load 处理单元不会报错 `packet for query is too large. Try adjusting the 'max_allowed_packet' variable`。 有时候在 dump 过程中会出现下面的 `WARN` log。这个 `WARN` log 不影响 dump 的过程,只是说明 dump 的表可能是宽表。 From aa296a41a4e2ede22f77ccf8b73f884e1376fd77 Mon Sep 17 00:00:00 2001 From: WangXiangUSTC Date: Thu, 18 Jun 2020 10:56:57 +0800 Subject: [PATCH 7/7] address comment --- zh/error-handling.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zh/error-handling.md b/zh/error-handling.md index 15404cb12..3a7ce98f1 100644 --- a/zh/error-handling.md +++ b/zh/error-handling.md @@ -151,11 +151,11 @@ aliases: ['/docs-cn/tidb-data-migration/dev/troubleshoot-dm/', '/docs-cn/tidb-da ### load 处理单元报错 `packet for query is too large. Try adjusting the 'max_allowed_packet' variable` -#### 原因 +出现该报错的主要原因包括以下两点: * MySQL client 和 MySQL/TiDB Server 都有 `max_allowed_packet` 配额的限制,如果在使用过程中违反其中任何一个 `max_allowed_packet` 配额,客户端程序就会收到对应的报错。目前最新版本的 DM 和 TiDB Server 的默认 `max_allowed_packet` 配额都为 `64M`。 -* DM 的全量数据导入处理模块不支持对 dump sqls 文件进行切分,原因是 DM 的 dump 处理单元采用了最简单的编码实现,,如果在 DM 实现文件切分,那么需要在 `TiDB parser` 基础上实现一个完备的解析器才能正确的处理数据切分,但是随之会带来以下的问题: +* DM 的全量数据导入处理模块不支持对 dump 处理模块导出的 SQL 文件进行切分。因为 DM 的 dump 处理单元采用了最简单的编码实现,如果在 DM 实现文件切分,需要在 `TiDB Parser` 基础上实现一个完备的解析器才能正确的处理数据切分。但是随之会带来以下的问题: * 工作量大 @@ -163,7 +163,7 @@ aliases: ['/docs-cn/tidb-data-migration/dev/troubleshoot-dm/', '/docs-cn/tidb-da * 性能的极大降低 -#### 解决方案 +解决方案为: * 推荐在 DM 的 dump 处理单元提供的配置 `extra-args` 中设置 `statement-size`: