[PostgreSQL] 데이터베이스 백업 (pg_dump, pg_dumpall, Filesystem 백업)
데이터베이스를 사용할 때 장애 발생 시 대응을 위하여 여유분을 별도로 저장해 두거나, 다른 서버로 이관을 할 때 백업을 많이 이용한다.
이번 글은 PostgreSQL에서의 백업에 대하여 알아볼 것이다.
Psql(PostgreSQL)의 가장 손쉬운 백업 방식으로는 3가지가 있다.
※ pg_backrest나 pg_basebackup 및 PITR과 같은 방식도 존재하고 설정이 복잡해서 이번 글에서는 생략
해당 3가지 방식으로는 pg_dump와 pg_dumpall 그리고 Filesystem 백업이 있다.
순서대로 해당 방식들이 가지는 특징과 장단점에 대하여 알아볼 것이다.
1. pg_dump
pg_dump는 단일 데이터베이스 위주의 백업을 위해 사용되는 툴이다.
데이터베이스가 실행 중인 상태에서도 백업 가능하며, 특정 스키마나 테이블만 백업하는 것처럼 선택적 백업이 가능하다는 특징이 있다.
백업 파일 크기도 타 백업 방식보다 상대적으로 작으며, 데이터베이스의 버전에 큰 영향을 받지 않는다는 장점이 있으나, 사용자(User)나 그룹(Role)에 대해서는 백업이 되지 않는다는 단점이 존재한다.
※ Index와 Grant는 백업이 되기 때문에, Restore시 부여했던 권한에 알맞은 사용자나 그룹이 존재하지 않으면 경고가 출력된다.
# 해당 데이터베이스의 모든 데이터 백업(전역 객체 제외)
pg_dump -d <데이터베이스> -U <유저> > pg_dump_241118.backup
2. pg_dumpall
pg_dumpall은 pg_dump와 달리 명령어에서 볼 수 있는 것처럼 모든 데이터베이스에 대한 클러스터 자체를 백업하는 명령어다.
모든 데이터베이스를 한 번에 백업하기 때문에, 전역 객체(User, Role, Tablespace 등)도 함께 백업이 된다는 장점이 있지만, 백업 파일이 매우 크고 선택적으로 디테일한 부분만 복구하는 것이 어렵다는 단점도 가지고 있다.
# 데이터베이스 클러스터 백업
pg_dumpall > pg_dumpall_241118.backup
3. filesystem 백업
filesystem 백업은 PostgreSQL이 데이터 영역으로 사용하는 디렉터리를 통째로 물리적으로 복사하여 백업하는 것이다.
디렉터리 영역의 백업이기 때문에 데이터베이스는 중지된 상황에서 백업을 해야 하며, 복구될 데이터베이스의 버전이나 OS의 차이에도 장애가 발생할 수 있기 때문에, 마이그레이션에는 추천되지 않는 방식이다.
OS에서 직접 복사하는 방식이라 다른 방법에 비해 훨씬 빠르다는 장점을 가지고 있다.