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
을 실행하라고 알려줍니다. :
- sudo -u postgres psql
모니터에 들어가면 데이터 디렉토리를 선택하십시오.
- SHOW data_directory;
Output data_directory
------------------------------
/var/lib/postgresql/9.5/main
(1 row)
이 출력은 PostgreSQL이 기본 데이터 디렉터리인 /var/lib/postgresql/9.5/main
을 사용하도록 구성되었음을 확인하므로 이 디렉터리를 이동해야 합니다. 시스템에서 디렉토리를 확인했으면 \\q
를 입력하여 종료합니다.
데이터의 무결성을 보장하기 위해 실제로 데이터 디렉토리를 변경하기 전에 PostgreSQL을 종료합니다.
- sudo systemctl stop postgresql
systemctl
은 모든 서비스 관리 명령의 결과를 표시하지 않습니다. 성공했는지 확인하려면 다음 명령을 사용하십시오.
- 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.5
는 postgresql.conf
파일에서 위치를 명시적으로 정의했기 때문에 반드시 필요한 것은 아니지만 프로젝트 규칙을 따르면 나쁘지 않습니다. 특히 향후 여러 버전의 PostgreSQL을 실행할 필요가 있는 경우.
- sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01
복사가 완료되면 현재 폴더의 이름을 .bak 확장자로 변경하고 이동이 성공했음을 확인할 때까지 보관합니다. 이름을 바꾸면 새 위치와 이전 위치 모두에 있는 파일에서 발생할 수 있는 혼동을 피할 수 있습니다.
- 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
으로 설정됩니다. /코드> 파일. 새 데이터 디렉터리를 반영하도록 이 파일을 편집합니다.
- sudo nano /etc/postgresql/9.5/main/postgresql.conf
data_directory
로 시작하는 줄을 찾아 다음 경로를 변경하여 새 위치를 반영합니다.
우리의 경우 업데이트된 파일은 아래 출력과 같습니다.
. . .
data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main'
. . .
3단계 - PostgreSQL 재시작
PostgreSQL을 시작할 준비가 되었습니다.
- sudo systemctl start postgresql
- sudo systemctl status postgresql
새 데이터 디렉토리가 실제로 사용 중인지 확인하려면 PostgreSQL 모니터를 시작하십시오.
- sudo -u postgres psql
데이터 디렉터리의 값을 다시 확인합니다.
- SHOW data_directory;
Output data_directory
-----------------------------------------
/mnt/volume-nyc1-01/postgresql/9.5/main
(1 row)
이제 PostgreSQL을 다시 시작하고 새 위치를 사용하고 있음을 확인했으므로 데이터베이스가 완전히 작동하는지 확인하십시오. 기존 데이터의 무결성을 확인한 후에는 백업 데이터 디렉터리를 제거할 수 있습니다.
- sudo rm -Rf /var/lib/postgresql/9.5/main.bak
PostgreSQL을 마지막으로 다시 시작하여 예상대로 작동하는지 확인합니다.
- sudo systemctl restart postgresql
- sudo systemctl status postgresql
결론:
따라했다면 데이터베이스는 새 위치의 데이터 디렉터리와 함께 실행되어야 하며 저장소를 확장할 수 있는 중요한 단계를 완료한 것입니다. 또한 웹 응용 프로그램을 확장하고 최적화하는 데 도움이 되는 서버 인프라를 만드는 방법에 대한 아이디어는 웹 응용 프로그램을 위한 5가지 일반 서버 설정을 살펴보는 것이 좋습니다.