资讯专栏INFORMATION COLUMN

TiDB数据库DM工具同步MYSQL中LongText字段异常问题分析与处理

IT那活儿 / 845人阅读
TiDB数据库DM工具同步MYSQL中LongText字段异常问题分析与处理

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

 



报错现象



DM任务检查同步报错:
当源MYSQL数据库表字段从text类型在线修改为longtext字段类型后,通过DM工具同步发现源MYSQL修改后的字段类型成功同步到了TiDB,但是之后的数据同步通过DM任务检查发现报Error 8025的错误。
1. 报错分析
  • 通过查询对应版本(V5.0)的错误代码发现如下:

2. TiDB中相关的限制

分析认为MYSQL修改表字段类型后,源MYSQL中插入该表的数据超过TiDB默认的限制条件。导致DM同步插入数据到TiDB时报Error 8025错误。

 



解决方案



解决方案一:DM任务配置Yaml忽略该表
若该表并非业务运行必要的表,可以通过更新DM task任务的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(default 8MB) 以及max-grpc-send-msg-len参数。
建议参数:
raft-entry-max-size: 15MB,
max-grpc-send-msg-len: 15728640
txn-entry-size-limit: 15728640
另外当放宽单行6MB后,还需考虑total transaction 的size,和下游等能允许的max_trx_size,需要根据情况予以调整。
TiDB中修改所有节点的配置参数参考如下:
1)进入 TiKV-Server,打开配置文件,一般位置为 /tidb-deploy/tikv-20160/conf (注意: tikv-20160 可能不同),打开文件 tikv.toml;同理打开tidb.toml进行检查原始参数,并进行备份。
[root@tidb1 conf]# vi tikv.toml
# WARNING: This file is auto-generated. Do not edit! All your modification will be overwritten!
# You can use tiup cluster edit-config and tiup cluster reload to update the configuration
# All configuration items you want to change can be added to:
# server_configs:
# tikv:
# aa.b1.c3: value
# aa.b2.c4: value
[raftstore]

……
备份参数文件:
[root@tidb1 conf]# cp tikv.toml  tikv.toml.bak20211229
2)进入到安装 tiup 的中控机或者节点,执行配置文件编辑命令:
[root@tidb1 conf]# tiup cluster edit-config tidb-test
Starting component `cluster`: /root/.tiup/components/cluster/v1.6.1/tiup-cluster edit-config tidb-test
global:
user: tidb
ssh_port: 22
ssh_type: builtin
deploy_dir: /data1/tidb-deploy
data_dir: /data1/tidb-data

……
3)输入 i ,进入编辑模式,修改如下标红参数:
[root@tidb1 conf]# tiup cluster edit-config tidb-test
Starting component `cluster`: /root/.tiup/components/cluster/v1.6.1/tiup-cluster edit-config tidb-test
global:
user: tidb
ssh_port: 22
ssh_type: builtin
deploy_dir: /data1/tidb-deploy
data_dir: /data1/tidb-data
os: linux
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
deploy_dir: /data1/tidb-deploy/monitored-9100
data_dir: /data1/tidb-data/monitored-9100
log_dir: /data1/tidb-deploy/monitored-9100/log

server_configs:
tidb:
performance.txn-entry-size-limit: 15728640
tikv:
raftstore.raft-entry-max-size: 15MB
readpool.coprocessor.use-unified-pool: true
readpool.storage.use-unified-pool: true
readpool.unified.max-thread-count: 12
server.max-grpc-send-msg-len: 15728640
pd:
replication.location-labels:
- host
tiflash: {}
tiflash-learner: {}
pump: {}
drainer: {}
cdc: {}
tidb_servers:
4)输入 ESC 键,输入:wq,出现提示如下,默认会检查是否配置、格式符合要求,输入y继续。
server_configs: tidb: {}
tikv:
:wq
Please check change highlight above, do you want to apply the change? [y/N]:(default=N) y
Applying changes...
Applied successfully, please use `tiup cluster reload tidb-test [-N ] [-R ]` to reload config.
5)使用 tiup cluster reload 命令来载入修改的参数 ,或者直接重启数据库生效。
[root@tidb1 conf]# tiup cluster reload tidb-test
Starting component `cluster`: /root/.tiup/components/cluster/v1.6.1/tiup-cluster reload tidb-test
Will reload the cluster tidb-test with restart policy is true, nodes: , roles: .
Do you want to continue? [y/N]:(default=N) y
+ [ Serial ] - SSHKeySet: privateKey=/root/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa, publicKey=/root/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa.pub
+ [Parallel] - UserSSH: user=tidb, host=XXX.XX.134.134
… … …
Upgrading component pd
Restarting instance XXX.XX.134.133:2379
Restart instance XXX.XX.134.133:2379 success

Upgrading component tikv
Restarting instance XXX.XX.134.133:20160
Restart instance XXX.XX.134.133:20160 success
Evicting 1 leaders from store XXX.XX.134.134:20160...
Still waitting for 1 store leaders to transfer...

Upgrading component tidb
Restarting instance XXX.XX.134.133:4000
Restart instance XXX.XX.134.133:4000 success

Upgrading component alertmanager
Restarting instance XXX.XX.134.133:9093
Restart instance XXX.XX.134.133:9093 success
Reloaded cluster `tidb-test` successfully

Found cluster newer version:
The latest version: v1.8.1
Local installed version: v1.6.1
Update current component:   tiup update cluster
Update all components:      tiup update --all
6)再次进入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/

 


END




本文作者:陈 聪

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129491.html

相关文章

  • DM 源码阅读系列文章(一)序

    摘要:内容概要源码阅读系列将会从两条线进行展开,一条是围绕的系统架构和重要模块进行分析,另一条线围绕内部的同步机制展开分析。更多的代码阅读内容会在后面的章节中逐步展开,敬请期待。 作者:杨非 前言 TiDB-DM 是由 PingCAP 开发的一体化数据同步任务管理平台,支持从 MySQL 或 MariaDB 到 TiDB 的全量数据迁移和增量数据同步,在 TiDB DevCon 2019 正...

    Mr_houzi 评论0 收藏0
  • TiDB Ecosystem Tools 原理解读系列(三)TiDB-DM 架构设计实现原理

    摘要:合库合表数据同步在使用支撑大量数据时,经常会选择使用分库分表的方案。但当将数据同步到后,通常希望逻辑上进行合库合表。为支持合库合表的数据同步,主要实现了以下的一些功能。 作者:张学程 简介 TiDB-DM(Data Migration)是用于将数据从 MySQL/MariaDB 迁移到 TiDB 的工具。该工具既支持以全量备份文件的方式将 MySQL/MariaDB 的数据导入到 Ti...

    legendaryedu 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<