UniFi — устранение проблем с базой данных в приложении UniFi Network

Используйте эту статью для восстановления базы данных неисправного приложения UniFi Network. Обратите внимание: это относится только к пользователям, самостоятельно размещающим последнюю версию сервера UniFi Network на своих машинах Windows/macOS/Linux. Устаревшие (Gen 1) системы.

Пользователи, запускающие приложение UniFi Network устаревшим способом (Vintage CloudKey Gen 1 или 32-битный сервер UniFi Network), могут найти информацию в последнем разделе статьи. Эти системы больше не поддерживаются, и мы обычно рекомендуем обновиться до последней версии приложения UniFi Network или добавить UniFi Console для максимально простого опыта и легкой масштабируемости.

Симптомы

  • Статистика записывается только в течение нескольких дней, а затем обрывается или доступна лишь периодически.
  • Не удается создать резервные копии, включающие данные статистики.
  • Резервные копии только настроек не завершаются или создаются, но не могут быть восстановлены из-за повреждения.
  • При попытке открыть UniFi Network возникает ошибка 400.
  • Служба приложения UniFi Network не запускается из-за ошибок базы данных.

Восстановление базы данных в Linux на базе Debian

  1. Остановите службу UniFi
    service unifi stop
  2. В некоторых случаях, когда журнал поврежден, перед восстановлением базы данных полезно выполнить следующую команду, чтобы переместить его в другое место:
    mv -vi /usr/lib/unifi/data/db/journal /usr/lib/unifi/data/db/journal-$(date -I)
  3. Восстановите базу данных с помощью этой команды:
    mongod --dbpath /usr/lib/unifi/data/db --logpath /usr/lib/unifi/logs/mongod.log --repair
  4. Наконец, перезапустите службу UniFi:
    service unifi start
    1. Примечание: Если этот процесс выполнялся от имени root, владелец файлов мог измениться. Это можно исправить с помощью:
      chown -R unifi:unifi /usr/lib/unifi/data/db/
      chown -R unifi:unifi /usr/lib/unifi/logs/

Если у вас все еще есть подозрения на проблемы с базой данных, перейдите на CloudKey Gen2 Plus или Dream Machine Pro. Эти UniFi Console не подвержены такому типу повреждения базы данных.

Восстановление базы данных в macOS

  1. Создайте временную рабочую директорию. Для целей восстановления назовем ее /repair. В терминале:
    mkdir ~/repair
  2. Посетите официальный сайт загрузки MongoDB и загрузите .tgz-релиз, соответствующий архитектуре процессора вашего сервера.
    1. Вы также можете напрямую загрузить 2.4.14 здесь: 2.4.14.tgz.
  3. Переместите загруженный пакет в рабочую директорию и распакуйте его, дважды щелкнув по нему или с помощью приложения по вашему выбору.
  4. Найдите файл bin/mongo и скопируйте его в рабочую директорию. На этом этапе загруженный .tgz-пакет и любые дополнительные извлеченные файлы можно удалить, так как нам нужен только бинарный файл mongo.
  5. Откройте Терминал и перейдите в рабочую директорию:
    cd ~/repair
  6. Закройте или остановите UniFi.
  7. Восстановите базу данных с помощью этой команды:
    mongod --dbpath ~/Library/Application\ Support/UniFi/data/db --logpath ~/Library/Application\ Support/UniFi/logs/mongod.log --repair
  8. Откройте приложение UniFi из Finder:
    open -n /Applications/UniFi.app

Если у вас все еще есть подозрения на проблемы с базой данных, перейдите на CloudKey Gen2 Plus или Dream Machine Pro. Эти UniFi Console не подвержены такому типу повреждения базы данных.

Восстановление базы данных в Windows

  1. Посетите официальный сайт загрузки MongoDB и загрузите .zip-релиз, соответствующий архитектуре вашего процессора.
    1. Примечание: Минимальная требуемая версия MongoDB — 3.6, максимальная — 4.4.
  2. Извлеките \bin\mongod.exe в рабочую директорию по вашему выбору. В этом примере мы будем использовать C:\repair\. Все остальные файлы в .zip можно игнорировать.
  3. Закройте или остановите UniFi.
  4. Откройте командную строку, нажав WINDOWS + R. Во всплывающем окне введите cmd и нажмите ENTER.
  5. Перейдите в рабочую директорию:
    cd C:\repair\
  6. Восстановите базу данных с помощью этой команды:
    mongod.exe --dbpath "%userprofile%\Ubiquiti UniFi\data\db" --logpath "%programfiles%\Ubiquiti UniFi\logs\mongod.log" –repair
  7. Откройте приложение UniFi.

Если у вас все еще есть подозрения на проблемы с базой данных, перейдите на CloudKey Gen2 Plus или Dream Machine Pro. Эти UniFi Console не подвержены такому типу повреждения базы данных.

Устаревшие инструкции

Ограничения 32-битной MongoDB

