这个错误比较诡异,有很多问题会引发这个错误,主要问题大表中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。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