웹사이트 검색

pgAdmin에서 pgAgent를 사용하여 PostgreSQL에 대한 자동 백업을 예약하는 방법


소개

pgAgent는 PostgreSQL 데이터베이스 작업을 예약하는 데 사용되는 도구입니다. 또한 Postgres 작업을 처리하기 위해 특별히 제작되었기 때문에 자주 사용되는 cron보다 더 강력한 스케줄링 기능을 가지고 있습니다. 예를 들어 pgAgent는 배치 스크립트나 명령 반복 없이 여러 단계를 예약할 수 있습니다. pgAdmin이 설치되어 있더라도 pgAgent는 특히 pgAdmin의 확장으로 독립적으로 다운로드해야 합니다.

이 자습서에서는 pgAgent를 설치하고 pgAdmin 그래픽 사용자 인터페이스(GUI)에서 pgAgent를 사용하도록 데이터베이스를 구성하고 pgAgent를 데몬으로 설정한 다음 pgAgent를 사용하여 데이터베이스를 백업할 작업을 예약합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용 사용자 및 방화벽으로 설정된 Ubuntu 22.04 서버. 초기 서버 설정 가이드를 읽으면 됩니다.
  • 서버에 설치된 PostgreSQL. Ubuntu 22.04에서 PostgreSQL을 설치하고 사용하는 방법에 대한 가이드를 따라 이를 설정할 수 있습니다. 이 가이드를 따를 때 pgAdmin을 PostgreSQL 인스턴스에 연결하려면 둘 다 필요하므로 새 역할과 데이터베이스를 생성해야 합니다.
  • pgAdmin이 계정 설정과 함께 설치되었습니다. Ubuntu 22.04의 서버 모드에서 pgAdmin4를 설치 및 구성하는 방법에 대한 자습서를 따라 이를 수행할 수 있습니다.

1단계 - pgAgent 설치

앞에서 언급했듯이 pgAgent는 pgAdmin을 설치할 때 자동으로 구성되지 않습니다. 다음 명령과 같이 apt install 및 패키지 이름 pgagent를 실행하여 터미널에서 pgAgent를 설치할 수 있습니다.

  1. sudo apt install pgagent

pgAgent를 설치한 후 다음 단계로 이동하여 pgAdmin에서 pgAgent를 사용하도록 데이터베이스를 구성합니다.

2단계 - pgAgent용 데이터베이스 구성

전제 조건을 따르면 pgAdmin이 설정되고 사용할 준비가 됩니다. pgAdmin을 통해 pgAgent 사용을 위해 데이터베이스를 구성할 수 있습니다. 웹 브라우저를 열고 http://your_domain에서 pgAdmin 애플리케이션으로 이동합니다. 계정에 로그인한 후 왼쪽 패널의 트리 컨트롤로 이동합니다. 생성한 sammy라는 데이터베이스를 찾아 목록을 확장합니다. 이 목록에는 확장이라는 옵션이 있습니다. 찾았으면 마우스 오른쪽 버튼으로 클릭하고 검색어 도구 옵션을 선택합니다.

pgAgent는 pgAdmin에서 사용하기 전에 데이터베이스에 확장을 로드해야 합니다. 이렇게 하려면 다음 쿼리를 작성하고 실행을 나타내는 측면 화살표 ▶를 클릭하여 명령을 실행합니다.

  1. CREATE EXTENSION pgagent;

검색어 도구 기능을 사용하는 이 단계는 다음 예에 나와 있습니다.

메시지 탭 아래에는 300msec 내에 성공적으로 반환된 쿼리를 반환하는 출력이 있습니다. 이것은 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 언어를 설치하면 하단에 쿼리가 231msec 내에 성공적으로 반환되었습니다.와 같은 메시지가 표시됩니다. 그런 다음 이전 CREATE EXTENSION pgagent 쿼리를 다시 실행합니다.

이러한 쿼리를 실행한 후 Extensions 아래에 pgagent 및 plpgsql에 대한 두 항목이 나열됩니다.

