pgAdmin에서 pgAgent로 PostgreSQL 자동 백업 예약하는 방법

소개

pgAgent는 PostgreSQL 데이터베이스의 작업을 스케줄링하는 데 사용되는 도구입니다. 이는 일반적으로 사용되는 cron보다 더 강력한 스케줄링 기능을 가지고 있습니다. 왜냐하면 pgAgent는 명령을 반복하지 않고도 배치 스크립트 없이도 여러 단계를 스케줄링할 수 있도록 특별히 Postgres 작업을 처리하기 위해 구축되었기 때문입니다. 중요한 점은 pgAdmin이 설치되어 있더라도 pgAgent를 별도로 다운로드해야 한다는 것입니다. 특히 pgAdmin의 확장으로 다운로드해야 합니다.

이 튜토리얼에서는 pgAgent를 설치하고, pgAdmin 그래픽 사용자 인터페이스(GUI)에서 데이터베이스가 pgAgent를 사용하도록 구성하고, pgAgent를 데몬으로 설정한 다음, pgAgent를 사용하여 데이터베이스를 백업하는 작업을 예약하는 방법을 알아보겠습니다.

전제 조건

이 튜토리얼을 따라하기 위해 다음이 필요합니다:

단계 1 – pgAgent 설치

이전에 언급한 대로 pgAgent는 pgAdmin을 설치할 때 자동으로 구성되지 않습니다. 다음 명령을 사용하여 터미널에서 pgAgent를 설치할 수 있습니다: apt install과 패키지 이름 pgagent

  1. sudo apt install pgagent

pgAgent를 설치한 후, 다음 단계로 넘어가서 pgAdmin에서 pgAgent를 사용할 수 있도록 데이터베이스를 구성합니다.

단계 2 – pgAgent를 위한 데이터베이스 구성

선수 조건을 따라 pgAdmin이 설정되고 사용할 준비가 되었습니다. pgAdmin을 통해 pgAgent 사용을 위해 데이터베이스를 구성할 수 있습니다. 웹 브라우저를 열고 http://your_domain로 이동하여 pgAdmin 응용 프로그램에 접속하십시오. 계정에 로그인한 후 왼쪽 패널의 트리 컨트롤로 이동하십시오. sammy라는 이름으로 생성한 데이터베이스를 찾아 목록을 확장하십시오. 이 목록에서 Extensions라는 옵션이 있습니다. 찾았으면 마우스 오른쪽 버튼을 클릭하고 Query Tool 옵션을 선택하십시오:

Select the Query Tool from the Extensions drop-down list

pgAgent를 pgAdmin에서 사용하기 위해 확장 기능을 데이터베이스에 로드해야 합니다. 다음 쿼리를 작성한 후 양옆으로 화살표 모양인 를 클릭하여 명령을 실행하십시오:

  1. CREATE EXTENSION pgagent;

Query Tool 기능을 사용한 이 단계는 다음 예제에서 설명됩니다:

Run the CREATE EXTENSION command

Query returned successfully in 300 msec.라는 출력이 Messages 탭에 표시됩니다. 이는 pgAgent 확장이 성공적으로 생성되었음을 확인합니다.

참고: 만약 데이터베이스에 적절한 plpgsql 언어가 로드되어 있지 않으면 다음과 같은 오류 메시지가 표시됩니다:

Output
ERROR: language "plpgsql" does not exist HINT: Use CREATE EXTENSION to load the language into the database. SQL state: 42704

이 경우 CREATE LANGUAGE를 실행하여 필요한 pl/pgsql 절차적 언어를 설치해야 합니다. 다음 명령을 실행하여 설치할 수 있습니다:

  1. CREATE LANGUAGE plpgsql;

pl/pgsql 언어를 설치한 후, 하단에 다음과 같은 메시지가 표시됩니다. 231밀리초 내에 쿼리가 성공적으로 반환되었습니다. 이후 이전의 CREATE EXTENSION pgagent 쿼리를 다시 실행하십시오.

이러한 쿼리를 실행한 후, Extensions 아래에 pgagentplpgsql 두 항목이 나열됩니다:

pgAgent and plpgsql language listed

A new item in the tree control on the left-hand side will appear called pgAgent Jobs. This signifies that pgAgent was successfully installed on your pgAdmin account. Next, you will set up pgAgent as a daemon so that it can run your jobs successfully.

참고: 이러한 항목들이 즉시 표시되지 않는 경우, 브라우저 페이지를 새로 고침하면 쿼리가 성공했다면 나타날 것입니다.

단계 3 — 데몬으로서의 pgAgent 설정

