mysql 错误 Row size too large (> 8126)解决办法

这个错误比较诡异,有很多问题会引发这个错误,主要问题大表中varchar和text(longtext)字段太多,超出mysql的默认Row Size 8k的限制。

如果涉及的表没有事务和外键的约束,可以把表类型改为MyISAM也可以解决。

下面的方法针对表类型为InnoDB的方法。

基础设置:

innodb_file_per_table=1

innodb_file_format=Barracuda

如果解决不了,那么需要

innodb_page_size=32K

mysql默认的innodb_page_size为16K,这里改动该参数会有问题,导致mysql启动不了。 需要先把数据导出,然后删除ibdata和ib_logfile文件,然后启动数据库,恢复数据。

如果还是报Row size too large错误,那么可能是因为日志文件设置太小引起的,需要调整该参数

innodb_log_file_size=148M

大致就是这些吧,应该可以解决大多数了。

这里需要注意一点,如果配置文件中innodb_page_size为32k或者64k,那么表的ROW_FORMAT=COMPRESSED是不支持,可以选择为DYNAMIC,读取性能会有点下降。

可能最终的解决方案是分表吧,这里就不深入讨论了。

如果还解决不了,呃,还是祭天吧。 擦干眼泪,继续搞ta。

转载于:https://my.oschina.net/u/1384571/blog/1802681

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值