덤프 및 복원을 사용하여 PostgreSQL 데이터베이스 마이그레이션

적용 대상: Azure Database for PostgreSQL - 단일 서버 Azure Database for PostgreSQL - 유연한 서버

pg_dump를 사용하여 PostgreSQL 데이터베이스를 덤프 파일로 추출할 수 있습니다. 데이터베이스를 복원하는 방법은 선택한 덤프의 형식에 따라 달라집니다. 덤프가 일반 형식(기본값 -Fp이므로 특정 옵션을 지정할 필요가 없음)으로 사용하는 경우 일반 텍스트 파일을 출력하기 때문에 복원하는 유일한 옵션은 psql을 사용하는 것입니다. 다른 세 개의 덤프 메서드인 custom, directory 및 tar의 경우 pg_restore를 사용해야 합니다.

Important

이 문서에 제공된 지침 및 명령은 bash 터미널에서 실행되도록 설계되었습니다. 여기에는 WSL(Linux용 Windows 하위 시스템), Azure Cloud Shell 및 기타 bash 호환 인터페이스와 같은 환경이 포함됩니다. bash 터미널을 사용하여 단계를 수행하고 이 가이드에 설명된 명령을 실행해야 합니다. 다른 유형의 터미널 또는 셸 환경을 사용하면 명령 동작에 차이가 발생할 수 있으며 의도한 결과가 생성되지 않을 수 있습니다.

이 문서에서는 일반(기본값) 및 디렉터리 형식을 중점적으로 다룹니다. 디렉터리 형식은 처리에 여러 코어를 사용할 수 있으므로 유용하며, 특히 큰 데이터베이스의 경우 효율성을 크게 향상시킬 수 있습니다.

Azure Portal은 값을 사용자 데이터로 바꿔서 서버에 맞게 미리 구성된 명령을 제공하는 방식으로 연결 블레이드를 통해 이 프로세스를 간소화합니다. 연결 블레이드는 단일 서버가 아닌 Azure Database for PostgreSQL - 유연한 서버에만 사용할 수 있다는 점에 유의해야 합니다. 이 기능을 사용하는 방법은 다음과 같습니다.

  1. Azure Portal 액세스: 먼저 Azure Portal로 이동하고 연결 블레이드를 선택합니다.

    Screenshot showing the placement of Connect blade in Azure portal.

  2. 데이터베이스 선택: 연결 블레이드에서 데이터베이스의 드롭다운 목록을 찾습니다. 덤프를 수행하려는 데이터베이스를 선택합니다.

    Screenshot showing the dropdown where specific database can be chosen.

  3. 적절한 방법 선택: 데이터베이스 크기에 따라 다음 두 가지 방법 중에서 선택할 수 있습니다.

    • pg_dumppsql - 단일 텍스트 파일 사용: 더 작은 데이터베이스에 이상적입니다. 이 옵션은 덤프 및 복원 프로세스에 단일 텍스트 파일을 사용합니다.
    • pg_dumppg_restore - 여러 코어 사용: 더 큰 데이터베이스의 경우 이 메서드는 여러 코어를 사용하여 덤프 및 복원 프로세스를 처리하므로 좀 더 효율적입니다.

    Screenshot showing two possible dump methods.

  4. 명령 복사 및 붙여넣기: 포털에서는 바로 사용할 수 있는 pg_dumppsql 또는 pg_restore 명령을 제공합니다. 이러한 명령은 선택한 서버 및 데이터베이스에 따라 미리 대체된 값이 함께 제공됩니다. 이러한 명령을 복사하여 붙여넣습니다.

필수 조건

단일 서버를 사용하려고 하거나 유연한 서버 포털에 액세스할 수 없는 경우 이 설명서 페이지를 읽어보세요. 포털의 유연한 서버에 대한 연결 블레이드에 표시되는 것과 유사한 정보가 포함되어 있습니다.

