OS (CentOS 7.X 기준, MariaDB 10.4.21)
Mysql(MaraiDB 서로 다릅니다) 접속 후 아래의 명령어를 입력합니다.
대개, Linux MySQL 데이터 경로는 컴파일 설치나, 설치시 지정해주 않으면 /var/lib/mysql로 설정이 됩니다.
### 데이터 디렉토리 경로 확인 ###
MariaDB [(none)]> show variables like '%datadir%';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| datadir | /var/lib/mysql |
+---------------+----------------+
우리는 MySQL 콘솔 내에서 쿼리를 통해, DataDIR 를 변경하는 것은 불가능합니다. 또한 쿼리를 통해 변경된 모든 시스템(Glboal)변수는 DB 재시작 후, 초기화가 됩니다.
따라서, 영구적으로 설정 저장을 위해, 통상적으로 mysql 설치시 생성되는 설정 파일(/etc/my.cnf) 을 수정합니다.
우선 mysql 서비스를 종료합니다.!
[root@localhost ~]# systemctl stop mysql
or
[root@localhost ~]# systemctl stop mysqld
or
[root@localhost ~]# systemctl stop mariadb
/usr/local/mysql/bin/mysqld stop
/etc/init.d/mysqld stop 등.............
mysql 설치시 생성되는 설정 파일(/etc/my.cnf) 을 수정합니다.
### 1번 ###
[root@localhost ~]# find / -name my.cnf
### 2번(컴파일시) ###
[root@localhost ~]# mysqld --verbose --help | grep -A 1 'Default options'
output
.............
Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf
### 3번(컴파일시) ###
mysql 컴파일 한 폴더 하단에 cnf 파일 존재.
위는 my.cnf 파일을 찾는 방법입니다.
홈디렉토리 변경 적용을 위해, 아래와 같이 my.cnf 파일을 수정합니다.
MySQL 버전에 따라, /etc/my.cnf 파일이 아래와 같지 않으며, /etc/my.cnf.d/server.conf 와 같은 파일에 include
되어 있을 수 있습니다.
#### my.cnf 파일 수정 #####
...............
[client]
.........
[mysqld]
datadir=/home/mysql-data ///필수
socket=/home/mysql-data/mysql.sock
.................
기존 MySQL 데이터 디렉토리의 파일들을 신규 디렉토리로 복사합니다.
복사는 일반 복사가 아닙니다. 폴더,파일의 권한을 그대로 유지해야합니다.
아래와 같이 진행하시면 됩니다.
[root@localhost ~]# mkdir /home/mysql-data
[root@localhost ~]# rsync -av /var/lib/mysql/* /home/mysql-data/
[root@localhost ~]# chown -R mysql:mysql /home/mysql-data
자. 이러고 바로 MySQL 을 시작하면 오류가 나면서 시작이 되지 않습니다.
원인은 무엇일까요?
정답은 : CentOS 7.x OS의 SELinux 보안 설정입니다.
아래와 같이 disable 진행할 수 있습니다. 영구적으로 적용하는 방법과 일시적 적용 방법이 있습니다.
###### SELinux 설정 확인 #####
[root@localhost ~]# getenforce
Enabled
###### 임시로 설정 종료( 재부팅 시, MySQL 자동 시작 불가) ######
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Disabled
###### 영구 설정 ######
[root@localhost ~]# view /etc/selinux/config
#SELINUX=enforcing // 주석 처리
SELINUX=disabled // 내용 추가
만일 SELinux Enabled 유지하고 싶다?
아래와 같이 SELinux 설정을 변경합니다.
[root@localhost ~]# semanage fcontext -a -t mysqld_db_t "/home/mysql-data(/.*)?"
[root@localhost ~]# restorecon -R /home/mysql-data
[root@localhost ~]# systemctl start mysql
적용 후, MySQL 을 시작하면 안되는 경우가 있습니다. (아래와 같은 오류 메시지)
이 Case는 CentOS 7.x 의 Service Daemon 특성에 의해 발생합니다.
옵션값 수정을 통해 기본 디렉토리 /var/lib/mysql 변경을 가능하게 합니다.
#### 오류 문구 ####
Feb 5 11:21:41 localhost mysqld: 2021-02-05 11:21:41 0 [Warning] Can't create test file /home/mysql_data/localhost.lower-test
Feb 5 11:21:41 localhost mysqld: #007/usr/sbin/mysqld: Can't change dir to '/home/mysql_data/' (Errcode: 13 "Permission denied")
Feb 5 11:21:41 localhost mysqld: 2021-02-05 11:21:41 0 [ERROR] Aborting
#### 해결 방법 ####
[root@localhost ~]# view /usr/lib/systemd/system/mariadb.service
#ProtectHome=true -> 주석 처리
ProtectHome=false -> 새로 추가
서비스 데몬 reload
[root@localhost ~]# systemctl daemon-reload
MySQL을 실행한 후, 쿼리문을 입력하여 데이터 디렉토리 변경을 확인합니다!
#### MySQL 실행 ###
[root@localhost ~]# systemctl start mysql
### 데이터 디렉토리 경로 확인 ###
MariaDB [(none)]> show variables like '%datadir%';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| datadir | /home/mysql-data |
+---------------+----------------+
'IT 인터넷 > DB' 카테고리의 다른 글
MySQL 사용법 (4) - 테이블 복구 방법 (0) | 2021.12.14 |
---|---|
MySQL 사용법 (3) - 원격 설정 (0) | 2021.12.14 |
MySQL사용법 (2) - 패스워드 분실 시 초기화 (0) | 2021.12.14 |
웹 서버 만들기(Apache-PHP-Mysql) (3. Mysql 설치 -컴파일) (0) | 2021.12.14 |