웹사이트 검색

PostgreSQL 데이터베이스를 백업 및 복원하는 방법


프로덕션 환경에서는 PostgreSQL 데이터베이스의 규모에 관계없이 정기적인 백업이 데이터베이스 관리의 필수 요소입니다. 이 기사에서는 PostgreSQL 데이터베이스를 백업하고 복원하는 방법을 배웁니다.

PostgreSQL 데이터베이스 시스템이 이미 설치되어 작동하고 있다고 가정합니다. 그렇지 않은 경우 다음 문서를 읽고 Linux 배포판에 PostgreSQL을 설치하세요.

시작하자…

단일 PostgreSQL 데이터베이스 백업

PostgreSQL은 데이터베이스 백업에 도움이 되는 pg_dump 유틸리티를 제공합니다. 향후에 쉽게 복원할 수 있는 형식으로 SQL 명령을 사용하여 데이터베이스 파일을 생성합니다.

PostgreSQL 데이터베이스를 백업하려면 먼저 데이터베이스 서버에 로그인한 후 Postgres 사용자 계정으로 전환하고 다음과 같이 pg_dump를 실행하세요. (tecmintdb를 백업하려는 데이터베이스 이름으로 바꾸십시오). 기본적으로 출력 형식은 일반 텍스트 SQL 스크립트 파일입니다.

pg_dump tecmintdb > tecmintdb.sql

pg_dump는 다른 출력 형식도 지원합니다. -F 옵션을 사용하여 출력 형식을 지정할 수 있습니다. 여기서 c는 사용자 정의 형식 아카이브 파일을 의미하고, d는 디렉터리 형식 아카이브를 의미하며, >t는 tar 형식의 아카이브 파일을 의미합니다. 모든 형식은 pg_restore에 입력하기에 적합합니다.

예를 들어:

pg_dump -F c tecmintdb > tecmintdb.dump
OR
pg_dump -F t tecmintdb > tecmintdb.tar

출력을 디렉터리 출력 형식으로 덤프하려면 -f 플래그(출력 파일을 지정하는 데 사용됨)를 사용하여 파일 대신 대상 디렉터리를 지정합니다. pg_dump에 의해 생성될 디렉토리가 존재하지 않아야 합니다.

pg_dump -F d tecmintdb -f tecmintdumpdir	

모든 PostgreSQL 데이터베이스를 백업하려면 표시된 대로 pg_dumpall 도구를 사용하세요.

pg_dumpall > all_pg_dbs.sql

표시된 대로 psql을 사용하여 덤프를 복원할 수 있습니다.

psql -f all_pg_dbs.sql postgres

PostgreSQL 데이터베이스 복원

PostgreSQL 데이터베이스를 복원하려면 psql 또는 pg_restore 유틸리티를 사용할 수 있습니다. psqlpg_dump로 생성된 텍스트 파일을 복원하는 데 사용되는 반면, pg_restorepg_dump<로 생성된 아카이브에서 PostgreSQL 데이터베이스를 복원하는 데 사용됩니다. 일반 텍스트가 아닌 형식(사용자 정의, tar 또는 디렉터리) 중 하나입니다.

다음은 일반 텍스트 파일 덤프를 복원하는 방법의 예입니다.

psql tecmintdb < tecmintdb.sql

위에서 언급한 것처럼 맞춤 형식 덤프는 psql용 스크립트가 아니므로 표시된 대로 pg_restore를 사용하여 복원해야 합니다.

pg_restore -d tecmintdb tecmintdb.dump
OR
pg_restore -d tecmintdb tecmintdb.tar
OR
pg_restore -d tecmintdb tecmintdumpdir	

압축 PostgreSQL 데이터베이스 백업

백업 중인 데이터베이스가 크고 상당히 작은 출력 파일을 생성하려는 경우 gzip과 같은 압축 도구를 통해 pg_dump의 출력을 필터링해야 하는 압축 덤프를 실행할 수 있습니다. 또는 당신이 좋아하는 것:

pg_dump tecmintdb | gzip > tecmintdb.gz

데이터베이스가 매우 큰 경우 표시된 것처럼 -j 플래그를 사용하여 number_of_jobs 테이블을 동시에 덤프하여 병렬로 덤프할 수 있습니다.

pg_dump -F d -j 5 -f tecmintdumpdir

병렬 덤프 옵션을 사용하면 덤프 시간이 단축되지만, 반면에 데이터베이스 서버의 부하도 증가한다는 점에 유의해야 합니다.

원격 PostgreSQL 데이터베이스 백업

pg_dump는 일반 PostgreSQL 클라이언트 도구로 원격 데이터베이스 서버에서의 작업을 지원합니다. pg_dump가 연결해야 하는 원격 데이터베이스 서버를 지정하려면 명령줄 옵션 -h를 사용하여 원격 호스트를 지정하고 -p는 원격 호스트를 지정합니다. 데이터베이스 서버가 수신 대기 중인 포트입니다. 또한 -U 플래그를 사용하여 연결할 데이터베이스 역할 이름을 지정합니다.

10.10.20.10, 5432tecmintdb를 각각 원격 호스트 IP 주소 또는 호스트 이름, 데이터베이스 포트 및 데이터베이스 이름으로 바꾸십시오.

pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

원격으로 연결하는 사용자에게 데이터베이스에 액세스하는 데 필요한 권한이 있는지 확인하고, 적절한 데이터베이스 인증 방법이 데이터베이스 서버에 구성되어 있는지 확인하세요. 그렇지 않으면 다음 스크린샷에 표시된 것과 같은 오류가 발생합니다.

한 서버에서 다른 서버로 데이터베이스를 직접 덤프하는 것도 가능합니다. 표시된 대로 pg_dumppsql 유틸리티를 사용하세요.

pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

Cron 작업을 사용하여 PostgreSQL 데이터베이스 자동 백업

cron 작업을 사용하여 정기적으로 백업을 수행할 수 있습니다. Cron 작업은 서버에서 실행될 다양한 종류의 작업을 예약하는 데 일반적으로 사용되는 수단입니다.

다음과 같이 PostgreSQL 데이터베이스 백업을 자동화하도록 크론 작업을 구성할 수 있습니다. PostgreSQL 슈퍼유저로 다음 명령을 실행해야 합니다.

mkdir -p /srv/backups/databases

그런 다음, 다음 명령을 실행하여 crontab을 편집하여 새 크론 작업을 추가합니다.

crontab -e

crontab 끝에 다음 줄을 복사하여 붙여넣습니다. 위에서 설명한 덤프 형식 중 하나를 사용할 수 있습니다.

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

파일을 저장하고 종료합니다.

cron 서비스는 다시 시작하지 않고도 자동으로 이 새 작업을 실행하기 시작합니다. 그리고 이 크론 작업은 매일 자정에 실행되며 이는 백업 작업에 대한 최소한의 솔루션입니다.

cron 작업을 예약하는 방법에 대한 자세한 내용은 Linux에서 Cron 작업을 만들고 관리하는 방법을 참조하세요.

지금은 그게 다야! 데이터 백업을 데이터베이스 관리 루틴의 일부로 만드는 것이 좋습니다. 질문이나 의견이 있는 경우 아래 피드백 양식을 사용하여 문의해 주세요. 자세한 내용은 pg_dump 및 pg_restore 참조 페이지를 참조하세요.