我正在尝试在Windows8.1上的WebsphereLiberty服务器上部署worklight应用程序中心。但当我试图通过appcenter控制台添加IBMAppCenter.ipa时,服务器日志中出现以下异常。

Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. {prepstmnt 1563792952 INSERT INTO APPLICATION_STORAGE (CONTENT, AP_FK) VALUES (?, ?) [params=(InputStream) java.io.ByteArrayInputStream@5987916, (null) null]} [code=1118, state=42000]

下面是重现我的问题的场景:
通过mysql社区安装程序安装mysql 5.6.2
安装Websphere Liberty application server v8.5.5
安装Worklight Server v6.2
通过XCode生成IBMAppCenter.ipa
登录到AppCenter控制台并尝试添加应用程序
我试图为hjpotter92在Change limit for "Mysql Row size too large"上提出的表应用程序存储启用压缩,但没有成功。任何帮助都将不胜感激。
编辑
下面是应用程序存储表的定义,它会导致问题:
CREATE TABLE APPLICATION_STORAGE (ID INTEGER NOT NULL AUTO_INCREMENT, CONTENT LONGBLOB, AP_FK INTEGER, PRIMARY KEY (ID)) ENGINE = innodb;

最佳答案

将innodb_log_file_size属性增加到256M解决了我的问题。显然,重做日志覆盖了大型blob的最新检查点,如下所述:http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-20.html
重要更改:外部存储的大型BLOB字段的重做日志写入可能会覆盖最新的检查点。5.6.20修补程序将重做日志BLOB写入的大小限制为重做日志文件大小的10%。5.7.5补丁在不加限制的情况下解决了这个bug。对于MySQL 5.5,这个bug仍然是一个已知的限制。
由于MySQL 5.6引入了redo log BLOB write limit,innodb_log_file_size应该设置为大于表行中最大BLOB数据大小加上其他可变长度字段(VARCHAR、VARBINARY和文本类型字段)长度10倍的值。否则可能导致“行太大”错误。如果innodb_log_file_size设置已经足够大,或者表中没有BLOB数据,则不需要执行任何操作。(错误16963396,错误19030353,错误69477)

关于mysql - 行大小太大(> 8126)添加Appcenter应用程序时出现异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25246074/

10-09 05:34
查看更多