Nextcloud

MySQL 行(row)フォーマットのセキュリティセットアップ警告対処について

Nextcloud 31 以降セキュリティ&セットアップ警告に、MySQLの行フォーマット(row_format)に関するセットアップ警告が追加されました。
参考情報: [Release notes / Upgrade to Nextcloud 31]

Nextcloud 24以降、MariaDB のテーブルフォーマットに row_format=Dynamic が設定されますが、Nextcloud 23以前にインストールされたシステムでは、row_format=Compressed 等が使用されています。

Dynamic 以外のテーブルフォーマットを使用している場合、パフォーマンス上の問題となる可能性もあるため、MySQL行フォーマットのセットアップ警告が表示されるようになりました。
※主に Nextcloud 23以前にインストールを行い、Nextcloud 31までアップグレードをしたシステムに表示される警告です

セットアップ警告の表示例

管理画面のセキュリティ&セットアップ警告、もしくは occ コマンドによるセットアップチェックにて次のようなメッセージが表示されます。

MySQLの行フォーマット: データベースに不正な行フォーマットが見つかりました。ROW_FORMAT=Dynamicは、Nextcloudで最高のデータベースパフォーマンスを提供します。以下のリストで行の形式を更新してください: {対象のテーブル名}

英語環境では次のように表示されます

Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: {対象のテーブル名}

MySQL 行フォーマットの変更方法

Nextcloud のサービスを停止(バックグラウンドジョブも停止)していることを確認してから、設定変更作業を実施します。以下はデータベースへログイン後の手順です。

  1. 現在のテーブルフォーマット設定状況の確認方法

    SELECT table_name, row_format FROM information_schema.tables WHERE table_schema = 'nextcloud' AND table_name LIKE 'oc_%';

    (※ = ‘nextcloud’ の箇所は実際に Nextcloud が使用しているデータベース名)

  2. row_format が Compressed のテーブルを dynamic 形式に変換(テーブルごとにALTERコマンドを実行)

    ALTER TABLE oc_migrations ROW_FORMAT = DYNAMIC;
    ALTER TABLE oc_appconfig ROW_FORMAT = DYNAMIC;
    -- 以下、対象テーブルごとに実行

注意点

テーブルフォーマットの変換には、追加で同等程度のディスク容量が必要です。
また、テーブルサイズによってはフォーマットの変更処理時間の考慮が必要です。
もちろん、データベースの事前バックアップも必要です。

以上、現場からお届けいたしました。