pg_basebackup (full backup)
###완전 복구###
1. 테스트 데이터 생성
CREATE DATABASE TESTDB;
\c testdb
create user test identified by '1234';
\c testdb test
CREATE TABLE t1 (c1 int);
INSERT INTO t1 select * from generate_series(1,100,2);
CREATE TABLE t2 (c1 int);
INSERT INTO t2 select * from generate_series(2,100,2);
2. config 파일 수정
$ vi $PGDATA/postgresql.conf
archive_mode= on
archive_command= 'cp %p /data1/as16/archive/%f'
recovery_target_inclusive= off
####17버젼이면#####
summarize_wal = on
3. DB 재기동
4. 백업 수행
pg_basebackup -h 172.21.134.130 -U enterprisedb -D /data1/as16/pg_basebackup -v
5. DB 중지
6. data 영역 백업 및 백업 파일로 대체
$ mv /data1/as16/data /data1/as16/data_bak
$ cp -a /data1/as16/pg_basebackup $PGDATA/
$ chmod 750 /data1/as16/data
7. DB 기동
8.t1,t2 데이터 확인
###불완전 복구(시점복구)###
## 테스트 데이터 생성
create table backup_tab (a int, b timestamp);
insert into backup_tab values (1, now());
insert into backup_tab values (2, now());
insert into backup_tab values (3, now());
## 현재 backup_tab 테이블 데이터 확인
testdb=> select * from backup_tab ;
a | b
---+---------------------------
1 | 02-MAY-25 10:04:35.724826
2 | 02-MAY-25 10:04:35.726175
3 | 02-MAY-25 10:04:35.727003
## 백업 수행
pg_basebackup -h 172.21.134.130 -U enterprisedb -D /data1/as16/pg_basebackup -v
## 아카이브 로깅 확인
ls -alrt /data1/as16/archive/
## 데이터 추가
insert into backup_tab values (4, now());
insert into backup_tab values (5, now());
insert into backup_tab values (6, now());
## 현재 backup_tab 테이블 데이터 확인
testdb=> select * from backup_tab ;
a | b
---+---------------------------
1 | 02-MAY-25 10:04:35.724826
2 | 02-MAY-25 10:04:35.726175
3 | 02-MAY-25 10:04:35.727003
4 | 02-MAY-25 10:05:37.589441
5 | 02-MAY-25 10:05:39.974549
6 | 02-MAY-25 10:05:42.467592
## EPAS 정지
$ pg_ctl stop -D $PGDATA
## 백업본 restore
mv /data1/as16/data data1/as16/data_bak
cp -a /data1/as16/pg_basebackup $PGDATA
chmod 750 /data1/as16/data
###5번째 데이터까지만 PITR 수행
vi $PGDATA/postgresql.confvi $PGDATA/postgresql.conf
restore_command='cp /data1/as16/archive/%f %p'
recovery_target_time= '2025-05-02 10:05:40'
## recovery 파일 생성
touch /data1/as16/data/recovery.signal
## EPAS 기동
pg_ctl start -D $PGDATA
## 테스트 데이터 확인
testdb=> select * from backup_tab ;
a | b
---+---------------------------
1 | 02-MAY-25 10:04:35.724826
2 | 02-MAY-25 10:04:35.726175
3 | 02-MAY-25 10:04:35.727003
4 | 02-MAY-25 10:05:37.589441
5 | 02-MAY-25 10:05:39.974549
(5개 행)
## write 기능 활성화를 위해 아래 쿼리 enterprisedb 유저에서 수행
edb=# select pg_wal_replay_resume();