반응형

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 |
+---------------+----------------+

 

반응형

+ Recent posts