data django database-backups database-restore

data - export db django



cómo hacer una copia de seguridad de una django db (2)

Tengo una aplicación Django que usa una base de datos Postgres. Necesito poder hacer una copia de seguridad y restaurar la base de datos, tanto para asegurar que no se pierda ningún dato como para poder copiar los datos del servidor de producción al servidor de desarrollo durante las pruebas.

Parece que hay algunas maneras diferentes de hacer esto:

  1. Simplemente interactuar con la db directamente. Entonces, para Postgres podría escribir un script usando pg_dumpall y psql .

  2. Use los comandos sqlclear / sqlall que vienen con Django.

  3. Use los comandos dumpdata / loaddata que vienen con Django. Así que cree nuevos dispositivos a partir de la base de datos que desea respaldar y luego cárguelos en la base de datos que desea restaurar.

  4. Utilice un plugin de Django como django-dbbackup .

Realmente no entiendo los pros / contras de estas diferentes técnicas.

Acabo de salir de mi cabeza: la opción 1 es específica de la base de datos y la opción 3 parece más adecuada para configurar los datos iniciales. Pero todavía no estoy seguro de qué ventajas tiene la opción 4 sobre la opción 2.


El problema con las opciones 1-3 es que los archivos multimedia (todo lo que se FileField través de FileField ) no se incluyen en la copia de seguridad. Es posible hacer una copia de seguridad por separado del directorio que contiene los archivos multimedia. Sin embargo, dado que Django no elimina los archivos cuando ya no son referenciados por un FileField , inevitablemente terminará con archivos en la copia de seguridad que no necesitan estar allí.

Es por eso que me gustaría ir con la opción # 4. En particular, recomiendo django-archive * . Algunas de sus características incluyen:

  • Vuelca el contenido de todos los modelos importantes (por defecto, ContentType , Permission y Session se excluyen porque están poblados por manage.py migrate ) y le permite elegir modelos adicionales para excluir.

  • Incluye los archivos multimedia referenciados por los campos FileField e ImageField . Tenga en cuenta que solo se incluyen los archivos referenciados por filas en la base de datos; los archivos dejados por las filas eliminadas se ignoran.

  • Produce un archivo único que contiene tanto la copia de seguridad de la base de datos como los archivos multimedia.

  • Proporciona opciones para personalizar la ubicación donde se deben almacenar los archivos, el formato del nombre de archivo y el tipo de archivo ( gz y bz2 ).

La instalación es tan simple como agregar django_archive a INSTALLED_APPS y configurar las opciones en settings.py si es necesario. Una vez instalado, puede crear inmediatamente un archivo de toda su base de datos (incluidos los archivos multimedia) ejecutando:

./manage.py archive

* Descargo de responsabilidad: soy el autor del paquete


Para copias de seguridad regulares, optaría por la opción 1, utilizando la herramienta nativa de PostgreSQL, ya que es probablemente la más eficiente.

Yo diría que la opción 2 está principalmente relacionada con la creación de tablas y la carga de datos iniciales, por lo que no es adecuada para copias de seguridad.

La opción 3 se puede usar para copias de seguridad y sería particularmente útil si necesita migrar a una plataforma de base de datos diferente, ya que los datos se vuelcan en un formulario que no es de SQL, es decir, JSON lo entiende Django.

Opción 4: el complemento parece estar utilizando las propias herramientas de copia de seguridad de db (según la opción 1) pero, además, proporciona ayuda para llevar sus copias de seguridad al almacenamiento en la nube en Amazon S3 o Dropbox