리눅스 MYSQL 데이터 경로(Datadir) 변경 방법
- Database
- 2023. 5. 8.
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
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
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 경로에 있던 데이터 파일들은 그대로 두셔도 되고 지우셔도 됩니다. 혹시 모르니 일부 테이블 데이터를 지우고 해당 테이블이 정상적으로 조회되는지 확인하고 지우시는 것도 방법입니다.
'Database' 카테고리의 다른 글
맥북 MySQL 설치 방법 (터미널) (0) | 2023.05.15 |
---|---|
SQL, LOWER UPPER 함수 사용 방법 (대소문자 전환) (0) | 2023.05.13 |
SQL, GROUP BY 사용법 (그룹별 집계) (0) | 2023.05.02 |
SQL, ORDER BY 사용법 (정렬 순서 지정) (0) | 2023.05.02 |
RDB, 기본키 / 외래키란? 필요한 이유 (1) | 2023.04.27 |