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 esquema
nextcloud
especificado. - Asegúrate de que tu 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.