왼쪽의 트리 컨트롤에 pgAgent 작업이라는 새 항목이 나타납니다. 이는 pgAgent가 pgAdmin 계정에 성공적으로 설치되었음을 나타냅니다. 다음으로 작업을 성공적으로 실행할 수 있도록 pgAgent를 데몬으로 설정합니다.

참고: 이러한 항목이 즉시 표시되지 않는 경우 브라우저 페이지를 새로 고치십시오. 그러면 쿼리가 성공한 경우 항목이 나타납니다.

3단계 - pgAgent를 데몬으로 설정

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

pgAgent를 데몬으로 설정하려면 작업을 예약할 때 프로세스가 적절하게 실행되도록 PostgreSQL 연결 문자열이 필요합니다. 이 경우 PostgreSQL libpq 연결 문자열을 설정하고 있습니다. 즉, 사용자별로 지정되고 설정한 특정 매개 변수에 연결되는 문자열을 의미합니다. PostgreSQL 설명서에서 PostgreSQL libpq 연결 함수에 대해 자세히 알아볼 수 있습니다.

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

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

출력에 아무 것도 반환되지 않고 연결 오류 메시지가 표시되지 않으면 연결 문자열 설정이 성공한 것입니다.

연결 문자열을 만든 후에는 pgAgent로 작업을 예약할 준비가 된 것입니다.

4단계 - pgAgent로 작업 예약

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

이 자습서의 목적을 위해 pgAgent를 사용하여 매주 sammy 데이터베이스를 매분마다 백업하는 작업을 만듭니다. 다음과 같이 pgAgent 작업을 마우스 오른쪽 버튼으로 클릭하고 만들기를 선택한 다음 pgAgent 작업…을 선택하여 시작할 수 있습니다.

이렇게 하면 Create - pgAgent Job이라는 제목의 프롬프트가 표시되고 일반 탭에서 필요한 정보를 완료할 수 있습니다. 이 예에서는 sammy_backup이라는 이름을 사용하고 모든 호스트에서 이 작업을 실행할 수 있기를 원하므로 호스트 에이전트를 지정하지 않습니다. 또한 작업 클래스는 일상적인 유지 관리로 남겨둡니다. 다른 의견을 포함하려면 의견 섹션에서 자유롭게 입력하십시오.

그런 다음 단계 탭으로 이동합니다. 오른쪽 상단 모서리에 있는 + 기호를 클릭하여 단계를 만듭니다. 이 예에서는 이 단계의 이름을 step1로 지정합니다. 그런 다음 옵션을 확장하려면 휴지통 아이콘 왼쪽에 있는 연필을 클릭합니다. 활성화? 버튼은 기본적으로 켜져 있으며 이 작업이 실행될 때 이 단계가 포함됨을 나타냅니다.

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

데이터베이스 필드의 경우 올바른 데이터베이스를 선택했는지 확인하십시오. 여기서는 sammy를 지정했습니다. On error 옵션을 사용하면 단계를 실행할 때 오류가 있는 경우 pgAgent 응답을 사용자 지정할 수 있습니다. 이 경우 단계를 처리하려고 할 때 오류가 있으면 알려주지 않도록 실패를 선택했습니다. 다시 말하지만 추가 메모를 추가하려면 메모 상자에 메모를 추가할 수 있습니다.

동일한 단계 탭에는 코드 탭도 있습니다. 이 예에서와 같이 배치를 선택한 경우 해당 코드 탭으로 이동합니다. 이 탭에 들어가면 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

참고: 백업 파일을 다른 위치에 저장하도록 선택한 경우 선택한 디렉터리의 절대 경로를 사용해야 합니다. 예를 들어 ~/는 일반적으로 /home/sammy/의 홈 디렉토리를 가리키지만, 이 경우 pg_dump는 <코드>/홈/새미/.

