Nextcloud 31.0.4 Incorrect Format ROW_FORMAT=Dynamic

What type of hardware are you using: Old laptop or computer
What YunoHost version are you running: 12.0.14
What app is this about: Nextcloud

Describe your issue

After upgrading Nextcloud from 30.0.9 to 31.0.4 in the admin overview, a warning explain few tables in the mysql database need use a FORMAT=Dynamic.

Après avoir mis à jour Nextcloud 30.0.9 vers 31.0.4 dans la Vue d’ensemble, un avertissement d’utiliser un FORMAT=Dynamic pour de nombreuses tables dans la base de données mysql.

Share relevant logs or error messages

https://paste.yunohost.org/raw/foragafice

I found a solution reading this post

I have edit a file and execute the mysql commands.
First put nextcloud on maintenance mode

yunohost app shell nextcloud
php occ maintenance:mode --on
exit

Then with mysql

mysql -u root
select table_name, row_format from information_schema.tables where table_schema = 'nextcloud';

I could see all the tables needing FORMAT=row

So I use this command, very long edited with a IDE, but another easiest solution as said later in this post is to use a script ( thanks @metyun ) Nextcloud 31.0.4 Incorrect Format ROW_FORMAT=Dynamic - #5 by metyun

USE nextcloud;
ALTER TABLE `oc_storages_credentials` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_ldap_group_mapping` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_preferences` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendar_appt_configs` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_activity_mq` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_known_users` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_text_steps` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_file_locks` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_addressbooks` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_circles_mount` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_vcategory` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_circles_membership` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendar_invitations` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_flow_checks` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_directlink` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_mounts` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_group_folders_acl` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_group_folders` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_group_folders_manage` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_systemtag` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_notifications_pushhash` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendar_resources` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_schedulingobjects` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_share_external` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_authorized_groups` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendarchanges` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_users` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_collres_collections` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_comments_read_markers` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_filecache` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_circles_circle` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_jobs` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_login_flow_v2` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendar_rooms` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendarobjects` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_share` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendar_reminders` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_group_admin` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_dav_cal_proxy` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_profile_config` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_group_user` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_ratelimit_entries` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_twofactor_backupcodes` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendar_rooms_md` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_whats_new` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_user_transfer_owner` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_circles_member` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_text_sessions` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_text_documents` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_collres_accesscache` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_user_status` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendarsubscriptions` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_flow_operations_scope` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_group_folders_groups` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_oauth2_access_tokens` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_files_trash` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_systemtag_object_mapping` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_circles_mountpoint` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_dav_shares` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_external_options` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendar_appt_bookings` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendarobjects_props` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_mimetypes` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_migrations` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_notifications_settings` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_direct_edit` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_properties` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_circles_remote` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_ldap_user_mapping` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_oauth2_clients` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_bruteforce_attempts` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_filecache_extended` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_recent_contact` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_privacy_admins` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_trusted_servers` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_cards_properties` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_vcategory_to_object` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_appconfig` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_circles_share_lock` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_circles_token` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_group_folders_trash` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendar_resources_md` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_accounts_data` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_circles_event` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_external_applicable` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_collres_resources` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_notifications` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_flow_operations` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_webauthn` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_twofactor_providers` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_cards` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_groups` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_authtoken` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_storages` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_calendars` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_external_mounts` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_accounts` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_comments` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_notes_meta` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_systemtag_group` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_activity` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_federated_reshares` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_external_config` ROW_FORMAT = DYNAMIC; ALTER TABLE `oc_addressbookchanges` ROW_FORMAT = DYNAMIC;

Then quit the maintenance mode

yunohost app shell nextcloud
php occ maintenance:mode --off
exit

It’s OK

3 Likes

Perhaps a script could do the job adapted from this one ?

1 Like

Certaines applications ne sont pas compatibles avec Nextcloud 31.0.4

ERROR - Impossible de mettre à jour nextcloud

2025-04-18 00:26:45,260: ERROR - Impossible de mettre à jour nextcloud : Une erreur s’est produite durant l’exécution du script de mise à niveau de l’application : The following apps are not (yet?) compatible with Nextcloud 31. You should make sure to upgrade the app, or disable it, or wait for it to become compatible before running this upgrade : login_notes

I didn’t find this topic yesterday when i upgraded nextcloud but i read the same post and i’ve adapted the script to be compatible with yunohost :

#!/bin/bash
password=$(grep db_pwd /etc/yunohost/apps/nextcloud/settings.yml | awk '{print $2}')

mysql -u nextcloud -p"$password" nextcloud -Bse "
SELECT CONCAT('ALTER TABLE \`', TABLE_NAME, '\` ROW_FORMAT=DYNAMIC;') 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'nextcloud' 
AND ENGINE = 'InnoDB'
" | mysql -u nextcloud -p"$password" nextcloud

I use root user to execute it to be able to read /etc/yunohost/apps/nextcloud/settings.yml and i put nextcloud in maintenance mode like you.

3 Likes

Many thanks, i’ve solved theses warnings !

If it could helps, i had to add these lines to solves all the warnings i have :

Summary

ALTER TABLE oc_ocsms_sendmessage_queue ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_albums ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_ampache_sessions ROW_FORMAT = DYNAMIC; ALTER TABLE oc_talk_bridges ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_bookmarks ROW_FORMAT = DYNAMIC; ALTER TABLE oc_ocsms_conversation_read_states ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_radio_stations ROW_FORMAT = DYNAMIC; ALTER TABLE oc_talk_commands ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_podcast_channels ROW_FORMAT = DYNAMIC; ALTER TABLE oc_ocsms_user_datas ROW_FORMAT = DYNAMIC; ALTER TABLE oc_talk_internalsignaling ROW_FORMAT = DYNAMIC; ALTER TABLE oc_talk_attendees ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_artists ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_genres ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_tracks ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_cache ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_ampache_users ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_playlists ROW_FORMAT = DYNAMIC; ALTER TABLE oc_ocsms_config ROW_FORMAT = DYNAMIC; ALTER TABLE oc_ocsms_smsdatas ROW_FORMAT = DYNAMIC; ALTER TABLE oc_music_podcast_episodes ROW_FORMAT = DYNAMIC; ALTER TABLE oc_talk_sessions ROW_FORMAT = DYNAMIC; ALTER TABLE oc_talk_rooms ROW_FORMAT = DYNAMIC;

ppr