DTS迁移多text字段时出现Row size too large的错误

    本周DTS一个增量迁移任务出现一个很诡异的问题,之所以说诡异是因为DTS已经为该用户的库同步了很长一段时间的增量数据(数据量在15G+),今天突然出现了这个问题:

f76015924054a00d1f0b3e52d966903a3c7dc1b2

    从异常的信息大致可以推测出出错的原因是新插入的一行数据需要存储在数据页的实际数据长度大于一个数据页的长度(8126).所以首先对比了一下源表和目标表的数据结构(可能是两边的表结构不一致导致的),两边的表结构是一致的,但却是定义了许多Text类型的大字段而已

696246e34e89d619e0a0a174d607a6205348b745

    然后查询了两边的innodb_file个配置,源库:

f137a486e7ddffb7827aca5e0282a880b46d807a

     目标库:

a7e12dbe57d7becaac25b153b00f2f20f44e2559

    这样一看出错的原因就一目了然了.简单解释一下,Barracuda对应row_format(dynamic, compress),其中dynamic下text的所有内容都是off-page存放的;Antelope 对应row_format(compact, redundant),其中compact下的text是存786B在row中,超过部分存在off-page.所以要解决问题就必须将innodb_file的给是改成Barracuda与源库一致,当这并不能马上解决问题,因为innodb表的存储格式在创建时已经确定了,那么就只能重建表了.为跟用户确认目标库无业务写入的情况下通过create table * select * ,insert into * select 以及rename在目标库重建了该表,之后就完美解决了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值