2014-01-10 2 views
26

나는 Postgres DB를 사용하는 Django 응용 프로그램을 가지고 있습니다. db를 백업하고 복원 할 수 있어야합니다. 데이터 손실을 방지하고 테스트 중에 프로덕션 서버에서 개발 서버로 데이터를 복사 할 수 있어야합니다.django db를 백업하는 방법

1) 그냥 직접 DB와 상호 작용 :

이 할 수있는 몇 가지 방법이있을 것 같다. 따라서 Postgres의 경우 pg_dumpall과 psql을 사용하여 스크립트를 작성할 수 있습니다.

2) 장고와 함께 제공되는 "sqlclear/sqlall"명령을 사용하십시오.

3) Django와 함께 제공되는 "dumpdata/loaddata"명령을 사용하십시오. 그래서 당신이 백업하고자하는 DB에서 새로운 조명기를 생성하고 복원하고자하는 DB에로드하십시오.

4) django-dbbackup과 같은 장고 플러그인을 사용하십시오.

나는이 다른 기술의 장단점을 정말로 이해하지 못합니다.

필자의 머리 꼭대기에서 옵션 1은 db에만 해당되며 옵션 3은 초기 데이터 설정에 더 적합합니다. 그러나 옵션 4가 옵션 2보다 어떤 이점을 가지고 있는지 확실하지 않습니다.

고마워.

+0

왜 해달라고 패키지의 저자 전체 데이터베이스 복사본을 만들면됩니까? http://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP – karthikr

+2

django-dbbackup도 작동합니까? 거기에 코드가 있음을 분명히 볼 수 있습니다. https://bitbucket.org/mjs7231/django-dbbackup/src/4702d2cf91987fd8a4122b95afca5d42cd477d00/dbbackup/storage/s3_storage.py?at=default#cl-56 – vartec

+0

@ karthikr - 작동하지만 명령은 Postgres에만 해당됩니다. 기본 db가 변경되면 스크립트를 다시 작성해야합니다. – trubliphone

답변

16

정규 백업의 경우 PostgreSQL 자체 도구를 사용하여 옵션 1을 선택하는 것이 가장 효율적일 수 있습니다.

나는 옵션 2가 주로 테이블을 만들고 초기 데이터를로드하는 것에 관심이 있으므로 백업에는 적합하지 않다고 주장합니다.

옵션 3은 백업용으로 사용할 수 있으며 데이터가 비 SQL 형식 (예 : 장고가 이해하는 JSON)으로 덤프되기 때문에 다른 데이터베이스 플랫폼으로 마이그레이션해야하는 경우 특히 유용합니다.

옵션 4 플러그인 (옵션 1에 따라) dB 자신의 백업 도구를 사용하고있는 것으로 나타나지만 추가로 아마존 S3 또는 보관

+1

데이터베이스를 백업/복원하기 위해 파이썬 스크립트를 작성했습니다. 그들은 Django 설정 모듈에서 어떤 유형의 db인지 파악합니다. 현재는 포스트그레스 만 지원합니다. 그러나 다른 형식의 갈고리가 있습니다. – trubliphone

17

에서 클라우드 스토리지에있는 옵션 1-3의 문제를 백업을 밀어 도움말을 제공합니다 해당 미디어 파일 (FileField을 통해 올린 파일)은 이며 백업에는이 포함되어 있지 않습니다. 미디어 파일이 들어있는 디렉토리를 별도로 백업 할 수 있습니다. 그러나 Django는 더 이상 FileField에 의해 참조되지 않을 때 파일을 제거하지 않기 때문에, 필연적으로 거기에있을 필요가없는 백업의 파일로 끝납니다.

그래서 제가 옵션 # 4로 갈 것입니다. 특히 django-archive*을 사용하는 것이 좋습니다. 그 기능 중 일부는 다음과 같습니다 :

  • (기본값 ContentType, Permission에 의해, 그리고 Session 그들이 manage.py migrate에 의해 채워되기 때문에 제외) 모든 중요한 모델의 내용을 덤프 및 제외 추가 모델을 선택할 수 있습니다.

  • FileFieldImageField 필드로 참조되는 미디어 파일을 포함합니다. 데이터베이스의 행에서 참조하는 파일 만 포함됩니다. 삭제 된 행에 의해 남겨진 파일은 무시됩니다.

  • 데이터베이스 백업 및 미디어 파일을 모두 포함하는 단일 아카이브를 생성합니다.

  • 아카이브를 저장해야하는 위치, 파일 이름 형식 및 아카이브 유형 (gzbz2)을 사용자 정의 할 수있는 옵션을 제공합니다.

설치가 필요한 경우 settings.py에서 옵션을 INSTALLED_APPSdjango_archive를 추가하고 설정하는 것만 큼 간단합니다. 설치되면, 즉시 실행하여 (미디어 파일 포함) 전체 데이터베이스의 아카이브를 만들 수 있습니다

./manage.py archive 

* 면책 조항 : 내가

+1

좋은 지적입니다. 특정 프로젝트의 경우 미디어 파일에 대해 걱정할 필요가 없었습니다. 그러나 다른 사용자가 패키지를 유용하게 사용할 수 있습니다. – trubliphone