TiDB数据库DM工具同步MYSQL中LongText字段异常问题分析与处理
本文将分析TiDB数据库DM工具同步MYSQL中LongText字段异常问题,并给出解决方案。

报错现象
DM任务检查同步报错:当源MYSQL数据库表字段从text类型在线修改为longtext字段类型后,通过DM工具同步发现源MYSQL修改后的字段类型成功同步到了TiDB,但是之后的数据同步通过DM任务检查发现报Error8025的错误。
报错分析
通过查询对应版本(V5.0)的错误代码发现如下:TiDB中相关的限制分析认为MYSQL修改表字段类型后,源MYSQL中插入该表的数据超过TiDB默认的限制条件。导致DM同步插入数据到TiDB时报Error8025错误。
解决方案
解决方案一:DM任务配置Yaml忽略该表。若该表并非业务运行必要的表,可以通过更新DMtask任务的yaml文件,过滤掉该表的结构和数据同步。参考Yaml配置中,黑白名单列表部分:
- block-allow-list:
- instance: do-dbs: [“dms_prod”]
- ignore-tables:
- – db-name: “dms_prod”
- tbl-name: “dms_log_error”
- –不同步的表名
解决方案二:修改Tidb数据库的集群参数。通过报错的提示,TiDB默认支持最大6MB的单个键值对,超过该限制可适当调整txn-entry-size-limit配置项以放宽限制。并且从v5.0版本开始引入。但是txn-entry-size-limit参数同时需配合Tikv侧的raft-entry-max-size(default8MB)以及max-grpc-send-msg-len参数。建议参数:raft-entry-max-size:15MB,max-grpc-send-msg-len:15728640,txn-entry-size-limit:15728640。另外当放宽单行6MB后,还需考虑totaltransaction的size,和下游等能允许的max_trx_size,需要根据情况予以调整。TiDB中修改所有节点的配置参数参考如下:
- 进入TiKV-Server,打开配置文件,一般位置为/tidb-deploy/tikv-20160/conf(注意:tikv-20160可能不同),打开文件tikv.toml;同理打开tidb.toml进行检查原始参数,并进行备份。
- 进入到安装tiup的中控机或者节点,执行配置文件编辑命令。
- 输入i,进入编辑模式,修改对应参数。
- 输入ESC键,输入:wq,出现提示如下,默认会检查是否配置、格式符合要求,输入y继续。
- 使用tiup cluster reload命令来载入修改的参数,或者直接重启数据库生效。
- 再次进入TiKV-Server,打开配置文件,一般位置为/tidb-deploy/tikv-20160/conf(注意:tikv-20160可能不同),打开文件tikv.toml,同理打开tidb.toml进行检查。
注意问题1.调整TiDB的参数会影响到数据库性能将6MB的限制放宽将影响数据库运行的性能。原因是在prewrite时写下锁的时长(阻塞其他事务的读、提交失败的风险),像oracle的clog,blob等超长的字段,本身是不适合lsmt结构。2.在TiDB中使用longtext字段Longtext的类型允许的最大长度为4G,在tidb中单行最多允许120M(通过调整参数),这样的类型很容易达到数据库的限制条件,并且在放宽6M的限制后,会影响到数据库的性能。严重的情况可能会导致Tikv异常繁忙而无法提供服务。参考TiDB最佳实践,建议尽量不要放开单行限制,大字段的需要建议在业务侧进行调整。即使开放限制,也需要有限制的使用。参考Tidb最佳实践 https://docs.pingcap.com/zh/tidb/v5.0/tidb-best-practices/。
作者:陈聪
来源:IT那活儿(上海新炬王翦团队)
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6353.html
