개발관련/(과거)메모

PostgreSQL 백업 & 복구

동팡 2021. 1. 20. 20:54

과거자료 

 

목차

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. 아카이브 로그 백업(물리 백업)

[개요]

아카이브 로그를 복구해주는 방식이다. PostgreSQLWAL(Write Ahead Log)[1] 로그를 먼저 축적한 후, datafilewrite한다. 해당 로그는 지정한 크기(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 파일을 다른 곳에 붙이기한다.