导入报错

【 TiDB 使用环境】生产\测试环境\ POC
【 TiDB 版本】v5.4.0
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】
导出是用dumpling工具
导入使用tidb-lightning工具
[ddl:1273]Unknown collation: ‘utf8mb4_hr_0900_ai_ci’

导出的上游是mysql 8.0的吗,tidb暂时不支持这种排序规则

dumpling能不能转换一下

找个编辑器比如Vs code把utf8mb4_hr_0900_ai_ci全部替换成utf8mb4_bin

1 个赞

可以把dumpling导出的表结构sql里的排序规则批量替换下,不过需要注意下业务中如果有用到utf8mb4_hr_0900_ai_ci的特性迁移到tidb就没有了。

看大家评论应该只能替换文件中的内容了,可以考虑sed命令来替换

不支持的排序规则字符集,是否可以考虑从源头上处理,源库评估转换TIDB支持的字符集,进行修改,然后在执行。
配置项没有字符集。
https://docs.pingcap.com/zh/tidb/stable/dumpling-overview#输出文件格式

Dumpling 主要选项表

主要选项 用途 默认值
-V 或 --version 输出 Dumpling 版本并直接退出
-B 或 --database 导出指定数据库
-T 或 --tables-list 导出指定数据表
-f 或 --filter 导出能匹配模式的表,语法可参考 table-filter [\*.\*,!/^(mysql|sys|INFORMATION_SCHEMA|PERFORMANCE_SCHEMA|METRICS_SCHEMA|INSPECTION_SCHEMA)$/.\*] (导出除系统库外的所有库表)
–case-sensitive table-filter 是否大小写敏感 false,大小写不敏感
-h 或 --host 连接的数据库主机的地址 “127.0.0.1”
-t 或 --threads 备份并发线程数 4
-r 或 --rows 将 table 划分成 row 行数据,一般针对大表操作并发生成多个文件。当上游为 TiDB 且版本为 v3.0 或更新版本时,该参数大于 0 表示使用 TiDB region 信息划分表内并发,具体取值将不再生效。
-L 或 --logfile 日志输出地址,为空时会输出到控制台 “”
–loglevel 日志级别 {debug,info,warn,error,dpanic,panic,fatal} “info”
–logfmt 日志输出格式 {text,json} “text”
-d 或 --no-data 不导出数据,适用于只导出 schema 场景
–no-header 导出 csv 格式的 table 数据,不生成 header
-W 或 --no-views 不导出 view true
-m 或 --no-schemas 不导出 schema,只导出数据
-s 或–statement-size 控制 INSERT SQL 语句的大小,单位 bytes
-F 或 --filesize 将 table 数据划分出来的文件大小,需指明单位(如 128B , 64KiB , 32MiB , 1.5GiB
–filetype 导出文件类型(csv/sql) “sql”
-o 或 --output 导出本地文件路径或外部存储 URL “./export-${time}”
-S 或 --sql 根据指定的 sql 导出数据,该选项不支持并发导出
–consistency flush: dump 前用 FTWRL

snapshot: 通过 TSO 来指定 dump 某个快照时间点的 TiDB 数据
lock: 对需要 dump 的所有表执行 lock tables read 命令
none: 不加锁 dump,无法保证一致性
auto: 对 MySQL 使用 --consistency flush;对 TiDB 使用 --consistency snapshot|“auto”|
|–snapshot|snapshot tso,只在 consistency=snapshot 下生效||
|–where|对备份的数据表通过 where 条件指定范围||
|-p 或 --password|连接的数据库主机的密码||
|-P 或 --port|连接的数据库主机的端口|4000|
|-u 或 --user|连接的数据库主机的用户名|“root”|
|–dump-empty-database|导出空数据库的建库语句|true|
|–ca|用于 TLS 连接的 certificate authority 文件的地址||
|–cert|用于 TLS 连接的 client certificate 文件的地址||
|–key|用于 TLS 连接的 client private key 文件的地址||
|–csv-delimiter|csv 文件中字符类型变量的定界符|’"’|
|–csv-separator|csv 文件中各值的分隔符,如果数据中可能有逗号,建议源文件导出时分隔符使用非常见组合字符|’,’|
|–csv-null-value|csv 文件空值的表示|"\N"|
|–escape-backslash|使用反斜杠 ( \ ) 来转义导出文件中的特殊字符|true|
|–output-filename-template|以 golang template 格式表示的数据文件名格式
支持 {{.DB}}{{.Table}}{{.Index}} 三个参数
分别表示数据文件的库名、表名、分块 ID|’{{.DB}}.{{.Table}}.{{.Index}}’|
|–status-addr|Dumpling 的服务地址,包含了 Prometheus 拉取 metrics 信息及 pprof 调试的地址|":8281"|
|–tidb-mem-quota-query|单条 dumpling 命令导出 SQL 语句的内存限制,单位为 byte。对于 v4.0.10 或以上版本,若不设置该参数,默认使用 TiDB 中的 mem-quota-query 配置项值作为内存限制值。对于 v4.0.10 以下版本,该参数值默认为 32 GB|34359738368|
|–params|为需导出的数据库连接指定 session 变量,可接受的格式: “character_set_client=latin1,character_set_connection=latin1”|

2 个赞

很牛逼

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。