0
点赞
收藏
分享

微信扫一扫

AMQ- mysql后台数据库 Row size too large(大于8126)

林肯公园_97cc 2022-02-13 阅读 51


公司amq消息队列存数据用的 mysql数据库。5.6.32 

近期应用方反应报错:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Row size too large(>8126).

Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.


这个能首先是去定位到哪个表,表名: ACTIVEMQ_MSGS 

这个是存要发送的消息信息。里面有一列叫做 MSG, 可是开发已经把这里的类型改到longblob类型了。 而且longblob支持的大小已经远远比 BLOB 大多了。 

所以不是表定义的问题,压根数据就没入库。

这时候就想到压缩。在/etc/my.cnf 里加入如下配置:

innnodb_file_per_table = 1

innodb_file_format_check = on

innodb_file_fomart = Barracuda


也可以只开启某个表的压缩:(这个没有实际测试过)

alter table XXX engine=InnoDB ROW_FORAMT=COMPRESSED;


结果依然报错,看来问题远远不是这些。网上很多的文章,就是要不改字段定义,要不就是如上开启压缩。 不过很多情况都不适用。于是翻Q出去查了查文章,建议加入如下配置到/etc/my.cnf:

innodb_log_file_size = 200M

innodb_log_buffer_size = 10m

这些参数可能你的配置里以前就有,我的也是,但是为什么报错,就是file_size 设置的过小,单个消息的信息过大导致的。 修改后重启数据库,问题解决。


举报

相关推荐

0 条评论