본문 바로가기
카테고리 없음

장고에서 DB에 있는 데이터 백업하고 옮기는 법

by Enhydra lutris 2024. 9. 4.

개발 및 운영 과정에서 데이터 백업이나 서버 간의 데이터 이전이 필요한 상황이 자주 발생합니다.

이를테면 다음과 같은 경우들이 있습니다.

  1. 데이터베이스 장애 시 복구: 예기치 않은 DB 문제로 인해 장애가 발생할 경우, 신속한 복구를 위해 사전에 백업된 데이터가 필수적입니다.
  2. 서버 배포 전 데이터 전송: 특정 환경에서 데이터를 미리 세팅한 후, 이를 실제 서비스 환경으로 옮겨 정상적인 초기 세팅을 보장해야 할 때도 데이터 이전이 필요합니다.
  3. 실제 데이터를 활용한 테스트 환경 구성: 테스트 서버에서 실 서비스 환경과 유사한 테스트를 진행하기 위해 실제 데이터를 받아와 정확한 테스트 결과를 도출해야 하는 경우도 빈번합니다.

장고는 백업과 데이터를 옮기는 명령어를 제공 하고 있습니다.

dumpdata라는 명령어는 DB의 데이터를 json 형태로 저장해주고,

loaddata 라는 명령어는 json 형태의 데이터를 DB에 넣어줍니다. 즉, json 형태의 파일이 있다면 DB에 간단하게 데이터를 넣을 수 있습니다.

 

dumpdata  명령어

 

1. DB에 있는 모든 데이터 받아오기

python manage.py dumpdata > 파일명.json

 

 

2. 특정 데이터만 받아오기

python manage.py dumpdata 앱이름 > 파일명.json

 

3. 특정 데이터만 제외하고 받아오기

python manage.py dumpdata --exclude 앱이름 > 파일명.json

 

dumpdata 후 ls로 파일을 확인해보면 해당 json 파일이 생성된것을 볼수있다.

loaddata 명령어

python manage.py loaddata 파일명.json

 

 

사용법

어떤 os를 사용하냐, 어떤 프로토콜을 사용하느냐에 따라 명령어는 달라지겠지만 기본적으로 아래와 같은 프로세스를 따르면 됩니다.

 

백업: 가져올 데이터가 있는곳에 접속 > 가상환경 활성화 > webapps로 이동 > dummpdata 명령어 > 추출한 파일 이동

데이터 받기: 데이터 받아올 곳에 접속 >  가상환경 활성화 >  webapps로 이동 > loaddata 명령어

 

아래에서 보여드릴 예제에는 서버에 접속할때 ssh, 추출한 데이터를 다른곳으로 다운 받을때 sftp를 사용하지만 ssh 대신 mosh를 sftp 대신 rsync, scp등을 사용하셔도 됩니다. 

 

예제

실제로 서버에 있는 데이터를 로컬로 옮겨주세요~ 라는 요청을 받으면 어떻게 해야 할까요?

ssh로 서버에 접속하여 sftp로 데이터를 옮기고 로컬에 데이터를 받아오는 예시를 보여드리겠습니다.

 

ssh 사용법을 자세히 알고 싶으시면 아래 포스팅을 참고해주세요

https://seaotter.tistory.com/113

 

서버에 SSH로 원격 접속하기/사용자계정 생성 방법

서버에 ssh로 접속하기 위해서는 사용자계정이 필요한데 권한이 없는 사람에게 root 계정을 알려줄 수 없으므로 사용자 계정을 따로 생성해야한다.서버마다 살짝 다를 수 있지만 아마 명령어가

seaotter.tistory.com

 

 

1. 서버에서 데이터 빼오기

당연한 이야기겠지만 manage.py를 사용하기 위해서는 가상환경을 활성화 하고, webapps 즉, manage.py가 존재하는 파일로 이동하여 명령어를 입력해야 합니다. 아래 코드는 본인의 서버 계정과 파일 경로를 보고 수정후 사용 하셔야 합니다.

ssh [서버접속계정]@[서버아이피]            ssh 사용
source [bin/activate 경로]          venv 활성화
cd [webapps 경로]                   manage.py가 있는 위치로 이동
./manage.py dumpdata > 파일명.json    이부분에서 데이터 저장
ctrl +D                              ssh 나오기
sftp ssh [서버접속계정]@[서버아이피]       sftp 사용
cd [webapps 경로]                      
get 파일명.json                       데이터 로컬로 빼오기   
ctrl+D                               ssh 나가기

 

 

2. 데이터 받아오기

맥에서 시용하는 명령어는 리눅스 계열과 동일하지만 윈도우는 명령어가 다르기 때문에 OS에 따른 가상환경 활성화를 하시면 됩니다.

 

[MAC OS]

데이터 받아오기
source [bin/activate 경로]          venv 활성화
cd [webapps 경로]                   manage.py가 있는 위치로 이동
./manage.py loaddata 파일명.json     데이터 가져오기

 

[Windows]

데이터 받아오기
\venv\Scripts\activate.bat         venv 활성화
cd [webapps 경로]                   manage.py가 있는 위치로 이동
./manage.py loaddata 파일명.json     데이터 가져오기​

댓글