«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 requeririnnodb_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.