우분투 리눅스 22.04에서 MariaDB 데이터 경로 변경하기

기본 경로에 저장하던 MariaDB 데이터량이 많아지다 보니 용량이 부족해 다른 파티션의 경로로 변경할 필요가 생겼습니다. 여기서는 순서대로 경로 변경하는 방법을 알아보겠습니다.

데이터 이전

데이터를 이전하기 위해 먼저 서버를 정지시킵니다.

$ systemctl stop mariadb.service

새롭게 사용할 데이터 폴더(여기서는 /home/mysql 로 하겠습니다)를 생성하고 rsync 를 이용해 데이터를 복사합니다. (rsync 를 활용하면 파일의 권한과 소유자 정보도 동일하게 동기화해줍니다.)

$ cd /home
$ sudo rsync -avh /var/lib/mysql .

만약 mysql 이 아닌 다른 경로로 하고 싶다면 아래와 같이 권한 지정 후 rsync 하면 됩니다.

$ mkdir /home/mariadb
$ chown mysql:mysql /home/mariadb
$ cd /home/mariadb
$ rsync -avh /var/lib/mysql/ .

경로 설정 변경하기

콘솔에서 vi 를 이용해 설정 파일을 엽니다.

$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

내용 중 아래의 datadir 경로를 변경하고 저장합니다.(:wq)

# datadir                 = /var/lib/mysql
datadir                 = /home/mysql

DB 서버 서비스 시작 및 오류 해결하기

$ sudo systemctl start mariadb.service
Job for mariadb.service failed because the control process exited with error code.
See "systemctl status mariadb.service" and "journalctl -xeu mariadb.service" for details.

마리아 디비 서버가 시작되지 않고 오류가 발생했네요. 알려준 대로 status 출력을 해봅니다.

$ sudo systemctl status mariadb.service
× mariadb.service - MariaDB 10.6.12 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Thu 2023-03-16 13:33:13 KST; 24min ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 1702049 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
    Process: 1702050 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 1702052 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR>
    Process: 1702133 ExecStart=/usr/sbin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
   Main PID: 1702133 (code=exited, status=1/FAILURE)
     Status: "MariaDB server is down"
        CPU: 153ms

 3월 16 13:33:13 doogle.link systemd[1]: Starting MariaDB 10.6.12 database server...
 3월 16 13:33:13 doogle.link mariadbd[1702133]: 2023-03-16 13:33:13 0 [Warning] Can't create test file /home/mysql/doogle.lower-test
 3월 16 13:33:13 doogle.link mariadbd[1702133]: [89B blob data]
 3월 16 13:33:13 doogle.link mariadbd[1702133]: 2023-03-16 13:33:13 0 [ERROR] Aborting
 3월 16 13:33:13 doogle.link systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
 3월 16 13:33:13 doogle.link systemd[1]: mariadb.service: Failed with result 'exit-code'.
 3월 16 13:33:13 doogle.link systemd[1]: Failed to start MariaDB 10.6.12 database server.

이렇게 오류가 발생했네요. 테스트 파일을 생성하지 못하는 것을 보니 뭔가 권한 문제가 걸린 것 같습니다. 구글에서 검색해 보니 MariaDB 서비스 설정에서 /home 경로와 같은 특정 경로 접근이 제한하는 설정이 들어있습니다. 결국 데이터 저장 경로를 다른 곳으로 바꾸던지 바꿀 수 없는 경우 제한 설정을 해제하면 됩니다.

먼저 서비스 설정 파일을 엽니다.

$ sudo vi /usr/lib/systemd/system/mariadb.service

/home 경로 차단 설정을 해제하고 저장합니다. (기존 설정을 주석 처리) (:wq)

# Prevent accessing /home, /root and /run/user
#ProtectHome=true
ProtectHome=false

이제 아래 명령어를 실행해 서비스를 시작해 주면 됩니다.

$ sudo systemctl daemon-reload
$ sudo systemctl start mariadb.service

휴 이제야 오류 없이 정상적으로 작동하네요! ^ㅇ^//

참고

  1. https://dantes.kr/555
  2. apparmor 사용시 경로 변경 방법 https://asecurity.dev/entry/MariaDBMySQL-Database-%ED%8C%8C%EC%9D%BC-%EC%9C%84%EC%B9%98-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0