웹사이트 검색

Ubuntu 16.04에서 PostgreSQL 데이터 디렉토리를 새 위치로 이동하는 방법


소개

데이터베이스는 시간이 지남에 따라 증가하며 때로는 원래 파일 시스템의 공간보다 커집니다. 나머지 운영 체제와 동일한 파티션에 있는 경우에도 I/O 경합이 발생할 수 있습니다. RAID, 네트워크 블록 스토리지 및 기타 장치는 중복성 및 기타 바람직한 기능을 제공할 수 있습니다. 더 많은 공간을 추가하거나, 성능을 최적화하는 방법을 평가하거나, 다른 스토리지 기능을 활용하려고 할 때 이 튜토리얼은 PostgreSQL의 데이터 디렉토리를 재배치하는 과정을 안내합니다.

전제 조건

이 가이드를 완료하려면 다음이 필요합니다.

  • sudo 권한이 있는 루트가 아닌 사용자가 있는 Ubuntu 16.04 서버. Ubuntu 16.04 가이드를 사용한 초기 서버 설정에서 이러한 권한을 가진 사용자를 설정하는 방법에 대해 자세히 알아볼 수 있습니다.\n
  • PostgreSQL 서버. 아직 설정하지 않은 경우 Ubuntu 16.04에서 PostgreSQL을 설치하고 사용하는 방법 가이드가 도움이 될 수 있습니다.\n

이 예에서는 데이터를 /mnt/volume-nyc1-01에 마운트된 블록 스토리지 장치로 이동합니다. DigitalOcean에서 Block Storage를 사용하는 경우 이 가이드는 이 튜토리얼을 계속하기 전에 볼륨을 마운트하는 데 도움이 될 수 있습니다.

어떤 기본 저장소를 사용하든 다음 단계를 따르면 데이터 디렉터리를 새 위치로 이동할 수 있습니다.

1단계 - PostgreSQL 데이터 디렉터리 이동

PostgreSQL의 데이터 디렉터리 이동을 준비하기 위해 대화형 PostgreSQL 세션을 시작하여 현재 위치를 확인합니다. 아래 라인에서 psql은 인터랙티브 모니터로 들어가는 명령이고, -u postgres는 sudo에게 시스템의 postgres 사용자로 psql을 실행하라고 알려줍니다. :

  1. sudo -u postgres psql

모니터에 들어가면 데이터 디렉토리를 선택하십시오.

  1. SHOW data_directory;
Output
data_directory ------------------------------ /var/lib/postgresql/9.5/main (1 row)

이 출력은 PostgreSQL이 기본 데이터 디렉터리인 /var/lib/postgresql/9.5/main을 사용하도록 구성되었음을 확인하므로 이 디렉터리를 이동해야 합니다. 시스템에서 디렉토리를 확인했으면 \\q를 입력하여 종료합니다.

데이터의 무결성을 보장하기 위해 실제로 데이터 디렉토리를 변경하기 전에 PostgreSQL을 종료합니다.

  1. sudo systemctl stop postgresql

systemctl은 모든 서비스 관리 명령의 결과를 표시하지 않습니다. 성공했는지 확인하려면 다음 명령을 사용하십시오.

  1. sudo systemctl status postgresql

출력의 마지막 줄에 서버가 중지되었다고 표시되면 종료되었음을 확인할 수 있습니다.

Output
. . . Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.

이제 서버가 종료되었으므로 rsync를 사용하여 기존 데이터베이스 디렉토리를 새 위치에 복사합니다. -a 플래그를 사용하면 권한 및 기타 디렉토리 속성이 유지되는 반면 -v는 자세한 출력을 제공하므로 진행 상황을 확인할 수 있습니다.

참고: 탭 완성을 사용하는 경우 추가될 수 있는 디렉토리에 후행 슬래시가 없는지 확인하십시오. 뒤에 슬래시가 있으면 rsync는 디렉토리의 내용을 포함하는 PostgreSQL 디렉토리로 전송하는 대신 마운트 지점으로 덤프합니다.

새 위치에서 원래 디렉터리 구조를 모방하기 위해 postgresql 디렉터리에서 rsync를 시작할 것입니다. 마운트 지점 디렉토리 내에 해당 postgresql 디렉토리를 만들고 PostgreSQL 사용자의 소유권을 유지함으로써 향후 업그레이드에 대한 권한 문제를 피할 수 있습니다. 버전 디렉토리 9.5postgresql.conf 파일에서 위치를 명시적으로 정의했기 때문에 반드시 필요한 것은 아니지만 프로젝트 규칙을 따르면 나쁘지 않습니다. 특히 향후 여러 버전의 PostgreSQL을 실행할 필요가 있는 경우.

  1. sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01

복사가 완료되면 현재 폴더의 이름을 .bak 확장자로 변경하고 이동이 성공했음을 확인할 때까지 보관합니다. 이름을 바꾸면 새 위치와 이전 위치 모두에 있는 파일에서 발생할 수 있는 혼동을 피할 수 있습니다.

  1. sudo mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.bak

이제 구성에 관심을 돌릴 준비가 되었습니다.

2단계 - 새 데이터 위치 지정

PostgreSQL에는 구성 값을 재정의하는 여러 가지 방법이 있습니다. 기본적으로 data_directory/etc/postgresql/9.5/main/postgresql.conf<에서 /var/lib/postgresql/9.5/main으로 설정됩니다. /코드> 파일. 새 데이터 디렉터리를 반영하도록 이 파일을 편집합니다.

  1. sudo nano /etc/postgresql/9.5/main/postgresql.conf

data_directory로 시작하는 줄을 찾아 다음 경로를 변경하여 새 위치를 반영합니다.

우리의 경우 업데이트된 파일은 아래 출력과 같습니다.

. . .
data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main'
. . .

3단계 - PostgreSQL 재시작

PostgreSQL을 시작할 준비가 되었습니다.

  1. sudo systemctl start postgresql
  2. sudo systemctl status postgresql

새 데이터 디렉토리가 실제로 사용 중인지 확인하려면 PostgreSQL 모니터를 시작하십시오.

  1. sudo -u postgres psql

데이터 디렉터리의 값을 다시 확인합니다.

  1. SHOW data_directory;
Output
data_directory ----------------------------------------- /mnt/volume-nyc1-01/postgresql/9.5/main (1 row)

이제 PostgreSQL을 다시 시작하고 새 위치를 사용하고 있음을 확인했으므로 데이터베이스가 완전히 작동하는지 확인하십시오. 기존 데이터의 무결성을 확인한 후에는 백업 데이터 디렉터리를 제거할 수 있습니다.

  1. sudo rm -Rf /var/lib/postgresql/9.5/main.bak

PostgreSQL을 마지막으로 다시 시작하여 예상대로 작동하는지 확인합니다.

  1. sudo systemctl restart postgresql
  2. sudo systemctl status postgresql

결론:

따라했다면 데이터베이스는 새 위치의 데이터 디렉터리와 함께 실행되어야 하며 저장소를 확장할 수 있는 중요한 단계를 완료한 것입니다. 또한 웹 응용 프로그램을 확장하고 최적화하는 데 도움이 되는 서버 인프라를 만드는 방법에 대한 아이디어는 웹 응용 프로그램을 위한 5가지 일반 서버 설정을 살펴보는 것이 좋습니다.