Tech Stock logo Tech Stock

■ postgresql에서 백업을 진행할때 가장 기본형

일단, 당연한 순서이지만 슈퍼유저인 postgres로 유저를 바꿔준다.

su - postgres
  • 유저권한이 슈퍼유저가 아닌 일반 유저이면, 풀 백업이 불가능
  • 일반 유저로 백업도 가능하지만 자신의 권한내의 스키마에 관해서만 백업이 가능

이 두가지에 유의해서 백업을 진행해야 하며,
만약 슈퍼유저 패스워드를 절대 알 방법이 없거나, 보안상 접속 불가일 경우라면
신중하게 생각해보고 결정할것

또한, 백업의 대상과 범위를 정확하게 규정해야 한다.

  • 특정 테이블만을 할것인지 (데이터를 제외)
  • 특정 테이블의 데이터만을 할것인지
  • 특정 테이블 + 데이터 모두를 할것인지
  • 모든 테이블(데이터 제외)
  • 모든 테이블 + 데이터 모두를 할것인지
  • 모든 테이블의 데이터만을 할것인지
  • 제약조건을 모두 포함시켜서 백업 할것인지
  • 시퀜스도 할것인지 (시퀜스는 테스트로 해봤더니 마지막 번호 그상태로 백업이 가능함)
  • 범위 규정이 끝났다면 현재 접속 유저로 그것이 가능한지?

최악의 경우에는 유저마다 접속해서 백업을 해야하는 상황이 발생 할 수도 있다.

■ pg_dump 라는 놈으로 백업을 진행

이놈은 옵션이 정말 꾀나 많은놈이다. (잔챙이들은 앞으로 조금씩 추가)

가장 기본형은


pg_dump -Fc -h localhost -p 5432 -U username -d Database_name > dataBak.dmp

  • -F 덤프할 포맷을 설정(설정포맷을 연이어 써준다)
    • -Fc 가장 많이 쓰는 기본형 아카이브
    • -Fp 텍스트 파일로 출력 (이럴때는 백업파일의 확장자를 sql로 해주자)
    • -Ft tar형식의 아카이브로 출력
  • -h 호스트명 지정. (이놈은 /etc/hosts 를 cat해서 확인해보면 됨)
  • -p 포트번호 (보안을 위해서 default포트번호를 바꿔쓰기도 하니 살펴볼 필요 있음)
  • -U 유저명 지정
  • -d 데이터베이스 명
  • -t 특정 테이블 지정. 이놈은 복수로 여러개 쓸 수 있다 ex) -t product -t product_detail
  • -a 데이터 만을 덤프

■ 복원작업은 pg_restore 라는 놈으로 작업


pg_restore -a -h localhost -t product -t product_detail -p 5432 -U username -d Database_name Database_name -U postgres /home/bak_data/dataBak.dmp

  • -a 데이터 만을 복원
  • -t 특정 테이블을 지정(-t product -t product_detail : 상품 테이블과 상품상세 테이블을 지정하여복원)

    나머지는 덤프와 옵션은 비슷하니 man을 보고 참고하면 될듯