1

我正在尝试在 Windows 8.1 上的 Websphere Liberty 服务器上部署适用于 iOS 的 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]

这是重现我的问题的场景:

  1. 通过 mysql 社区安装程序安装 mysql 5.6.2
  2. 安装 Websphere Liberty 应用服务器 v8.5.5
  3. 安装 Worklight Server v6.2
  4. 通过 XCode 生成 IBMAppCenter.ipa
  5. 登录到 appcenterconsole 并尝试添加应用程序

我尝试按照 hjpotter92 对“Mysql Row size too large”的更改限制提出的建议为表 APPLICATION_STORAGE 启用压缩,但没有任何运气。任何帮助将非常感激。

编辑

这是导致问题的 APPLICATION_STORAGE 表的定义:

CREATE TABLE APPLICATION_STORAGE (ID INTEGER NOT NULL AUTO_INCREMENT, CONTENT LONGBLOB, AP_FK INTEGER, PRIMARY KEY (ID)) ENGINE = innodb;
4

1 回答 1

5

将 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 补丁解决了该错误,但没有施加限制。对于 MySQL 5.5,该错误仍然是一个已知限制。

由于 MySQL 5.6 引入了重做日志 BLOB 写入限制,innodb_log_file_size 的值应设置为大于表行中发现的最大 BLOB 数据大小加上其他可变长度字段(VARCHAR、VARBINARY , 和 TEXT 类型字段)。否则可能会导致“行大小太大”错误。如果您的 innodb_log_file_size 设置已经足够大或者您的表不包含 BLOB 数据,则无需执行任何操作。(错误 #16963396、错误 #19030353、错误 #69477)

于 2014-08-12T13:33:38.153 回答