Postgresql, EPAS/백업 & 복구

pg_basebackup (full backup)

havy 2025. 6. 17. 09:37

###완전 복구###

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();