written by yechoi

PostgreSQL 백업하기 본문

Born 2 Code

PostgreSQL 백업하기

yechoi 2022. 6. 5. 23:15
반응형

humansof42.com 서버를 GCP에서 Vultr로 이주한다. 데이터베이스 마이그레이션을 위한 메모.

 

마이그레이션 조건

  • DB는 하나
  • 일부 테이블이 아니라 하나의 DB를 통째로 옮길 것임
  • 지금 있는 상태 고대로 옮길 것임
  • Linux 커맨드로 진행

 

백업 방법

  1. SQL 덤프 ✅
  2. 파일 시스템 기반 백업
    -> 데이터파일을 통째로 압축해서 백업하는 방식 
    -> 무조건 전체 백업해야하는 건 괜찮지만, 데이터베이스 서버 중단은 하고 싶지 않음 
  3. 아카이브 모드 백업
    -> 데이터 베이스에 대한 모든 조작 기록인 미리쓰기 로그(WAL, Write ahead log)가 있음
    -> 다른 서버로 이 로그를 보내, 로그의 내용을 실행해 원본 서버와 똑같이 만들기 
    -> 특정 시점까지만 실행하도록 하여 특정 시점으로 복구 가능 
    -> 단순한 백업이 필요한 것이라서 복잡도에 비해 불필요함

 

SQL 덤프

(1) 백업

pg_dump를 실행해 DB_NAME 데이터베이스에 생성된 객체와 데이터들을 SQL 구문 텍스트 형식으로 백업
표준출력되기 때문에 리다이렉션으로 파일로 저장

$ pg_dump DB_NAME > postgres_DB_NAME_bak.sql

* 파일의 크기가 클 경우에는 gzip 등 압축
* pg_dump는 데이터베이스 한 개에만 적용, 모든 데이터베이스를 한번에 덤프하려면 pg_dumpall 명령어

(2) 복원

pg_dump로 백업 받은 파일은 SQL 형태라, 쿼리 import 형식으로 바로 복원 가능
데이터베이스와 사용자 생성 쿼리는 SQL 백업 파일에는 없으니, 복원 전에 따로 만들어주기 

// 오류 발행해도 복원 계속 진행
$ psql DB_NAME < postgres_DB_NAME_bak.sql

// 실패시 모든 작업 취소하기 위한 single-transaction 옵션
$ psql --set ON_ERROR_STOP=1 --single-transaction < postgres_DB_NAME_bak.sql

 

참고
https://mozi.tistory.com/557

반응형