In MariaDB 10.2 und später ist das DYNAMIC-Zellenformat das Standardzellenformat. Wenn die Tabellen ursprünglich auf z.B. Compact stehen, kommt es zu Fehlermeldungen im mysql error.log.
[Warning] InnoDB: Cannot add field `basic_auth_password` in table `xxowncloud`.`oc_news_feeds` because after adding it, the row size is 8269 which is greater than maximum allowed size (8126) for a record on index leaf page.
Mit dem folgenden SQL Statement : (irgendwo im Netz gefunden)
SELECT NAME, ROW_FORMAT FROM information_schema.INNODB_SYS_TABLES WHERE ROW_FORMAT IN('Redundant', 'Compact') AND NAME NOT IN('SYS_DATAFILES', 'SYS_FOREIGN', 'SYS_FOREIGN_COLS', 'SYS_TABLESPACES', 'SYS_VIRTUAL', 'SYS_ZIP_DICT', 'SYS_ZIP_DICT_COLS');
Gibt man eine Liste der Tabellen, die nicht auf DYNAMIC stehen, aus.
Ein Beispielauszug.
| xxowncloud/oc_properties | Compact | | xxowncloud/oc_schedulingobjects | Compact | | xxowncloud/oc_share | Compact | | xxowncloud/oc_share_external | Compact |
Da es bei mir mehr als 1000 Zeilen waren, habe ich mit etwas einzeiler Script Magie (Dirty, hat aber geklappt) ein SQL Script generiert, um die Tabellen zu ändern.
Das Ergebnis des oberen SQL Kommandos in eine Datei als repair-inno.sql gespeichert.
Dann mit dem Einzeiler:
cat repair-inno.sql |awk '{ printf "ALTER TABLE `%s` ROW_FORMAT=DYNAMIC;\n",$2 }'|sed s'/\//\`.`/g'>innodb2dynamic.sql
die Datei in das hier gewandelt:
ALTER TABLE `xxowncloud`.`oc_properties` ROW_FORMAT=DYNAMIC; ALTER TABLE `xxowncloud`.`oc_schedulingobjects` ROW_FORMAT=DYNAMIC; ALTER TABLE `xxowncloud`.`oc_share` ROW_FORMAT=DYNAMIC; ALTER TABLE `xxowncloud`.`oc_share_external` ROW_FORMAT=DYNAMIC;
und mit mysql -u root -p ausgeführt.
Hat etwas gedauert, aber nun sind alle Tabellen geändert, wie ein erneuter Select Befehl zeigt.
Nun ist Ruhe im Error Log