Как создать резервную копию django db
У меня есть приложение Django, использующее Postgres db. Мне нужно иметь возможность резервного копирования и восстановления db - как для того, чтобы не потерять данные, так и иметь возможность копировать данные с производственного сервера на сервер разработки во время тестирования.
Кажется, есть несколько способов сделать это:
1) Просто взаимодействуйте с db напрямую. Итак, для Postgres я могу написать script с помощью pg_dumpall и psql.
2) Используйте команды "sqlclear/sqlall", которые поставляются с Django.
3) Используйте команды "dumpdata/loaddata", которые поставляются с Django. Итак, создайте новые светильники из db, которые вы хотите создать, и затем загрузите их в db, который хотите восстановить.
4) Используйте плагин Django, например django-dbbackup.
Я действительно не понимаю плюсы и минусы этих разных методов.
Как раз в верхней части моей головы вариант 1 имеет значение db, а опция 3 больше подходит для настройки исходных данных. Но я все еще не уверен, какие преимущества у опции 4 есть над вариантом 2.
Спасибо.
Ответы
Ответ 1
Для регулярных резервных копий я бы выбрал вариант 1, используя собственный собственный инструмент PostgreSQL, так как он, вероятно, наиболее эффективен.
Я бы сказал, что вариант 2 в первую очередь связан с созданием таблиц и загрузкой исходных данных, поэтому не подходит для резервного копирования.
Вариант 3 может использоваться для резервного копирования и будет особенно полезен, если вам нужно будет перейти на другую платформу базы данных, поскольку данные будут сбрасываться в форме, отличной от SQL, то есть JSON, понятной Django.
В варианте 4 плагин, по-видимому, использует собственные средства резервного копирования db (в соответствии с опцией 1), но дополнительно предоставляет помощь для резервного копирования ваших резервных копий в облачное хранилище в Amazon S3 или Dropbox
Ответ 2
Проблема с вариантами 1-3 заключается в том, что медиа файлы (все, что загружено через FileField
) не включены в резервную копию. Можно отдельно зарезервировать каталог, содержащий файлы мультимедиа. Однако, поскольку Django не удаляет файлы, когда они больше не ссылаются на FileField
, вы неизбежно окажетесь в резервных копиях, которые не должны быть там.
Вот почему я бы пошел с опцией №4. В частности, я рекомендую django-archive *. Некоторые из его функций включают в себя:
-
Сбрасывает содержимое всех важных моделей (по умолчанию ContentType
, Permission
и Session
исключаются, так как они заполняются manage.py migrate
) и позволяют выбирать дополнительные модели для исключения.
-
Включает медиафайлы, на которые ссылаются поля FileField
и ImageField
. Обратите внимание, что включены только файлы, на которые ссылаются строки в базе данных; файлы, оставленные удаленными строками, игнорируются.
-
Создает один архив, содержащий как резервные копии базы данных, так и медиафайлы.
-
Предоставляет параметры для настройки места хранения архивов, формата имени файла и типа архива (gz
и bz2
).
Установка выполняется так же просто, как добавление django_archive
в INSTALLED_APPS
и настройка параметров в settings.py
при необходимости. После установки вы можете сразу создать архив всей своей базы данных (включая медиафайлы), выполнив:
./manage.py archive
* Отказ от ответственности: Я являюсь автором пакета