Слишком большой размер строки (> 8126) исключение при добавлении приложения appcenter
Я пытаюсь развернуть центр приложений Worklight для iOS на сервере Websphere Liberty в Windows 8.1. Но я получаю следующее исключение в журналах сервера, когда пытаюсь добавить IBMAppCenter.ipa через консоль appcenter.
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 5.6.2 через установщик сообщества mysql
- установить сервер приложений Websphere Liberty v8.5.5
- установить Worklight Server v6.2
- создать IBMAppCenter.ipa через XCode
- войдите в appcenterconsole и попробуйте добавить приложение
Я попытался включить сжатие для таблицы APPLICATION_STORAGE, как это предложено hjpotter92 в разделе "Ограничение изменения для" слишком большого размера строки Mysql "", но безуспешно. Любая помощь приветствуется.
РЕДАКТИРОВАТЬ
Вот определение таблицы APPLICATION_STORAGE, которая вызывает проблему:
CREATE TABLE APPLICATION_STORAGE (ID INTEGER NOT NULL AUTO_INCREMENT, CONTENT LONGBLOB, AP_FK INTEGER, PRIMARY KEY (ID)) ENGINE = innodb;
1 ответ
Увеличение свойства innodb_log_file_size до 256M решило мою проблему. Очевидно, журнал повторов перезаписывает самую последнюю контрольную точку для больших двоичных объектов, как описано здесь: 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 ошибка остается известным ограничением.
В результате ограничения записи BLOB журнала повторов, введенного для MySQL 5.6, для innodb_log_file_size должно быть установлено значение, в 10 раз превышающее максимальный размер данных BLOB, найденный в строках ваших таблиц, плюс длина других полей переменной длины (VARCHAR, VARBINARY и поля типа TEXT). Невыполнение этого требования может привести к ошибкам "слишком большой размер строки". Никаких действий не требуется, если ваш параметр innodb_log_file_size уже достаточно велик или ваши таблицы не содержат BLOB-данных. (Ошибка № 16963396, Ошибка № 19030353, Ошибка № 69477)