이 방법 가이드를 단계별로 실행하려면 다음이 필요합니다.

  • 액세스를 허용하는 방화벽 규칙을 포함하는 Azure Database for PostgreSQL 서버.
  • 역할 및 권한, 설치된 명령줄 유틸리티를 사용하여 마이그레이션하려는 경우 pg_dump, psql, pg_restorepg_dumpall
  • 덤프의 위치 결정: 덤프를 수행할 위치를 선택합니다. 이 작업은 별도의 VM, , 클라우드 셸(명령줄 유틸리티가 이미 설치되어 있지만 적절한 버전이 아닐 수 있으므로 항상 psql --version을 사용하여 버전을 확인해야 함) 또는 사용자의 고유한 랩톱 등, 다양한 위치에서 수행할 수 있습니다. PostgreSQL 서버와 덤프 또는 복원을 실행 중인 위치 사이의 거리와 대기 시간을 항상 염두에 두어야 합니다.

Important

데이터를 내보내거나 데이터를 가져오는 데이터베이스 서버와 주 버전이 동일하거나 더 높은 pg_dump, psql, pg_restorepg_dumpall유틸리티를 사용해야 합니다. 이렇게 하지 않으면 데이터 마이그레이션에 실패할 수 있습니다. 대상 서버의 주 버전이 원본 서버보다 더 높은 경우 대상 서버와 주 버전이 동일하거나 더 높은 유틸리티를 사용합니다.

참고 항목

pg_dump에서 한 번에 하나의 데이터베이스만 내보낼 수 있다는 점에 유의해야 합니다. 이 제한은 단일 파일을 사용하든, 여러 코어를 사용하든, 선택한 메서드에 관계없이 적용됩니다.

pg_dumpall -r을사용하여 사용자 및 역할 덤프

pg_dump는 PostgreSQL 데이터베이스를 덤프 파일로 추출하는 데 사용됩니다. 그러나 역할 또는 사용자 정의는 PostgreSQL 환경 내에서 전역 개체로 간주되므로 pg_dump에서 이러한 항목을 덤프하지 않는 것을 이해하는 것이 중요합니다. 사용자 및 역할을 비롯한 포괄적인 마이그레이션의 경우 pg_dumpall -r을 사용해야 합니다. 이 명령을 사용하면 PostgreSQL 환경에서 모든 역할 및 사용자 정보를 캡처할 수 있습니다. 동일한 서버의 데이터베이스 내에서 마이그레이션하는 경우 이 단계를 건너뛰고 새 데이터베이스 만들기 섹션으로 이동하세요.

pg_dumpall -r -h <server name> -U <user name> > roles.sql

예를 들어 mydemoserver라는 서버와 myuser라는 사용자가 있는 경우 다음 명령을 실행합니다.

pg_dumpall -r -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

단일 서버를 사용하는 경우 사용자 이름에 서버 이름 구성 요소가 포함됩니다. 따라서 myuser 대신, myuser@mydemoserver를 사용합니다.

유연한 서버에서 역할 덤프

유연한 서버 환경에서 보안 조치 강화는 사용자가 역할 암호가 저장되는 pg_authid 테이블에 액세스할 수 없다는 것을 의미합니다. 이 제한은 표준 pg_dumpall -r 명령이 이 표에 액세스하여 암호를 확인하려고 시도하지만 권한 부족으로 인해 실패하기 때문에 역할 덤프를 수행하는 방법에 영향을 줍니다.

유연한 서버에서 역할을 덤프하는 경우 pg_dumpall 명령에 --no-role-passwords 옵션을 포함하는 것이 중요합니다. 이 옵션은 pg_dumpall이 보안 제한으로 인해 읽을 수 없는 pg_authid 표에 액세스하려고 시도하지 않게 합니다.

유연한 서버에서 역할을 성공적으로 덤프하려면 다음 명령을 사용합니다.

pg_dumpall -r --no-role-passwords -h <server name> -U <user name> > roles.sql

