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