리눅스 MYSQL 데이터 경로(Datadir) 변경 방법

MYSQL의 데이터 파일들이 쌓이는 기본 경로는 /var/lib/mysql입니다. mysql 데이터 경로 변경이 필요할 때가 있습니다. 예를 들어, 루트(/) 경로에는 50GB 밖에 할당되어 있지 않은데, /data 경로에는 500GB 할당되어 있으면 mysql 데이터 저장 경로는 /data로 변경하는 편이 좋습니다.

 

애초에 mysql 서비스를 시작할 때부터 경로를 변경해두는 것이 좋지만, 서비스 도중 이미 db 데이터가 생성된 상황에서 데이터 경로를 변경해야 할 때도 있습니다. 이 글에서는 /var/lib/mysql 경로에 이미 .ibd 등 데이터 파일들이 생성되어 있는 상황에서 /data 경로로 데이터 파일을 옮기는 방법을 알아보겠습니다.

MYSQL datadir 변경 방법

혹시 모르는 상황에 대비해서 DB를 백업해두는 게 좋습니다. mysql 백업 방법은 아래의 글을 참고해주세요.

 

https://change-words.tistory.com/entry/MYSQL-backup

 

MYSQL DB 백업하는 방법

MYSQL DB 백업이 필요한 이유가 몇 가지 있습니다. 1. 데이터 보존 차원에서 2. 다른 서버에 DB를 이관하기 위해 3. 테이블스페이스 공간을 확보하기 위해. DB 백업이라고 해서 거창한 건 없습니다. 데

change-words.tistory.com

 

1. MYSQL 서비스 중지

데이터 파일 이관을 위해 mysql 서비스를 중지합니다.

[root@localhost data]# systemctl stop mysqld

 

2. mysql 데이터 파일 복사/붙여넣기

현재 mysql datadir 경로로 이동합니다. 옮길 파일들을 확인합니다. 용량도 확인해봅니다.

[root@localhost data]# cd /var/lib/mysql
[root@localhost mysql]# ls
[root@localhost mysql]# du -sh

 

변경하려는 목적지 경로로 데이터 파일을 모두 복사 / 붙여넣기 합니다. 이때 명령어는 cp보다는 rsync를 쓰는 게 좋습니다. rsync는 옵션을 부여하면 파일의 소유자와 사용권한 등의 정보를 그대로 옮겨줍니다. mysql인 소유자와 소유그룹을 그대로 옮길 수 있습니다. 또 남은 완료 상황을 퍼센트(%)로 알려줍니다. 복사하는 파일 용량이 클수록 유용한 기능입니다. 보통 db 데이터 파일은 수십 수백 GB 이상인 경우가 많아서 복사하는데 시간이 좀 걸립니다.

[root@localhost mysql]# rsync -avh * /data

 

3. my.cnf 설정 변경

mysql의 설정 파일인 my.cnf(경로 : /etc/mysql/my.cnf)를 열어 아래와 같이 datadir 경로와 socket 경로를 변경합니다.

[mysqld]
datadir=/data
socket=/data/mysql.sock

 

my.cnf 설정 변경

 

4. MYSQL 서비스 시작

중지했던 mysql을 다시 시작합니다.

systemctl start mysqld

 

4-1. SELinux 액세스 거부 에러 발생하는 경우

SELinux 보안 컨텍스트 때문에 mysql 서비스 시작이 실패할 수도 있습니다. 이 경우 아래와 같은 에러가 발생합니다.

SELinux is preventing /usr/sbin/mysqld

 

이 경우 SELinux의 컨텍스트를 변경해줘야 합니다. 경로에 대한 액세스 권한을 부여하는 작업이라고 이해하시면 됩니다.

[root@localhost ~]# semanage fcontext -a -t mysqld_db_t "/data(/.*)?"
[root@localhost ~]# restorecon -v '/data'

 

적용 후엔 mysql이 정상 시작됩니다.

 

5. MYSQL 데이터 확인

mysql이 잘 실행됐다면 기존에 있던 데이터가 잘 있는지 확인해보세요. 문제가 없으면 서비스를 사용하시면 됩니다. 기존 /var/lib/mysql 경로에 있던 데이터 파일들은 그대로 두셔도 되고 지우셔도 됩니다. 혹시 모르니 일부 테이블 데이터를 지우고 해당 테이블이 정상적으로 조회되는지 확인하고 지우시는 것도 방법입니다.

반응형

댓글

Designed by JB FACTORY