예를 들어 mydemoserver라는 서버와 myuser라는 사용자가 있는 경우 다음 명령을 실행합니다.

pg_dumpall -r --no-role-passwords -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

역할 덤프 정리

출력 파일을 마이그레이션할 때 roles.sql에는 새 환경에서 적용 가능하거나 허용되지 않는 특정 역할 및 특성이 포함될 수 있습니다. 고려해야 할 사항은 다음과 같습니다.

  • 슈퍼 사용자만 설정할 수 있는 특성 제거: 사용자에게 슈퍼 사용자 권한이 없는 환경으로 마이그레이션하는 경우 역할 덤프에서 NOSUPERUSERNOBYPASSRLS와 같은 특성을 제거합니다.

  • 서비스별 사용자 제외: azure_superuser 또는 azure_pg_admin과 같은 단일 서버 서비스 사용자를 제외합니다. 이러한 항목은 서비스와 관련이 있으며 새 환경에서 자동으로 만들어집니다.

다음 sed 명령을 사용하여 역할 덤프를 정리합니다.

sed -i '/azure_superuser/d; /azure_pg_admin/d; /azuresu/d; /^CREATE ROLE replication/d; /^ALTER ROLE replication/d; /^ALTER ROLE/ {s/NOSUPERUSER//; s/NOBYPASSRLS//;}' roles.sql

이 명령은 azure_superuser, azure_pg_admin, azuresu가 포함된 줄, CREATE ROLE replicationALTER ROLE replication으로 시작하는 줄을 삭제하고 ALTER ROLE 문에서 NOSUPERUSERNOBYPASSRLS 특성을 제거합니다.

로드할 데이터가 들어 있는 덤프 파일 만들기

온-프레미스 또는 VM의 기존 PostgreSQL 데이터베이스를 sql 스크립트 파일로 내보내려면 기존 환경에서 다음 명령을 실행합니다.

pg_dump <database name> -h <server name> -U <user name> > <database name>_dump.sql

예를 들어 mydemoserver라는 서버, myuser라는 사용자 및 testdb라는 데이터베이스가 있는 경우 다음 명령을 실행합니다.

pg_dump testdb -h mydemoserver.postgres.database.azure.com -U myuser > testdb_dump.sql

단일 서버를 사용하는 경우 사용자 이름에 서버 이름 구성 요소가 포함됩니다. 따라서 myuser 대신, myuser@mydemoserver를 사용합니다.

대상 데이터베이스로 데이터 복원

역할 및 사용자 복원

데이터베이스 개체를 복원하기 전에 역할을 제대로 덤프하고 정리했는지 확인합니다. 동일한 서버의 데이터베이스 내에서 마이그레이션하는 경우 역할을 덤프하고 복원할 필요가 없을 수 있습니다. 그러나 여러 서버 또는 환경에서 마이그레이션하는 경우 이 단계가 중요합니다.

역할 및 사용자를 대상 데이터베이스로 복원하려면 다음 명령을 사용합니다.

psql -f roles.sql -h <server_name> -U <user_name>

<server_name>을 대상 서버의 이름으로 바꾸고 <user_name>을 사용자 이름으로 바꿉니다. 이 명령은 psql 유틸리티를 통해 roles.sql 파일에 포함된 SQL 명령을 실행하여 역할 및 사용자를 대상 데이터베이스로 효과적으로 복원합니다.

예를 들어 mydemoserver라는 서버와 myuser라는 사용자가 있는 경우 다음 명령을 실행합니다.

psql -f roles.sql -h mydemoserver.postgres.database.azure.com -U myuser

단일 서버를 사용하는 경우 사용자 이름에 서버 이름 구성 요소가 포함됩니다. 따라서 myuser 대신, myuser@mydemoserver를 사용합니다.

참고 항목

