Nextcloud アップデート後に「データベースに不正な行フォーマットが見つかりました。」の警告メッセージ

NextCloudで、「データベースに不正な行フォーマットが見つかりました。 ROW_FORMAT=Dynamicは、Nextcloudで最高のデータベースパフォーマンスを提供します。」の警告メッセージ

Nextcloud アップデート後にしたら、下記のエラーメッセージが警告メッセージが表示されました。

データベースに不正な行フォーマットが見つかりました。
ROW_FORMAT=Dynamicは、Nextcloudで最高のデータベースパフォーマンスを提供します。
以下のリストで行の形式を更新してください: oc_accounts, oc_accounts_data, oc_activity, 
oc_activity_mq, oc_addressbookchanges, oc_addressbooks, oc_appconfig, oc_authorized_groups, 
oc_authtoken, oc_bruteforce_attempts, oc_calendar_invitations, oc_calendar_reminders, 
oc_calendar_resources, oc_calendar_resources_md, oc_calendar_rooms, oc_calendar_rooms_md, 
oc_calendarchanges, oc_calendarobjects, oc_calendarobjects_props, oc_calendars, 
oc_calendarsubscriptions, oc_cards, oc_cards_properties, oc_circles_circle, oc_circles_event, 
oc_circles_member, oc_circles_membership, oc_circles_mount, oc_circles_mountpoint, 
oc_circles_remote, oc_circles_share_lock, oc_circles_token, oc_collres_accesscache, 
oc_collres_collections, oc_collres_resources, oc_comments, oc_comments_read_markers, 
oc_dav_cal_proxy, oc_dav_shares, oc_direct_edit, oc_directlink, oc_federated_reshares, 
oc_file_locks, oc_filecache, oc_filecache_extended, oc_files_trash, oc_flow_checks, 
oc_flow_operations, oc_flow_operations_scope, oc_group_admin, oc_group_user, oc_groups, 
oc_jobs, oc_known_users, oc_login_flow_v2, oc_migrations, oc_mimetypes, oc_mounts, 
oc_notifications, oc_notifications_pushhash, oc_notifications_settings, oc_oauth2_access_tokens, 
oc_oauth2_clients, oc_preferences, oc_privacy_admins, oc_profile_config, oc_properties, 
oc_ratelimit_entries, oc_recent_contact, oc_schedulingobjects, oc_share, oc_share_external, 
oc_storages, oc_storages_credentials, oc_systemtag, oc_systemtag_group, oc_systemtag_object_mapping, 
oc_text_documents, oc_text_sessions, oc_text_steps, oc_trusted_servers, oc_twofactor_backupcodes, 
oc_twofactor_providers, oc_user_status, oc_user_transfer_owner, oc_users, oc_vcategory, 
oc_vcategory_to_object, oc_webauthn, oc_whats_new. 詳細については、ドキュメント↗を参照してください。

警告メッセージの内容ですが、Nextcloudがバージョンアップ後にデータベーステーブルの ROW_FORMAT が Dynamic に変更されたのが原因です。
Nextcloudのパフォーマンスを最適化するために、テーブルの ROW_FORMAT=DYNAMIC に変更する必要があります。

警告メッセージの対処方法

MySQLやMariaDBで、テーブルの行フォーマットを DYNAMICに変更するSQLコマンドを実行すれば解決します

1.Nextcloudのメンテナンスモードを有効化する

$ sudo -u apache php /var/www/html/nextcloud/occ maintenance:mode --on

2.MariaDBにログインしてSQL分を実行する

# MariaDBにログイン
$ mysql -u root -p

# nextcloudのデータベースを選択する
$ USE nextcloud;

3.すべてのテーブルのROW_FORMATを変更

テーブル事に変更する場合は以下になりますが、テーブル数が多くて大変です

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

次のSQLでは、すべてのテーブルを変更する場合は、以下SQLでも変更可能です。こちらの方がお勧めです。

【SQL文】
SELECT CONCAT('ALTER TABLE ', table_name, ' ROW_FORMAT=DYNAMIC;’)
FROM information_schema.tables
WHERE table_schema = 'nextcloud’;

MariaDB [nextcloud]> SELECT CONCAT('ALTER TABLE ', table_name, ' ROW_FORMAT=DYNAMIC;') 
FROM information_schema.tables 
WHERE table_schema = 'nextcloud';
+-------------------------------------------------------------+
| CONCAT('ALTER TABLE ', table_name, ' ROW_FORMAT=DYNAMIC;')  |
+-------------------------------------------------------------+
| ALTER TABLE oc_accounts ROW_FORMAT=DYNAMIC;                 |
| ALTER TABLE oc_accounts_data ROW_FORMAT=DYNAMIC;            |
| ALTER TABLE oc_activity ROW_FORMAT=DYNAMIC;                 |
| ALTER TABLE oc_activity_mq ROW_FORMAT=DYNAMIC;              |
| ALTER TABLE oc_addressbookchanges ROW_FORMAT=DYNAMIC;       |
| ALTER TABLE oc_addressbooks ROW_FORMAT=DYNAMIC;             |
| ALTER TABLE oc_appconfig ROW_FORMAT=DYNAMIC;                |
#------------- 以下省略 -------------

4.メンテナンスモードをオフにする

$ sudo -u apache php /var/www/html/nextcloud/occ maintenance:mode --off

5.Nextcloudのデータベースを最適化

$ sudo -u apache php /var/www/html/nextcloud/occ db:add-missing-indices
$ sudo -u apache php /var/www/html/nextcloud/occ db:add-missing-columns

MariaDBの設定について

ROW_FORMAT=DYNAMIC を有効にするには、InnoDBの innodb_file_per_table=1 が有効になっている ことを確認してください。

# /etc/my.cnf.d/mariadb-server.cnf (または /etc/my.cnf)に以下を追加する
$ sudo vim /etc/my.cnf.d/mariadb-server.cnf

[mysqld]
innodb_file_per_table=1
innodb_large_prefix=on
innodb_default_row_format=DYNAMIC

# 設定変更後は再起動
$ sudo systemctl restart mariadb

 

スポンサーリンク

0
0