«Formato de fila incorrecto» tras actualizar a Nextcloud Hub 10 (31.0.0)

Después de actualizar a Nextcloud Hub 10 (versión 31.0.0), es posible que aparezca la siguiente advertencia en la sección Configuraciones de administración > Vista general:

Esta guía le ayuda a solucionarlo de manera eficiente utilizando herramientas nativas de MariaDB/MySQL, sin depender de scripts que pueden no funcionar siempre en todos los entornos.

Paso 1: Nombre de la base de datos

Defina el nombre de su base de datos Nextcloud como una variable para poder reutilizarla en todos los comandos:

NOMBRE_DB="nextcloud"

Reemplace nextcloud por el nombre real de su base de datos.

Paso 2: Formato de fila actual de las tablas

Compruebe qué tablas no utilizan ROW_FORMAT=DYNAMIC.

mariadb -e "
SELECT table_name, row_format 
FROM information_schema.tables 
WHERE table_schema = 'NOMBRE_DB';
"

Probablemente verá una mezcla de formatos dinámicos y comprimidos:

+-----------------------------+------------+
| table_name | row_format |
+-----------------------------+------------+
| oc_systemtag | Compressed |
| oc_twofactor_backupcodes | Compressed |
| oc_preferences_ex | Dynamic |
...

Paso 3: Realice una copia de seguridad de su base de datos

Antes de realizar cualquier cambio, cree una copia de seguridad completa de su base de datos Nextcloud.

mariadb-dump NOMBRE_DB > NOMBRE_DB_respaldo.sql

Asegúrese de probar el proceso de restauración de la copia de seguridad en un entorno de prueba, si es posible.

Paso 4: Generar sentencias ALTER TABLE

Ahora genere una lista de sentencias ALTER TABLE para todas las tablas que aún no estén configuradas como DYNAMIC:

mariadb -s -e "
SELECT CONCAT(
  'ALTER TABLE \`', TABLE_NAME, '\` ROW_FORMAT=DYNAMIC;'
) AS _alter 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'NOMBRE_DB' 
AND ENGINE='InnoDB' 
AND ROW_FORMAT <> 'DYNAMIC';
" > nc_altera_formato_fila_a_dynamic.sql

Paso 5: Ejecutar las sentencias ALTER

Aplique los cambios directamente a la base de datos:

mariadb NOMBRE_DB < nc_altera_formato_fila_a_dynamic.sql

(Opcional: registrar la salida para auditoría)

mariadb NOMBRE_DB < nc_altera_formato_fila_a_dynamic.sql | tee alter.log

Paso 6: Verificar los cambios

Confirme que todas las tablas ahora utilizan el formato correcto ROW_FORMAT=DYNAMIC:

mariadb -e "
SELECT table_name, row_format 
FROM information_schema.tables 
WHERE table_schema = 'NOMBRE_DB' 
AND row_format <> 'DYNAMIC';
"

Si no se muestra ninguna fila, ya lo tiene todo listo.

Por qué ocurre esto

Nextcloud 31 esperas ROW_FORMAT=DYNAMIC por motivos de compatibilidad y rendimiento, especialmente en InnoDB. Si tu servidor MySQL/MariaDB tiene tablas creadas antes de que eso fuera el valor predeterminado (o utiliza ROW_FORMAT=Compressed), aparecerá una advertencia..

  • Esta solución solo afecta a las tablas dentro del esquema nextcloud especificado.

  • Asegúrese de que su configuración de InnoDB admite ROW_FORMAT=DYNAMIC. Por lo general, es seguro, pero las versiones anteriores de MariaDB pueden requerir innodb_file_format = Barracuda.

Consideraciones finales

Este método es fiable, reproducible y no requiere scripts ni herramientas de terceros. Solo SQL y unos pocos comandos de shell: ideal para administradores de sistemas que gestionan varias instancias de Nextcloud.

PietterBakker.com