Резервное копирование SQLite с использованием Windows DFS Replication - PullRequest
5 голосов
/ 03 октября 2019

У меня есть приложение, которое использует SQLite для хранения, и мне интересно, безопасно ли использовать Windows DFS Replication для резервного копирования файла базы данных на второй сервер, который имеет экземпляр холодного резерваприложение установлено.

Потенциально важные сведения:

  1. Хотя DFS поддерживает двустороннюю репликацию, в этом случае записывается только основной файл БД, поэтому репликация фактически односторонняя. .
  2. Главный файл БД находится на том же сервере, что и процесс, выполняющий запись в него.
  3. В настоящее время SQLite настроен на использование стандартного журнала отката , ноЯ мог бы при необходимости переключиться на Журнал записи вперед .

Если DFS блокирует основной файл БД во время репликации, то я думаю, что этот подход может работать, пока блокировка не работаетдержится слишком долгоОднако я не могу найти достаточную информацию о том, как реализована DFS.

ОБНОВЛЕНИЕ: я реализовал это в тестовой среде, и он работал в течение нескольких дней. За это время я не столкнулся с какими-либо проблемами, поэтому я испытываю желание пойти с этим решением.

1 Ответ

2 голосов
/ 13 октября 2019

Учитывая, что Репликация DFS ориентирована на файлы и папки:

Репликация DFS - это эффективный механизм репликации с несколькими основными устройствами, который можно использовать для синхронизации папок между серверами. через сетевые соединения с ограниченной пропускной способностью.

Я бы, вероятно, попытался бы избежать этого, если бы вы заботились о согласованности и сохранности всех ваших данных, как указано в документации резервного копирования SQLite :

Исторически резервные копии (копии) баз данных SQLite создавались с использованием следующего метода:

  1. Установка общей блокировки для файла базы данных с помощью API SQLite (т. Е. Инструмента оболочки).
  2. Скопируйте файл базы данных с помощью внешнего инструмента (например, утилиты unix 'cp' или команды DOS 'copy').
  3. Снимите общую блокировку файла базы данных, полученного на шаге. 1.

Эта процедура хорошо работает во многих случаях и обычно очень быстра. Однако этот метод имеет следующие недостатки:

  1. Любые клиенты базы данных, желающие записать файл базы данных во время создания резервной копии, должны дождаться снятия общей блокировки.
  2. Itнельзя использовать для копирования данных в базы данных в памяти или из них.
  3. Если во время копирования файла базы данных происходит сбой питания или сбой операционной системы, резервная база данных может быть повреждена после восстановления системы.

В случае DFS, он даже не заблокирует базу данных перед копированием.

Я думаю, что вам лучше всего использовать какую-то горячую репликацию, вы можете использовать API онлайн-резервного копирования SQLite , вы можете проверить это руководство на , создавая горячее резервное копирование с помощью API онлайн-резервного копирования .

Или, если вы хотите что-то более простое, вы можете попробовать SymmetricDS , систему репликации базы данных с открытым исходным кодом, совместимую с SQLite.

Есть и другие варианты (например, litereplicator. io), но этот был закрытым исходным кодом и ограничен старыми версиями SQLite и базами данных размером ~ 50 МБ

ps. Я бы, вероятно, отошел от SQLite, если вам действительно нужны HA, репликация или подобные функции. В зависимости от выбранного языка программирования, скорее всего, у вас уже есть абстрагированный уровень БД, и вы можете использовать MySQL или PosgreSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...