이제 pgAgent를 설치하고 pgAdmin을 통해 데이터베이스에 구성했습니다. 다음으로 서버에서 pgAgent를 데몬으로 설정해야 합니다. 데몬은 백그라운드에서 지속적으로 실행되며 서비스 작업을 수행하는 프로그램입니다. pgAgent는 Unix 시스템에서 데몬으로 실행되며 일반적으로 데이터베이스 서버 자체에서 실행됩니다.

pgAgent를 데몬으로 설정하려면 PostgreSQL 연결 문자열이 필요합니다. 작업을 예약할 때 프로세스가 적절하게 실행되도록 설정하는 것입니다. 여기에서는 PostgreSQL libpq 연결 문자열을 설정하고 있으며, 이는 사용자별로 설정된 특정 매개변수에 연결되는 문자열을 의미합니다. PostgreSQL libpq 연결 함수에 대한 자세한 내용은 PostgreSQL 문서에서 확인할 수 있습니다.

연결 문자열은 호스트 이름, 데이터베이스 이름 및 사용자 이름의 자격 증명을 제공합니다. 예를 들어, 호스트는 Unix 도메인 소켓을 사용하고, 데이터베이스 이름은 sammy이고, 사용자는 sammy입니다. 이 문자열은 데몬을 시작하기 위해 pgagent 명령에 추가됩니다. 터미널에서 다음 코드를 실행합니다:

  1. pgagent host=/var/run/postgresql dbname=sammy user=sammy

출력에 아무것도 표시되지 않고 연결 오류 메시지도 표시되지 않으면 연결 문자열 설정이 성공적으로 완료된 것입니다.

연결 문자열을 생성한 후에는 pgAgent로 작업을 예약할 준비가 되었습니다.

Step 4 — pgAgent로 작업 예약하기

pgAgent는 작업을 실행하고 관리할 수 있는 예약 에이전트로서, 한 개 이상의 단계나 일정을 가진 작업을 생성할 수 있습니다. 예를 들어, 한 단계는 쉘 스크립트에서 여러 SQL 문으로 구성되며, 다른 단계들과 연속적으로 실행됩니다. 전반적으로 pgAgent를 사용하여 작업을 예약, 관리, 수정 또는 비활성화할 수 있습니다.

이 튜토리얼에서는 매주 일주일 내내 매 분마다 sammy 데이터베이스를 백업하는 작업을 생성하기 위해 pgAgent를 사용합니다. 다음과 같이 pgAgent Jobs를 마우스 오른쪽 버튼으로 클릭한 다음 CreatepgAgent Job…을 선택하여 시작할 수 있습니다.

Create your pgAgent Job

이 작업을 수행하면 생성 – pgAgent 작업이라는 프롬프트가 나타나며, 일반 탭에서 필요한 정보를 입력할 수 있습니다. 이 예제에서는 sammy_backup이라는 이름을 사용하고, 호스트 에이전트를 지정하지 않을 것입니다. 이 작업을 모든 호스트에서 실행할 수 있도록 하기 위함입니다. 추가로, 작업 클래스정기 유지 보수로 남겨둘 것입니다. 다른 코멘트를 포함하고 싶다면, 코멘트 섹션에 자유롭게 작성하십시오:

Prompt for creating your pgAgent job

그다음, 단계 탭으로 이동하십시오. 오른쪽 상단의 + 기호를 클릭하여 단계를 생성하십시오. 이 예제에서는 이 단계를 단계1이라고 이름 지을 것입니다. 그런 다음, 옵션을 확장하기 위해 휴지통 아이콘 왼쪽에 있는 연필 아이콘을 클릭하십시오. 활성화? 버튼은 기본적으로 켜져 있으며, 이 단계가 작업 실행 시 포함될 것을 나타냅니다.

종류 옵션으로는 SQL 또는 Batch를 선택할 수 있습니다. 여기에서는 Batch를 선택했습니다. 이 예제에서 Batch를 선택하는 이유는 데이터베이스에 예약된 백업에 대해 설정한 적절한 PostgreSQL 명령을 실행하기 때문입니다. SQL 옵션은 원시 SQL을 실행하는 작업을 예약하는 데 사용할 수 있습니다. 이 경우에는 Local을 선택하여 단계가 로컬 서버에서 실행되도록 하였습니다. 그러나 원하는 경우 Remote를 선택하여 원격 호스트에서 수행할 수도 있습니다. 원격 호스트에서 수행하려면 연결 문자열 필드에 해당 기준을 지정해야 합니다. 1단계를 따라왔다면 이미 연결 문자열이 설정되어 연결되어 있습니다.

