PostgreSQL 백업 & 복구
과거자료
목차
1. pg_dump(논리 백업)
2. 아카이브 로그 백업(물리 백업)
3. 꼼수
1. pg_dump(논리 백업)
[개요]
DB의 현재상태를 백업해주는 유틸리티이다. 백업 결과물은 Text 또는 다른 포멧으로 지정할 수 있다. 해당 기능은 운영상태에서 사용해도 다른 유저는 병목되지 않고 처리된다. 복구 하기 위해서는 psql 유틸리티를 사용하여 복구한다.
[옵션]
-v: verbose: 처리상태를 화면에 표시함
-U: 계정 이름
-n: 스키마 이름
-t: 백업하고자하는 테이블 지정
-T: 백업 제외하는 테이블을 지정
-f: 아웃풋 이름
[백업]
아래와 같이 pg_dump를 이용하여 백업본을 만든다.
pg_dump $dbName pg_dump -v -U $userName -n $schemaName -t $backupTable -f $outputFileName $dbName ./pg_dump -v -U camanager -n minica2018 -t web_audit -f minica_audit.dump minica |
[복구]
./psql -U camanager -d minica -a -f minica_audit.dump |
2. 아카이브 로그 백업(물리 백업)
[개요]
아카이브 로그를 복구해주는 방식이다. PostgreSQL은 WAL(Write Ahead Log)[1] 로그를 먼저 축적한 후, datafile을 write한다. 해당 로그는 지정한 크기(default:16Mbyte) 만큼 쌓이며, 아카이브 설정을 하지 않으면, 일정 개수만 유지하고 덮어쓴다. WAL 로그를 아카이브 영역으로 지속적으로 백업하는 설정을 postgresql.conf에서 해줘야한다.
[postgresql.conf 설정]
wal_level = ’archive’ // 아카이브 백업을 하기 위해서는 최소 아카이브 이상 지정한다. archive_mode = on archive_command = 'cp %p /home/ehdvudee/bin/postgresql-9.1.24/archive/%f' |
[백업]
위의 postgresql.conf설정을 해주면, WAL 로그가 지정한 크기(default:16Mbyte)만큼 차면 archive_command에 지정한 디렉토리에 자동으로 복사해준다.
[복구]
먼저 아카이브 로그에 가지 못한 WAL 로그들을 아카이브로 다 옮긴다. 명령어는 아래와 같다.
psql -c "select pg_switch_xlog();" // PostgreSQL 10 버전 이상은 pg_switch_wal() |
Database를 정지한다.
PostgreSQL data 파일에 recovery.conf 생성 후, 아래와 같이 아카이브 로그 디렉토리와 백업 시점을 지정한다. 백업 시점을 지정하는 것을 PITR(Point In Time Recovery)라 한다.
restore_command = 'cp /home/ehdvudee/bin/postgresql-9.1.24/archive/%f %p' recovery_target_time = '2019-07-02 11:06:20 KST' |
Database 가동한다. 그러면 아카이브 복구는 완료한다.
[1] 오라클의 Redo 로그와 유사하다.
3. 꼼수
[개요]
바이너리 파일을 복사/붙이기 한다...
[백업]
postgresql의 data 파일을 복사한다.
[복구]
postgresql data 파일을 다른 곳에 붙이기한다.
'개발관련 > (과거)메모' 카테고리의 다른 글
ChartJS 소개 및 기본 예제 (0) | 2021.02.04 |
---|---|
Postgresql Streaming Replication(9.1) (0) | 2021.01.20 |
PostgreSQL 서버 중요 설정 정보 (0) | 2021.01.18 |
다양한 스프링 활용기(지속적인 업데이트 - 수정:20.12.31) (0) | 2020.12.31 |
REST API 정리 (0) | 2020.12.30 |