차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
postgresql_백업_및_복구_-_명령어_사용 [2022/04/04 06:02] – [PostgreSQL 백업 및 복구 - 명령어 사용] koov | postgresql_백업_및_복구_-_명령어_사용 [2023/01/30 11:32] (현재) – admin | ||
---|---|---|---|
줄 13: | 줄 13: | ||
| 파일 시스템 레벨 | | 파일 시스템 레벨 | ||
</ | </ | ||
- | ===== 문단 제목 ===== | + | |
+ | ===== SQL 덤프 ===== | ||
+ | 명령어를 통해 PostgreSQL 서버가 실행되고 있는 상태에서 PostgreSQL 데이터를 백업 및 복구가 가능하다. | ||
+ | 여기서 사용되는 명령어는 '' | ||
+ | 이 4가지 명령어는 다음 표와 같은 특징을 가진다. | ||
+ | |||
+ | | pg_dump | ||
+ | | pg_dumpall | ||
+ | | pg_restore | ||
+ | | psql | 복구 | ||
+ | |||
+ | |||
+ | 위 4가지 명령어에 대한 간단한 시나리오는 다음과 같다. | ||
+ | |||
+ | - pg_dump의 기본 백업 → psql 복구 | ||
+ | - pg_dump의 커스텀 백업 → pg_restore 복구 | ||
+ | - pg_dumpall 백업 → psql 복구 | ||
+ | |||
+ | 1.에 대한 상세 실행 결과 | ||
+ | |||
+ | 실행 환경은 하나의 서버에서 2개 port를 사용해 테스트한다. | ||
+ | 이 예제에서는 '' | ||
+ | '' | ||
+ | 터미널 창을 열어 PostgreSQL 서버를 시작한 후 pg_dump 명령어를 통해 텍스트 형태의 덤프 파일을 만든다. | ||
+ | 이러한 덤프 파일은 agens 명령어로 복구할 수 있으며, 복구할 데이터베이스는 새로운 서버에 미리 생성이 되어 있어야 한다. | ||
+ | |||
+ | <WRAP prewrap> | ||
+ | <code bash> | ||
+ | 1.PostgreSQL 서버1 시작 | ||
+ | $ pg_ctl -D / | ||
+ | |||
+ | 2.백업 실행 | ||
+ | $ pg_dump dump > dump.backup | ||
+ | |||
+ | 3.PostgreSQL 서버2 시작 | ||
+ | $ pg_ctl -D / | ||
+ | |||
+ | 4.데이터베이스 생성 | ||
+ | $ createdb -p 5433 dump | ||
+ | |||
+ | 5.복구 실행 | ||
+ | $ psql -p 5433 dump < dump.backup | ||
+ | |||
+ | 6.복구 확인 | ||
+ | $ psql -p 5433 dump | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | 2.에 대한 상세 실행 결과 | ||
+ | 실행 환경은 하나의 서버에서 2개 port를 사용해 테스트한다. | ||
+ | 이 예제에서는 '' | ||
+ | '' | ||
+ | 터미널 창을 열어 PostgreSQL 서버를 시작한 후 '' | ||
+ | 비 텍스트 형태의 덤프 파일을 만들기 위해 '' | ||
+ | 이러한 덤프 파일은 비 텍스트 형태라서 '' | ||
+ | 복구할 데이터베이스는 새로운 서버에 미리 생성이 되어 있어야 한다. | ||
+ | |||
+ | <WRAP prewrap> | ||
+ | <code bash> | ||
+ | 1.PostgreSQL 서버1 시작 | ||
+ | $ pg_ctl -D / | ||
+ | |||
+ | 2.백업 실행 | ||
+ | $ pg_dump -Fc pg_c_dump > pg_c_dump.backup | ||
+ | |||
+ | 3.PostgreSQL 서버2 시작 | ||
+ | $ pg_ctl -D / | ||
+ | |||
+ | 4.데이터베이스 생성 | ||
+ | $ createdb -p 5433 pg_c_dump | ||
+ | |||
+ | 5.복구 실행 | ||
+ | $ pg_restore -p 5433 -d pg_c_dump pg_c_dump.backup | ||
+ | |||
+ | 6.복구 확인 | ||
+ | $ psql -p5433 pg_c_dump | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | 3.에 대한 상세 실행 결과 | ||
+ | 실행 환경은 하나의 서버에서 2개 port를 사용해 테스트한다. | ||
+ | 이 예제에서는 모든 데이터베이스를 백업하고 복구하는 예제이다. 확인을 위해 '' | ||
+ | '' | ||
+ | 터미널 창을 열어 PostgreSQL 서버를 시작한 후 '' | ||
+ | 이러한 덤프 파일은 '' | ||
+ | 하지만 시작할 기존 데이터베이스 이름을 지정해야 하며, 일반적으로 postgres 지정한다. | ||
+ | '' | ||
+ | |||
+ | <WRAP prewrap> | ||
+ | <code bash> | ||
+ | 1.PostgreSQL 서버1 시작 | ||
+ | $ pg_ctl -D / | ||
+ | |||
+ | 2.백업 실행 | ||
+ | $ pg_dumpall > pg_dumpall.backup | ||
+ | |||
+ | 3.PostgreSQL 서버2 시작 | ||
+ | $ pg_ctl -D / | ||
+ | |||
+ | 5.복구 실행 | ||
+ | $ psql -p 5433 -f pg_dumpall.backup postgres | ||
+ | |||
+ | 6.복구 확인 | ||
+ | $ psql -p 5433 pg_dumpall | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== 파일 시스템 레벨 ===== | ||
+ | 이 예제에서는 모든 데이터베이스를 백업하고 복구하는 예제이다. | ||
+ | 확인을 위해 '' | ||
+ | 백업 및 복구는 '' | ||
+ | 백업은 서버를 정지시킨 다음에 '' | ||
+ | '' | ||
+ | 복구는 '' | ||
+ | 압축해제에서 사용한 '' | ||
+ | 주의할 점은 압축해제 폴더는 서버 시작시 '' | ||
+ | 부모 폴더가 생성되어 있지 않을 경우를 대비해 '' | ||
+ | |||
+ | <WRAP prewrap> | ||
+ | <code bash> | ||
+ | 1.PostgreSQL 서버 정지 | ||
+ | $ pg_ctl -D / | ||
+ | |||
+ | 2.백업 실행 | ||
+ | $ cd / | ||
+ | $ tar cf backup.tar * | ||
+ | |||
+ | 3.복구 실행 | ||
+ | $ mkdir -m 700 -p / | ||
+ | $ tar xf backup.tar -C / | ||
+ | |||
+ | 4.PostgreSQL 서버 시작 | ||
+ | $ pg_ctl -D / | ||
+ | |||
+ | 5.확인 | ||
+ | $ psql pg_backup | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== 연속 아카이빙 ===== | ||
+ | |||
+ | 이 예제에서는 모든 데이터베이스를 백업하고 복구하는 예제이다. | ||
+ | 서버가 실행중인 경우와 서버가 중지된 경우로 각각 나눠서 진행한다. | ||
+ | |||
+ | ==== 서버가 실행중인 경우 ==== | ||
+ | |||
+ | 기본 데이터는 '' | ||
+ | |||
+ | '' | ||
+ | 복구 과정에서는 복사된 WAL 파일을 사용한다. | ||
+ | 진행 절차는 다음과 같다. | ||
+ | |||
+ | * WAL 파일을 '' | ||
+ | <WRAP prewrap> | ||
+ | < | ||
+ | wal_level = archive | ||
+ | archive_mode = on | ||
+ | archive_command = 'cp %p / | ||
+ | archive_timeout = 1min | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * pg_basebackup 명령어를 통해 새로운 data 폴더를 생성한다. | ||
+ | <WRAP prewrap> | ||
+ | < | ||
+ | pg_basebackup -D / | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | < | ||
+ | |||
+ | 전체 증분 데이터 복구(됨) | ||
+ | <WRAP prewrap> | ||
+ | < | ||
+ | restore_command = 'cp / | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | 특정 시점까지 증분 데이터 복구(안됨) | ||
+ | <WRAP prewrap> | ||
+ | < | ||
+ | restore_command = 'cp / | ||
+ | recovery_target_time = ' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * 서버를 시작한다. | ||
+ | * 복구가 완료되면 '' | ||
+ | |||
+ | 특정 시점까지 증분 데이터 복구와 관련된 문서: https:// | ||
+ | |||
+ | |||
+ | ==== 서버가 중지된 경우 ==== | ||
+ | |||
+ | 압축된 기본 데이터는 '' | ||
+ | 증분 데이터는 압축해제된 폴더의 '' | ||
+ | 실행중인 서버의 '' | ||
+ | |||
+ | 증분 데이터 복구는 위 2가지 방법을 사용하지 않고, 3.1에서 사용한 방법을 사용한다. | ||
+ | 진행 절차는 다음과 같다. | ||
+ | |||
+ | * WAL 파일을 '' | ||
+ | * 이를 위해 postgresql.conf 파일에 있는 몇가지 옵션을 수정한다. | ||
+ | <WRAP prewrap> | ||
+ | <code vim> | ||
+ | wal_level = archive | ||
+ | archive_mode = on | ||
+ | archive_command = 'cp %p / | ||
+ | archive_timeout = 1min | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | <WRAP prewrap> | ||
+ | <code bash> | ||
+ | cd / | ||
+ | tar cf backup.tar * | ||
+ | tar xf backup.tar / | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | 전체 증분 데이터 복구 | ||
+ | <WRAP prewrap> | ||
+ | <code bash> | ||
+ | restore_command = 'cp / | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | 특정 시점까지 증분 데이터 복구 | ||
+ | <WRAP prewrap> | ||
+ | <code bash> | ||
+ | restore_command = 'cp / | ||
+ | recovery_target_time = ' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * 서버를 시작한다. | ||
+ | 복구가 완료되면 '' | ||
+ | 특정 시점까지 증분 데이터 복구와 관련된 문서: https:// | ||
+ | |||
+ | |||
+ | ===== 참조링크 | ||
+ | * https:// | ||