이번에는 PostgreSQL 데이터베이스를 백업하고 복구하는 방법에 대해서 살펴보겠습니다. database 이름은 testdb 라고 가정하였으며, 백업해서 생성할 파일은 db_backup_file.sql 입니다.
DB 백업하기
DB 백업을 위해서는 pg_dump 명령어를 사용합니다.
백업시에 많이 사용되는 기본 옵션들과 같이 적어 보았습니다.
pg_dump -h <server_host> -p <port> -U <username> -d <db_name> -f <file_name>
만약 DB 서버에서 root 권한으로 백업을 한다면, 아래와 같이 db_name과 file_name만 적어줘도 됩니다.
pg_dump testdb -f db_backup_file.sql
f 옵션으로 파일 이름을 지정하는 대신 redirect를 이용할 수도 있습니다.
pg_dump testdb > db_backup_file.sql
DB 복구하기
위에서 백업한 파일은 sql 구문형태로 저장이 됩니다. 물론 복구시의 최적화를 위해, 제약사항들을 나중에 추가하는 방식으로 기록됩니다. 따라서 데이터 복구를 위해서는 sql 파일을 실행해 주면 됩니다.
psql -h <server_host> -p <port> -U <username> -d <db_name> -f <file_name>
혹은
psql -h <server_host> -p <port> -U <username> -d <db_name> < <file_name>
DB서버에서 root 권한으로 복구를 한다면, db_name과 file_name 만 있으면 됩니다.
psql testdb -f db_backup_file.sql
혹은
psql testdb < db_backup_file.sql
대용량 DB 다루기
1. 대용량 DB를 백업하거나 복구할 때는, gzip / gunzip 을 이용할 수 있습니다.
pg_dump testdb | gzip > db_backup_file.sql.gz
복구시에는 반대로 압축을 풀면서 스트림을 전달해 주면 됩니다.
gunzip -c db_backup_file.sql.gz | psql testdb
아니면 cat 명령어를 이용하여 다음과 같이 사용해도 결과는 같습니다.
cat db_backup_file.sql.gz | gunzip | psql testdb
2. 압축을 선호하지 않는다면, split 명령어를 이용하여 적당한 크기로 분할할 수 있습니다.
pg_dump testdb | split -b 2G - db_backup_file.sql
합치는 것은 cat 명령어를 이용하면 됩니다.
cat db_backup_file.sql* | psql testdb
3. 커스텀 dump 포맷을 사용하는 경우
=> 이 경우 백업 결과, 압축 포맷으로 저장되기 때문에, pg_restore를 이용해서 복구를 해야 합니다.
pg_dump -Fc testdb > db_backup_file.sql
pg_restore를 이용하여 복구
pg_restore -d testdb db_backup_file.sql
유용한 팁
아래 명령어를 이용하면, src DB 서버에서 백업을 하면서, 동시에 target DB 서버에 restore를 할 수 있습니다.
pg_dump -h <src_db_host> <db_name> | psql -h <target_db_host> <db_name>
'Database > PostgreSQL' 카테고리의 다른 글
PostgreSQL 계정 관리 방법 (0) | 2024.10.06 |
---|