본문 바로가기
Database

[postgresql] data 디렉토리 변경

by codeyaki 2024. 3. 6.
반응형

운영 중인 리눅스에서 /의 용량이 점점 부족해지는 것을 확인하게 되었다... 원인은 postgreSQL의 물리저장 위치가 기본적으로 /var/lib/pgsql/13/data이라서 용량이 적은 디스크가 마운트 되어있는 곳에 위치하고 있는 것이었다.

이대로 가다간 디스크의 용량이 가득 차 데이터베이스가 고장날것이 눈에 보였다...

기존에 사용하던 데이터베이스였기 때문에 데이터를 그대로 옮겨야 했다. 데이터가 쌓이는 물리위치인 data의 위치를 변경하면 해결이 가능할 것으로 보였다.

먼저 버전마다 설치 방법마다 data 디렉터리의 위치가 다르다. 이를 확인하기 위해서 psql에 접속한 뒤 해당 명령어를 작성해 주자. (pgsql의 bin 폴더에 있다.)

show data_directory;

[postgres@DB ~]$ psql
postgres=# show data_directory;
    data_directory
---------------------
 /var/lib/pgsql/13/data
(1개 행 )

확인해 주었다면 데이터베이스를 잠시 멈춰주자.

나의 경우에는 /usr/lib/systemd/system에 postgresql-13의 이름으로 서비스가 등록되어 있었기 때문에 아래와 같이 서비스를 멈춰주었다.

만약 서비스의 이름이 궁금하다면 /usr/lib/systemd/system 디렉터리로 이동해서 ls -l | grep postgresql로 서비스가 어떤 이름으로 등록되어 있는지 확인해 보자.

 

아래 명령어를 이용하면 빠르게 찾을 수 있다.

systemctl list-unit-files | grep postgres

 

$ sudo systemctl stop postgresql-13

그 뒤에 설정 파일을 수정해주어야 한다.

$ sudo vim /var/lib/pgsql/13/data/postmaster.opts

# /usr/pgsql-13/bin/postgres "-D" "/var/lib/pgsql/13/data/" -> 기존 코드
/usr/pgsql-13/bin/postgres "-D" "/data/postgres/data"/

먼저 postgres의 메인 프로세스인 postmater의 옵션을 바꿔준다. 이를 통해 어떤 디렉터리를 물리적 저장소로 이용할 것인지 정해주는 것과 같다.

그 뒤에는 systemctl의 postgresql 서비스 설정을 변경해주어야 한다.

/usr/lib/systemd/system/postgresql.serivce 혹은 /usr/lib/systemd/system/postgresql-{version}.service에 설정 정보가 담겨있다.

나의 경우에는 /usr/lib/systemd/system/postgresql-13.service의 이름으로 존재했다

많은 내용이 있는데 그중 데이터베이스 디렉터리의 장소를 담당하는 환경 변수를 찾아서 변경해 주면 된다.

$ sudo vim /usr/lib/systemd/system/postgresql-13.service

~~~~

# Location of database directory
# Environment=PGDATA=/var/lib/pgsql/13/data/ -> 기존 코드
Envirionment=PGDATA=/data/postgres/data/

~~~

이렇게 서비스 변경을 하고 나면 반드시 적용시켜주어야 한다.

$ sudo systemctl daemon-reload

이제 기존에 존재하던 data를 새로운 위치로 이동시켜 주자.

mv로 이동시켜도 되고 cp로 복사해 주어도 된다. (반드시 기존에 권한, 소유자, 소유그룹을 유지시켜 주자.)

$ sudo mkidr /data/postgres
$ cp -a /var/lib/pgsql/13/data /data/postgres/

혹은

mkdir /data/postgres/
mv /var/lib/pgsql/13/data /data/postgres/

로 적용 해주면 된다.

이제 다시 postgresql을 동작시켜 보자

$ sudo systemctl start postgresql-13

정상적으로 실행이 됐다면 show data_directory;로 확인해 보면 정상적으로 경로가 변경된 것을 확인할 수 있다.

[postgres@DB ~]$ psql
postgres=# show data_directory;
    data_directory
---------------------
 /data/postgres/data
(1개 행 )

데이터가 쌓여있어 data디렉터리의 크기가 약 130GB 정도였는데 이 작업을 통해서 디스크의 총용량인 190GB가 되기 전에 넉넉한 /data 디렉터리로 변경하여 큰일이 날뻔한 것을 방지할 수 있었다.

반응형

'Database' 카테고리의 다른 글

트랜잭션 (tansaction)  (2) 2023.06.11
H2 데이터베이스 설치  (0) 2022.02.11