Коллекции 32-битной MongoDB ограничены общим размером в 2 ГБ. При использовании механизма хранения MMAPv1 это может вызывать проблемы при попытке уменьшить совокупный размер коллекций. При выполнении команды compact в MongoDB база данных перезаписывается и дефрагментируется без коррекции ошибок. Этот процесс не возвращает используемое дисковое пространство на UniFi Console, когда механизм хранения — MMAPv1.

Для возврата этого ценного дискового пространства в экземпляре 32-битной MongoDB потребуется восстановление базы данных. Это восстановление может понадобиться тем, кто подозревает недопустимые записи, повреждение или проблемы с масштабированием коллекций. Для возможности восстановления базы данных на CloudKey должно быть достаточно свободного дискового пространства, равного размеру текущего набора данных плюс 2 гигабайта. Если набор данных уже вырос слишком большим для выполнения команды db.repairDatabase(), ниже приведены инструкции для обхода этой проблемы.

Примечание: Устаревший CloudKey (UC CK) использует следующее:

  • 32-битная архитектура
  • MMAPv1
  • MongoDB версии 2.4.10
Восстановление базы данных Vintage CloudKey (Gen 1)
  1. Установите SSH-соединение с CloudKey.
  2. Загрузите скрипт очистки mongo. Как написано, скрипт будет сохранять записи только за последние 7 дней. Он не удалит записи, необходимые для администрирования UniFi. Выполните следующую команду:
    cd /tmp/
    wget https://help.ui.com/hc/en-us/article_attachments/360008640574/CK_repair.js
  3. Остановите службу UniFi:
    service unifi stop
  4. Служба UniFi завершит процесс mongo. Убедитесь, что служба UniFi полностью остановлена. Восстановите базу данных, чтобы сжать записи данных и освободить неиспользуемое дисковое пространство, включенное в критерии запроса.
    mongod --dbpath /usr/lib/unifi/data/db --logpath /usr/lib/unifi/logs/server.log --repair
    1. ПРИМЕЧАНИЕ: Шаги 5-8 являются необязательными, если вам нужно сократить базу данных для экономии дискового пространства.
  5. Перезапустите mongo, используя:
    mongod --dbpath /usr/lib/unifi/data/db --logpath /usr/lib/unifi/logs/server.log --journal --bind_ip 127.0.0.1 --fork
    1. ПРИМЕЧАНИЕ: Ведение журнала (journaling) может быть не включено в вашей базе данных mongo. Если это так, удалите опцию --journal в приведенной выше команде.
  6. Выполните скрипт для очистки коллекций stat, вызывающих проблему:
    mongo < /tmp/CK_repair.js
  7. Завершите работу сервера mongo с помощью этой команды:
    mongod --dbpath /usr/lib/unifi/data/db --logpath /usr/lib/unifi/logs/server.log --shutdown
    1. Примечание: Последняя команда в скрипте CK_repair.js — "db.repairDatabase()". Она может привести к ошибке, если коллекции статистики уже выросли слишком большими для восстановления во время работы сервера mongo. Если вы увидите такую ошибку при выполнении скрипта, вам потребуется снова восстановить базу данных из командной строки, выполнив команду из шага 3.
  8. Наконец, перезапустите службу UniFi:
    service unifi start

Теперь CloudKey должен быть способен запустить приложение Network. Если у вас все еще есть проблемы с базой данных, обновитесь до последнего CloudKey Gen2 Plus, который не имеет этой проблемы.

Миграция с MMAPv1 на WiredTiger

Внимание: Этот раздел не относится к консолям с 32-битной архитектурой, включая UC-CK G1.

После того как UniFi Network снова станет функциональным, пользователь может захотеть перенести его на механизм хранения WiredTiger.

Чтобы проверить, сколько места используется, выполните следующую команду:

du -shc /usr/lib/unifi/data/db/ace* /usr/lib/unifi/data/db/journal/* /usr/lib/unifi/data/db/local* | grep total

Чтобы проверить, какая версия MongoDB используется, выполните:

mongod --version | grep "db version"

Чтобы проверить, какая версия механизма хранения используется, выполните следующие две команды:

mongo localhost:27117
db.serverStatus().storageEngine.name

Как перенестись на WiredTiger

  1. Создайте резервную копию в разделе Настройки > Обслуживание > Резервное копирование с желаемыми настройками хранения.
  2. Удалите UniFi из Windows или macOS. Очистите UniFi из Linux на базе Debian с помощью команды:
    sudo dpkg -P unifi
  3. Переустановите UniFi на Windows или macOS. Переустановите UniFi на Linux на базе Debian с помощью команд:
    cd /tmp/
    wget <ссылка для загрузки>
    sudo dpkg -i unifi_sysvinit_all.deb
  4. В мастере настройки UniFi восстановите резервную копию из шага 1.

Была ли эта статья полезной?

Возврат к списку

Каталог
Главная Каталог Поиск Корзина Кабинет