백업 명령을 추가하면 일정 탭으로 이동할 수 있습니다. 단계를 설정할 때와 유사하게 + 기호를 클릭하여 일정을 추가한 다음 원하는 이름을 입력하고 휴지통 아이콘 옆에 있는 연필 아이콘을 클릭하여 옵션을 확장합니다. 일반 탭 아래에 작성한 이름이 있습니다. 이 예에서는 schedule1입니다. 다시 한 번 Enabled의 경우 일정이 제대로 실행되도록 on 스위치로 기본 설정됩니다. 시작 및 종료 옵션의 경우 예약된 작업의 시작 및 종료 날짜와 시간을 지정합니다. 예약된 작업을 테스트할 것이므로 현재 시간이 시작 및 종료 범위 내에 있는지 확인하십시오. 원하는 경우 댓글에 메모를 추가하세요.

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

작업을 실행하지 않으려는 요일 또는 시간이 있는 경우 보다 세분화된 시간 일정을 만들거나 예외 탭으로 이동하여 이를 설정할 수 있습니다.

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

실행하려는 일정 설정 및 사용자 지정을 마쳤으면 저장 버튼을 누릅니다. 새 pgAgent 작업이 작업 이름과 함께 왼쪽의 트리 컨트롤에 나타납니다. 이 예에서는 sammy_backup이 그 아래에 나열된 일정 및 단계와 함께 나타납니다.

이제 pgAgent 작업을 성공적으로 생성했으므로 다음 단계에서는 pgAgent 작업이 성공적으로 실행되고 있는지 확인하는 방법에 대해 알아봅니다.

5단계 - pgAgent 작업 확인

매분마다 데이터베이스의 백업 파일을 생성하는 예약 작업이 몇 가지 방식으로 작동하는지 확인할 수 있습니다. pgAdmin에서 왼쪽의 트리 컨트롤로 이동하여 sammy_backup을 클릭할 수 있습니다. 거기에서 통계라고 표시된 탭으로 이동합니다. 통계 페이지에는 다음과 같이 작동하는 예약된 작업의 각 인스턴스가 나열됩니다.

통계가 즉시 표시되거나 새로 고쳐지지 않을 수 있으므로 다른 곳으로 이동하거나 브라우저를 새로 고쳐야 할 수 있습니다. 작업은 설정된 간격으로 실행되도록 예약되어 있으므로 주기적이거나 더 긴 날짜나 시간을 설정하는 경우 이를 염두에 두십시오.

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

  1. ls ~

출력에는 저장 중인 백업 파일의 각 인스턴스가 나열됩니다.

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

pgAgent는 작업을 수정하거나 비활성화할 때 유연성을 제공합니다. pgAdmin을 사용하여 특정 pgAgent 작업(이 경우 sammy_backup)으로 이동할 수 있습니다. 그런 다음 마우스 오른쪽 버튼을 클릭하고 목록에서 속성 옵션을 선택합니다. 여기에서 상단의 연필 아이콘을 눌러 작업을 수정할 수 있습니다.

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

또한 왼쪽의 트리 컨트롤에서 pgAgent 작업을 마우스 오른쪽 버튼으로 클릭하면 DELETE/DROP 선택을 선택하여 작업을 완전히 삭제할 수 있습니다. 작업을 수동으로 실행하려는 경우 동일한 단계를 반복할 수 있지만 이번에는 목록에서 지금 실행 선택 항목을 선택합니다.

이것은 pgAgent를 사용하여 작업을 예약하기 위한 몇 가지 기능에 불과하지만 다른 많은 가능성이 있습니다. 예를 들어 특히 pg_dumpall --globals only 명령을 사용하여 데이터베이스의 모든 사용자 및 역할에 대한 백업을 생성하는 작업을 예약할 수 있습니다. PostgreSQL 위키 페이지에서 자세히 알아볼 수 있는 배치 작업과 함께 더 복잡한 스크립트를 사용할 수도 있습니다.

결론

pgAgent는 데이터베이스를 일관되게 백업하는 것과 같이 보다 일상적이지만 필요한 일상 작업을 줄이는 데 도움이 될 수 있는 다양한 작업을 예약하는 데 유용합니다. 이 도구를 사용하는 것이 더 편해지면 복잡한 일정이 필요한 다단계 작업이나 SQL 작업을 생성해 볼 수도 있습니다. 자세한 내용은 pgAdmin 웹 사이트에서 공식 pgAgent 문서를 참조하십시오.