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

公司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 设置的过小,单个消息的信息过大导致的。 修改后重启数据库,问题解决。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章