데이터베이스 필드에서 올바른 데이터베이스가 선택되어 있는지 확인하세요. 여기에서는 sammy를 지정했습니다. 에러 발생 시 옵션을 사용하면 단계를 실행하는 동안 에러가 발생했을 때 pgAgent의 응답을 사용자 정의할 수 있습니다. 이 경우, 단계 처리 중 에러가 발생했을 때 알림을 받기 위해 실패를 선택했습니다. 다시 말씀드리지만, 추가적인 노트를 추가하려면 코멘트 상자에 추가할 수 있습니다.

Create a step for your pgAgent job

동일한 단계 탭 내에는 코드 탭도 있습니다. 이 예제에서와 같이 배치를 선택한 경우 해당 코드 탭으로 이동하십시오. 이 탭에 들어가면 PostgreSQL 명령을 삽입할 빈 줄이 있습니다. 여기에 원하는 백업 명령과 사용자 지정 옵션을 대체할 수 있습니다. 유효한 명령이면 어떤 명령이든 허용됩니다.

이 튜토리얼에서는 pg_dump 명령을 사용하여 Postgres 데이터베이스 sammy를 백업합니다. 이 명령에는 특정한 사용자 이름, 데이터베이스 이름 및 --clean 플래그가 포함되어 있습니다. 이 플래그는 pg_dump가 생성 중인 명령들을 출력하기 전에 데이터베이스 개체를 삭제하거나 “정리”하는 데 도움이 됩니다. --file 플래그에서는 백업 파일이 저장될 정확한 위치를 지정합니다. 명령문의 마지막 부분인 date +%Y-%m-%d-%H-%M-%S는 동적으로 날짜와 여러 파일을 생성하여 각 백업을 추적할 수 있도록 합니다. 그렇지 않으면 백업 파일이 계속해서 기존 파일을 덮어쓰게 됩니다. 이렇게 하면 특정 시간 또는 날짜에 대한 각 백업 파일을 추적할 수 있습니다. 전체 명령은 다음과 같습니다:

pg_dump --username=sammy --dbname=sammy --clean --file=/home/sammy/backup-`date +%Y-%m-%d-%H-%M-%S`.sql
Add command in Code tab for pgAgent step

참고: 백업 파일을 다른 위치에 저장하려는 경우 선택한 디렉토리의 절대 경로를 사용해야 합니다. 예를 들어, ~/은 보통 /home/sammy/의 홈 디렉토리를 가리키지만, 이 경우 pg_dump/home/sammy/의 절대 경로를 요구합니다.

백업 명령을 추가한 후에는 일정으로 표시된 탭으로 이동할 수 있습니다. 단계를 설정할 때와 마찬가지로, 일정을 추가하기 위해 + 기호를 클릭한 다음 원하는 이름을 제공하고 휴지통 아이콘 옆에 있는 연필 아이콘을 클릭하여 옵션을 확장합니다. 일반 탭 아래에는 작성한 이름이 있습니다. 이 예에서는 schedule1입니다. 활성화는 기본적으로 실행이 올바르게 수행되도록 설정되어 있습니다. 시작종료 옵션에서는 예약된 작업의 시작 및 종료 날짜와 시간을 지정합니다. 예약된 작업을 테스트하므로 현재 시간이 시작종료 범위 내에 있는지 확인하십시오. 원한다면 주석에 메모를 추가할 수 있습니다.

pgAgent Schedule options

이제 반복 탭으로 이동하십시오. 여기에서 예약된 작업이 실행되는 빈도를 사용자 정의할 수 있습니다. 주, 월, 날짜, 시간 또는 분에 대해 가능한 한 구체적으로 설정할 수 있습니다. 선택하지 않으면 모두 선택와 동일합니다. 따라서 주중을 비워 두면 스케줄은 주중을 고려합니다. 마찬가지로 시간에서 시간이나 분을 비워 둘 수 있으며, 이는 모두 선택와 동일합니다. 시간은 cron 형식으로 표시되므로 이 예시에서는 매 분마다 백업을 생성하려면 한 시간(00에서 59) 내에서 매 분을 선택해야 합니다. 이를 보여주기 위해 분에 대해 모두 선택를 선택했습니다. 모든 분이 나열되지만 비워 두면 동일한 결과를 얻을 수 있습니다:

Customize dates and times for job schedule on Repeat tab

원하지 않는 날짜나 시간에 작업을 실행하지 않으려면 더 정밀한 시간표를 만들거나 예외 탭으로 이동하여 설정할 수 있습니다.