마이그레이션하려는 단일 서버 또는 온-프레미스 서버와 대상 서버에 이름이 같은 사용자가 이미 있는 경우 이 복원 프로세스에서 이러한 역할의 암호를 변경할 수 있습니다. 따라서 실행해야 하는 후속 명령에는 업데이트된 암호가 필요할 수 있습니다. 유연한 서버는 보안 조치 강화로 인해 사용자에 대한 암호 덤프를 허용하지 않으므로 원본 서버가 유연한 서버인 경우에는 이러한 측면이 해당되지 않습니다.

새 데이터베이스 만들기

데이터베이스를 복원하기 전에 비어 있는 새 데이터베이스를 만들어야 할 수 있습니다. 이렇게 하려면 사용 중인 사용자에게 CREATEDB 권한이 있어야 합니다. 일반적으로 사용되는 두 가지 방법은 다음과 같습니다.

  1. createdb 유틸리티 사용createdb 프로그램을 사용하면 PostgreSQL에 로그인하거나 운영 체제 환경을 벗어나지 않고도 bash 명령줄에서 직접 데이터베이스를 만들 수 있습니다. 예를 들면 다음과 같습니다.

    createdb <new database name> -h <server name> -U <user name>
    

    예를 들어 mydemoserver라는 서버, myuser라는 사용자 및 만들려는 새 데이터베이스가 testdb_copy인 경우 다음 명령을 실행합니다.

    createdb testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser
    

    단일 서버를 사용하는 경우 사용자 이름에 서버 이름 구성 요소가 포함됩니다. 따라서 myuser 대신, myuser@mydemoserver를 사용합니다.

  2. SQL 명령 사용 SQL 명령을 사용하여 데이터베이스를 만들려면 명령줄 인터페이스 또는 데이터베이스 관리 도구를 통해 PostgreSQL 서버에 연결해야 합니다. 연결되면 다음 SQL 명령을 사용하여 새 데이터베이스를 만들 수 있습니다.

CREATE DATABASE <new database name>;

<new database name>을 새 데이터베이스에 제공하려는 이름으로 바꿉니다. 예를 들어 testdb_copy라는 데이터베이스를 만들려면 명령은 다음과 같습니다.

CREATE DATABASE testdb_copy;

덤프 복원

대상 데이터베이스를 만든 후에는 덤프 파일에서 이 데이터베이스로 데이터를 복원할 수 있습니다. 복원하는 동안 errors.log 파일에 오류를 로그하고 복원이 완료된 후 해당 콘텐츠에 오류가 있는지 확인합니다.

psql -f <database name>_dump.sql <new database name> -h <server name> -U <user name> 2> errors.log

예를 들어 mydemoserver라는 서버, myuser라는 사용자 및 testdb_copy라는 새 데이터베이스가 있는 경우 다음 명령을 실행합니다.

psql -f testdb_dump.sql testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser 2> errors.log

복원 후 검사

복원 프로세스가 완료되면 errors.log 파일을 검토하여 발생할 수 있는 오류가 있는지 검토해야 합니다. 이 단계는 복원된 데이터의 무결성과 완전성을 보장하는 데 중요합니다. 데이터베이스의 안정성을 유지하기 위해 로그 파일에 있는 문제를 해결합니다.

마이그레이션 프로세스 최적화

대규모 데이터베이스로 작업하는 경우 덤프 및 복원 프로세스가 길어질 수 있으며 효율성과 안정성을 보장하기 위해 최적화가 필요할 수 있습니다. 이러한 작업의 성능에 영향을 줄 수 있는 다양한 요소를 인식하고 최적화하는 단계를 수행하는 것이 중요합니다.

덤프 및 복원 프로세스 최적화에 대한 자세한 지침은 pg_dump 및 pg_restore에 대한 모범 사례 문서를 참조하세요. 이 리소스는 대규모 데이터베이스를 처리하는 데 도움이 될 수 있는 포괄적인 정보 및 전략을 제공합니다.

다음 단계