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