Ir al contenido

Dar solución al aviso «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:

Algunas tablas de la base de datos no utilizan el formato de fila recomendado «DYNAMIC».

Esta guía te 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: Define el nombre de tu base de datos

Empieza por definir el nombre de tu base de datos Nextcloud como una variable para poder reutilizarla en todos los comandos:

NOMBRE_DB="nextcloud"

Reemplaza"nextcloud"por el nombre real de tu base de datos.

Paso 2: Comprueba el formato de fila actual de las tablas

Comprueba qué tablas no utilizan ROW_FORMAT=DYNAMIC.

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

Nota: En versiones anteriores a MariaDB 11.7 utilizar mysql

Probablemente verás 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: Realiza una copia de seguridad de tu base de datos

Antes de realizar cualquier cambio, crea una copia de seguridad completa de tu base de datos Nextcloud.

mariadb-dump «$NOMBRE_DB» > «${NOMBRE_DB}_respaldo.sql»

Nota: En versiones anteriores a MariaDB 11.7 utilizar mysqldump

Asegúrate 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 genera 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

Aplica 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

Confirma que todas las tablas ahora utilizan el formato correctoROW_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 tienes 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 utilizaROW_FORMAT=Compressed), aparecerá una advertencia..

Notas

  • Esta solución solo afecta a las tablas dentro del esquemanextcloudespecificado.
  • Asegúrate de que tu configuración de InnoDB admiteROW_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.

 

 

pieterbakker.com