웹사이트 검색

Ubuntu VPS에서 PostgreSQL 데이터베이스를 백업하는 방법


PostgreSQL이란 무엇입니까?

PostgreSQL은 최신 데이터베이스 관리 시스템입니다. 웹 사이트 및 응용 프로그램과 관련된 정보를 저장하고 조작하는 데 자주 사용됩니다.

모든 종류의 귀중한 데이터와 마찬가지로 데이터 손실을 방지하기 위해 백업 체계를 구현하는 것이 중요합니다. 이 가이드에서는 PostgreSQL 데이터를 백업할 수 있는 몇 가지 실용적인 방법을 다룹니다.

PostgreSQL 9.1과 함께 Ubuntu 12.04 VPS를 사용할 것입니다. 대부분의 최신 배포판과 최신 버전의 PostgreSQL은 비슷한 방식으로 작동합니다.

pg_dump를 사용하여 PostgreSQL 데이터베이스를 백업하는 방법

PostgreSQL에는 백업 목적으로 데이터베이스 정보를 파일에 덤프하는 데 사용할 수 있는 "pg_dump"라는 유틸리티가 포함되어 있습니다.

pg_dump 유틸리티는 Linux 명령줄에서 실행됩니다. 명령의 기본 구문은 다음과 같습니다.

pg_dump name_of_database > name_of_backup_file

이 명령은 모든 데이터베이스 정보를 읽을 수 있는 권한이 있는 사용자가 실행해야 하므로 대부분의 경우 수퍼유저로 실행됩니다.

실제 예를 들어 "postgres" 사용자로 로그인하고 "postgres"라고도 하는 기본 데이터베이스에서 명령을 실행할 수 있습니다.

sudo su - postgres
pg_dump postgres > postgres_db.bak

이 명령은 실제로 PostgreSQL 클라이언트 프로그램이므로 해당 시스템이 데이터베이스에 액세스할 수 있는 한 원격 시스템에서 실행할 수 있습니다.

원격 시스템을 백업하려는 경우 원격 호스트를 지정하는 "-h" 플래그와 원격 포트를 지정하는 "-p" 플래그를 전달할 수 있습니다.

pg_dump -h remote_host -p remote_port name_of_database > name_of_backup_file

필요한 경우 "-U" 옵션을 사용하여 다른 사용자를 지정할 수도 있습니다. 구문은 다음과 같습니다.

pg_dump -U user_name -h remote_host -p remote_port name_of_database > name_of_backup_file

다른 클라이언트 프로그램과 마찬가지로 pg_dump에도 동일한 인증 요구 사항이 있음을 명심하십시오. 즉, 백업하려는 시스템에 대해 로그인 자격 증명이 유효한지 확인해야 합니다.

PostgreSQL을 사용하여 pg_dump에서 데이터 덤프를 복원하는 방법

pg_dump에 의해 생성된 백업을 복원하려면 파일을 psql 표준 입력으로 리디렉션할 수 있습니다.

psql empty_database < backup_file

참고: 이 리디렉션 작업은 해당 데이터베이스를 생성하지 않습니다. 이 작업은 명령을 실행하기 전에 별도의 단계에서 수행해야 합니다.

예를 들어 "restored_database"라는 새 데이터베이스를 만든 다음 다음 명령을 실행하여 "database.bak"라는 덤프를 리디렉션할 수 있습니다.

createdb -T template0 restored_database
psql restored_database < database.bak

빈 데이터베이스는 "template0"을 기반으로 생성해야 합니다.

올바르게 복원하기 위해 수행해야 하는 또 다른 단계는 데이터베이스 내의 개체에 대한 권한을 소유하거나 부여하는 사용자를 다시 만드는 것입니다.

예를 들어, 데이터베이스에 "test_user" 사용자가 소유한 테이블이 있는 경우 가져오기 전에 복원 시스템에서 생성해야 합니다.

createuser test_user
psql restored_database < database.bak

복원 오류 처리

기본적으로 PostgreSQL은 도중에 오류가 발생하더라도 데이터베이스 복원을 계속 시도합니다.

많은 경우에 이는 분명한 이유로 바람직하지 않습니다. 데이터베이스를 적절한 상태로 복원하는 데 필요한 작업을 분류하는 것은 어려울 수 있습니다.

다음을 입력하여 PostgreSQL에 오류가 발생하면 중지하도록 지시할 수 있습니다.

psql --set ON_ERROR_STOP=on restored_database < backup_file

이로 인해 오류가 발생하면 PostgreSQL 복원 작업이 즉시 중단됩니다.

이렇게 하면 여전히 완전히 복원되지 않은 불구가 된 데이터베이스가 남게 되지만 이제 마지막에 오류 목록을 처리하는 대신 오류가 발생하는 대로 처리할 수 있습니다.

많은 상황에서 더 나은 옵션은 "-1"(숫자 1) 또는 "--single-transaction" 옵션일 수 있습니다.

psql -1 restored_database < backup_file

이 옵션은 단일 트랜잭션에서 모든 복원 세부 정보를 수행합니다.

이 옵션과 "ON_ERROR_STOP" 설정의 차이점은 이것이 완전히 성공하거나 아무 것도 가져오지 않는다는 것입니다.

이것은 더 큰 복원에 대해 비용이 많이 드는 절충안일 수 있지만 많은 경우 부분적으로 복원된 데이터베이스를 남기지 않는 이점이 그 비용보다 훨씬 큽니다.

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

시간을 절약하기 위해 시스템의 모든 데이터베이스를 백업하려는 경우 "pg_dumpall"이라는 유틸리티가 있습니다.

명령 구문은 일반 pg_dump 명령과 매우 유사하지만 데이터베이스를 지정하지 않습니다. 대신 이 명령은 사용 가능한 모든 데이터베이스를 백업합니다.

pg_dumpall > backup_file

기본 데이터베이스를 사용하여 파일을 psql에 전달하여 데이터베이스를 복원할 수 있습니다.

psql -f backup_file postgres

결론

백업은 모든 종류의 데이터 스토리지 계획에서 필수적인 구성 요소입니다. 다행스럽게도 PostgreSQL은 중요한 정보를 효과적으로 백업하는 데 필요한 유틸리티를 제공합니다.

모든 종류의 백업과 마찬가지로 백업을 정기적으로 테스트하여 생성된 복사본을 올바르게 복원할 수 있는지 확인하는 것이 중요합니다. 생성한 백업은 실제로 시스템을 복구하는 데 사용할 수 있는 경우에만 유용합니다.