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 設置的過小,單個消息的信息過大導致的。 修改後重啓數據庫,問題解決。

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