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
ディスカッション
コメント一覧
まだ、コメントがありません