Вы открываете раздел «Обзор администрирования» в Nextcloud и видите сообщение: «В базе данных отсутствуют некоторые индексы». Это предупреждение может появиться после обновления, поскольку Nextcloud может добавлять новые индексы к существующим таблицам со временем, и не всегда создает их автоматически в больших базах данных. Отсутствие индексов может замедлить выполнение некоторых запросов к базе данных. Поддерживается использование встроенной occ db:add-missing-indicesкоманды для восстановления.
Перед изменением схемы убедитесь, что вы запускаете команду для правильной установки Nextcloud, создайте резервную копию базы данных и используйте пользователя операционной системы веб-сервера. В версиях, где это поддерживается командой, просмотрите предлагаемый SQL-запрос с помощью команды ` --dry-run.`. Затем запустите восстановление и снова проверьте раздел «Обзор администрирования».
Что означает это предупреждение
Индекс базы данных — это структура, которая помогает базе данных находить строки без сканирования всей таблицы. Nextcloud и его приложения определяют индексы для используемых ими таблиц и полей. Когда в более новой версии Nextcloud или приложения появляется индекс, которого еще нет в существующей установке, страница администратора может сообщить о несоответствии. Это предупреждение о необходимости обслуживания схемы; само по себе это не означает, что база данных повреждена или отсутствуют файлы пользователей.
В руководстве администратора Nextcloud указано, что индексы могут добавляться со временем, в том числе для повышения производительности, и администраторам рекомендуется выполнить occ db:add-missing-indicesкоманду `npm install index.html`. Добавление индекса может занять время, особенно для больших таблиц, а загрузка базы данных или поведение блокировок могут различаться в зависимости от механизма базы данных и рабочей нагрузки. Если ваш экземпляр загружен, планируйте внесение изменений в более спокойное время.
Перед запуском восстановления
- Подтвердите путь установки и версию. Выполняйте команды из каталога, содержащего скрипт нужной установки
occ, или укажите его полный путь. - Создайте резервную копию базы данных. Используйте стандартную процедуру резервного копирования для MariaDB/MySQL, PostgreSQL или SQLite. Убедитесь, что резервное копирование завершено и что вы знаете, как восстановить данные.
- Найдите HTTP-пользователя. Используйте учетную запись, под которой работает веб-сервер Nextcloud. Распространенные примеры:
www-dataDebian или Ubuntu, apacheFedora или CentOS, httpArch и wwwrunopenSUSE. Ваша конфигурация может отличаться. - Проверьте наличие параметров команды. В руководстве по администрированию стабильной версии Nextcloud 35 описана соответствующая информация
--dry-run. Если установленная вами версия не распознает этот параметр, обратитесь к occ db:add-missing-indices --helpвыводу этой версии и пропустите предварительный просмотр, вместо того чтобы предполагать, что параметр существует.
В официальном руководстве по резервному копированию перечислены база данных, конфигурация, каталог данных и другие компоненты установки, которые следует сохранить для полного резервного копирования. Для этой операции со схемой, как минимум, создайте проверенную резервную копию базы данных, используя процедуру, подходящую для вашей базы данных.
Шаг 1: Откройте командную строку в установленной системе Nextcloud.
Для традиционной установки Linux подключитесь к серверу по SSH и перейдите в каталог Nextcloud. Обычно в Ubuntu используется путь `<путь>` /var/www/nextcloud, но используйте путь на вашем сервере.
cd /var/www/nextcloud
sudo -E -u www-data php occ status
Убедитесь, что вывод состояния идентифицирует ожидаемый установленный экземпляр. Если вы используете другой исполняемый файл PHP для веб-сервера, отличный от используемого по умолчанию в оболочке php, используйте ту же совместимую версию PHP для occ. Запуск occот имени пользователя HTTP помогает сохранить ожидаемые права собственности и разрешения на файлы.
Шаг 2: Предварительный просмотр изменений индекса
Если это поддерживается вашей установленной версией, сначала выполните пробный запуск:
sudo -E -u www-data php occ db:add-missing-indices --dry-run
Предварительный запуск выполняет предварительный просмотр SQL-запросов без их применения. Прочитайте вывод и убедитесь, что он касается отсутствующих индексов, которые вы собираетесь восстановить. Если в выводе указана таблица или индекс, которые вы не узнаете, запишите их точное имя и проверьте, установлено ли и обновлено ли соответствующее приложение. Не вставляйте предварительно просмотренный SQL-код в консоль базы данных в качестве ярлыка.
Шаг 3: Добавьте недостающие индексы.
Когда ожидается предварительный просмотр и резервная копия будет готова, выполните описанную в документации команду восстановления:
sudo -E -u www-data php occ db:add-missing-indices
Эта команда проверяет таблицы базы данных и создает индексы, определенные в схеме, но отсутствующие в текущей установке. Дождитесь завершения процесса. В больших базах данных это может занять некоторое время. Избегайте прерывания процесса во время изменения схемы. В документации Nextcloud указано, что эту команду можно запускать, пока экземпляр находится в сети; режим обслуживания не указан в качестве предварительного условия для этого конкретного исправления. Следуйте собственному процессу управления изменениями, если требуется окно обслуживания.
Docker и другие типы установки
В контейнеризированном развертывании запускайте occприложение Nextcloud внутри контейнера приложения, а не в контейнере базы данных. Имена контейнеров и служб могут различаться, поэтому проверьте ваше развертывание и замените их правильным именем. Для контейнера Docker с именем nextcloudшаблон выглядит следующим образом:
docker exec --user www-data nextcloud php occ db:add-missing-indices
Для Docker Compose соответствующий шаблон выглядит так docker compose exec -u www-data <nextcloud-service> php occ db:add-missing-indices: . В некоторых готовых развертываниях используется отдельная команда или другой пользователь контейнера; используйте инструкции для этого конкретного пакета. Не копируйте имя контейнера из чужой конфигурации без предварительной проверки.
Если команда не выполнена или предупреждение остается.
- Отказано в доступе: проверьте пользователя HTTP и путь установки. Не решайте эту проблему, запуская команду от имени root, если только в документации к вашей системе развертывания специально не требуется привилегированный оберточный модуль; процесс PHP, как правило, должен запускаться от имени пользователя веб-сервера.
- Ошибка подключения к базе данных или ошибка PHP: проверьте журнал Nextcloud, состояние службы базы данных, настроенную версию PHP и вывод команды. Устраните основную проблему с подключением или во время выполнения, прежде чем повторно запускать команду схемы.
- Ошибка дублирования ключа или уникального индекса: остановитесь и сохраните полный текст ошибки. Она может указывать на конфликтующие строки, препятствующие созданию уникального индекса. Определите затронутое приложение и таблицу, подтвердите версии приложения и Nextcloud и проконсультируйтесь с сопровождающим приложения или администратором, знакомым с этой базой данных. Не удаляйте строки и не удаляйте индексы без диагностики данных и резервного копирования.
- Ошибка «Команда не найдена» или неподдерживаемый параметр: убедитесь, что вы используете правильную установку Nextcloud, и проверьте
php occ listэто php occ help db:add-missing-indicesкак пользователь HTTP. В более старых версиях могут быть недоступны все новые параметры. - Предупреждение по-прежнему отображается: Обновите обзор администрирования после успешного завершения команды. Ознакомьтесь с точными именами индексов и таблиц, указанными в предупреждении. Возможно, отсутствует несколько индексов, добавлен новый индекс после обновления приложения, произошла ошибка в работе базы данных или несоответствие схемы, которое эта команда не устранила.
Не путайте отсутствующие индексы с отсутствующими столбцами или первичными ключами. В документации Nextcloud для таких изменений схемы предусмотрены отдельные команды, например, db:add-missing-columnsи db:add-missing-primary-keys. Выполняйте другой способ восстановления только в том случае, если об этом сообщает администратор или это указано в документации для конкретной версии.
Проверьте результат.
- Дождитесь
db:add-missing-indicesзавершения работы программы и получения отчетов, например:Done. - Перезагрузите раздел «Обзор администрирования» и убедитесь, что предупреждение об отсутствующем индексе исчезло.
- Если проблема не исчезла, сравните точные имена таблиц и индексов с выводом команды, вместо того чтобы запускать ее вслепую.
- Проверьте журналы Nextcloud и состояние базы данных на наличие новых ошибок, затем убедитесь, что обычный доступ к файлам и приложения, использующие затронутые таблицы, по-прежнему работают.
- Сохраняйте резервную копию до тех пор, пока экземпляр не начнет нормально функционировать и ваша политика хранения не позволит ее удалить.
Актуальный синтаксис команд см. в справочнике команд базы данных и индекса Nextcloud . Требования к пользователям и PHP см. в разделах «Использование команды occ» и « Руководство по резервному копированию Nextcloud» . На этих стабильных страницах указано, что текущее руководство относится к Nextcloud Server 35 (по состоянию на 6 октября 2026 г.); пути, параметры и инструкции по упаковке могут отличаться в других версиях или типах развертывания.