참고: 작업은 예약된 시간에 따라 실행되므로 변경될 때마다 예약된 실행 시간이 다시 계산됩니다. 이렇게 되면 pgAgent는 과거 예약된 실행 시간 값을 데이터베이스에서 폴링하고, 일반적으로 지정된 시작 시간에서 1분 이내에 시작합니다. 문제가 있는 경우, pgAgent가 다시 시작되면 설정한 정기 스케줄로 돌아갑니다.

설정 및 사용자 정의 일정을 완료한 후 저장 버튼을 누르십시오. 새로운 pgAgent 작업이 왼쪽 트리 컨트롤에 작업 이름과 함께 표시됩니다. 예를 들어, 이 예제에서는 sammy_backup이라는 작업이 나타나며 아래에 스케줄단계가 표시됩니다:

Your pgAgent backup job step and schedule will now be listed

pgAgent 작업을 성공적으로 생성하셨으므로 다음 단계에서는 pgAgent 작업이 성공적으로 실행되는지 확인하는 방법에 대해 알아볼 것입니다.

단계 5 – pgAgent 작업 확인

데이터베이스를 매 분마다 백업하는 예약된 작업이 제대로 작동하는지 확인하는 방법은 몇 가지 있습니다. pgAdmin에서 왼쪽 트리 컨트롤로 이동하여 sammy_backup을 클릭할 수 있습니다. 거기서 통계 탭으로 이동하십시오. 통계 페이지에는 예약된 작업의 각 인스턴스가 다음과 같이 나열됩니다:

Verify if your job is working with pgAgent’s Statistics tab

통계는 즉시 나타나거나 새로 고침되지 않을 수 있으므로 이동하거나 브라우저를 새로 고칠 필요가 있을 수 있습니다. 작업이 일정된 간격으로 실행되도록 예약되었으므로 이를 염두에 두십시오.

만약 작업이 명령 줄에서 작동하는지 확인하려면 ls ~ 명령을 실행하여 홈 디렉토리 파일을 나열할 수 있습니다. 이 튜토리얼에서는 pg_dump 명령을 작성할 때 홈 디렉토리의 정확한 위치를 설정합니다. 4단계에서:

  1. ls ~

출력은 백업 파일이 저장될 때마다 각 인스턴스를 나열합니다.

6단계 – pgAgent 작업 수정, 비활성화, 삭제 및 수동 실행 (선택 사항)

pgAgent는 작업 수정 또는 비활성화에 유연성을 제공합니다. pgAdmin을 사용하여 특정 pgAgent 작업으로 이동하고, 이 경우에는 sammy_backup을 마우스 오른쪽 버튼으로 클릭한 다음 목록에서 속성 옵션을 선택할 수 있습니다. 여기서 작업을 수정하려면 위쪽에 있는 연필 아이콘을 누를 수 있습니다.

pgAgent Properties options such as modifying your job

속성에 있고 연필 아이콘을 누르면 다음과 같이 작업을 비활성화하도록 일정 탭으로 이동할 수 있습니다.

You can disable your pgAgent job in the Properties tab

또한, 왼쪽 트리 컨트롤에서 pgAgent 작업을 마우스 오른쪽 버튼으로 클릭하면 작업을 완전히 삭제하기 위해 삭제/삭제 옵션을 선택할 수 있습니다. 작업을 수동으로 실행하려면 동일한 단계를 반복하되, 이번에는 목록에서 지금 실행 옵션을 선택하십시오:

You can also choose to delete or manually run your job from the drop-down list

pgAgent를 사용하여 작업을 예약하는 몇 가지 기능만을 소개한 것이므로 다른 가능성이 무궁무진합니다. 예를 들어 데이터베이스의 모든 사용자 및 역할에 대한 백업을 생성하는 작업을 예약하고 싶을 수 있습니다. 특히 pg_dumpall --globals only 명령을 사용합니다. 또한 배치 작업을 사용하여 더 복잡한 스크립트를 사용할 수도 있으며, 이에 대한 자세한 내용은 PostgreSQL 위키 페이지에서 자세히 알아볼 수 있습니다.

결론

pgAgent는 데이터베이스를 일관되게 백업하는 등 번거로운 일상 업무를 자동 예약하는 데 도움이 되는 다양한 작업을 예약하는 데 유용합니다. 이 도구를 더 편안하게 사용할 수록 복잡한 예약이 필요한 다단계 작업이나 SQL 작업을 생성해 볼 수도 있습니다. 더 자세한 내용을 알고 싶다면 pgAdmin 웹사이트에서 공식 pgAgent 문서를 읽어보십시오.

Source:
https://www.digitalocean.com/community/tutorials/how-to-schedule-automatic-backups-for-postgresql-with-pgagent-in-pgadmin