DM同步mysql表 40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
4.0
【问题描述】
DM工具创建同步mysql8.0的数据库表task时报


“ErrCode”: 10006,
“ErrClass”: “database”,
“ErrScope”: “downstream”,
“ErrLevel”: “high”,
“Message”: “run db schema failed - dbfile ./dumped_data.test/oleaning_data-schema-create.sql: execute statement failed: CREATE DATABASE oleaning_data /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci / /!80016 DEFAULT ENCRYPTION=‘N’ */;”,
“RawCause”: “Error 1044: Access denied for user ‘bi_test’@‘%’ to database ‘oleaning_data’”,
“Workaround”: “”

下游已经建立了表,起的别的名字进行路由对应的,请问,如何在不改变上游表结构的情况下同步这张表

建议检查下权限吧
https://docs.pingcap.com/zh/tidb-data-migration/stable/dm-worker-intro#dm-worker-所需权限

不是的,我已经把数据路由到一个新的库了,DM不应该新建库的,
schema-pattern: “oleaning_data”
target-schema: “gsfa_bi_business” – 已经建好的库
table-pattern: “organization_0001”
target-table: “oleaning_organization” – 已经建好的表

我设置
schema-pattern: “*”
后又报下面的错误

感觉应该是上游数据库的字符集编码问题,有没有不改变上游结构的情况下通过路由设置解决这个问题?

1 个赞

确认下是否启用了新的排序规则?

https://docs.pingcap.com/zh/tidb/stable/character-set-and-collation#新框架下的排序规则支持

不支持的字符集可以修改上游字符集重新进行数据同步。

1 个赞

上游系统用了新的排序规则,但是上游系统表不能动,请问可以在DM和下游库上面解决这个问题吗

不支持的字符集无法写入到下游中。
https://docs.pingcap.com/zh/tidb/stable/character-set-and-collation#支持的字符集和排序规则

在DM抽取转换的过程中可以处理掉这种情况吗,就是上游和下游的表排序方式设置成不一样的这种情况

不能的。同步过程中会检查上下游的表结构

遇到了同样的问题,DM 同步报错:ddl:1273]Unknown collation: ‘utf8mb4_0900_as_cs’
看来对mysql 8.0 上游的数据 目前支持的并不好

可以在下游建好这个表,跳过该position

1 个赞

手动在TIDB中 执行DDL 即可

1 个赞

目标库上先手工创建表,然后直接同步数据

3 个赞

错误提示好像是这个用户没有权限吧

1 个赞

不是的,看下面的图,最上面的图应该是发错了

遇到相似的问题,请问有解决方案吗?目前从 mysql8.0 同步到 tidb 6.5.0,使用 dm 工具全量+增量,也是出现报错,但目标库表结构已创建好,配置看起来也没问题(如下图)
[2023/02/10 19:35:50.092 +08:00] [ERROR] [subtask.go:369] [“unit process error”] [subtask=authorinfo] [unit=Load] [“error information”="ErrCode:34019 ErrClass:"load-unit" ErrScope:"not-set" ErrLevel:"high" RawCause:"[Lightning:Restore:ErrCreateSchema]create schema failed, table: `porsche`.``, stmt: restore database schema: run create schema job failed: Error 1273: Unsupported collation when new collation is enabled: ‘utf8mb4_0900_ai_ci’" "]
image

8.0是试验特性。不知道能不能很好的支持。utf8mb4_0900_ai_ci’这个编码规则就是8.0默认的。估计兼容性不好吧

找到解决方法了,dm 全量同步会在本地下载 schema 的 sql 文件,里面带有类似 utf8mb4_0900_ai_ci 之类的配置,去掉后恢复下任务就可以了

是的。 可以设置参数,让文件落地后,不删除就能发现这些东西。 三大类: 数据库,表,数据

注意下游表字段的顺序要和上游一样

这里是排序字符集的问题,可以把表的排序字符集设置成utf8mb4_unicode_ci