暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

IT那活儿 2022-05-26
2685

点击上方“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 <nodes>] [-R <roles>]` 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那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论