Skip to content
This repository was archived by the owner on Jan 3, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion zh/TOC.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,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)
Expand All @@ -68,6 +67,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#常见故障处理方法)
Expand Down
32 changes: 32 additions & 0 deletions zh/error-handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,3 +148,35 @@ 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` 配额,客户端程序就会收到对应的报错。目前最新版本的 DM 和 TiDB Server 的默认 `max_allowed_packet` 配额都为 `64M`。

* DM 的全量数据导入处理模块不支持对 dump 处理模块导出的 SQL 文件进行切分。因为 DM 的 dump 处理单元采用了最简单的编码实现,如果在 DM 实现文件切分,需要在 `TiDB Parser` 基础上实现一个完备的解析器才能正确的处理数据切分。但是随之会带来以下的问题:

* 工作量大

* 复杂度高,不容易保证正确性

* 性能的极大降低

解决方案为:

* 推荐在 DM 的 dump 处理单元提供的配置 `extra-args` 中设置 `statement-size`:

依据默认的 `--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 的表可能是宽表。

```
Row bigger than statement_size for xxx
```

* 如果宽表的单行超过了 `64M`,需要修改以下两项配置,并且确保其生效。

* 在 TiDB Server 执行 `set @@global.max_allowed_packet=134217728` (`134217728 = 128M`)
Comment thread
csuzhangxc marked this conversation as resolved.

* 根据实际情况为 DM 的任务配置文件中的 `target-database` 增加配置 `max-allowed-packet: 134217728`(128M),执行 `stop-task` 后再重新 `start-task`。