MariaDB 10.4 install / CentOS 7
CentOS 7.9에서 mariaDB 10.4 설치하다 디스크 공간 문제를 고려하여 경로 변경하는 중 계속된 실패로 삽질을 한 참 하였다.
// 서비스 중지
$systemctl stop mariadb
[패키지 삭제]
$yum remove Maria*
// 전에 설치한 디폴트 경로
$rm -rf /var/lib/mysql
패키지 다운로드 및 기본 설치
yum으로 설치
// MariaDB yum repo 등록
$ vi /etc/yum.repos.d/MariaDB.repo
아래의 내용을 작성한다.
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
// MariaDB 설치
$ yum install MariaDB
// 설치된 버전 확인
$ rpm -qa | grep MariaDB
MariaDB-compat-10.4.17-1.el7.centos.x86_64
MariaDB-common-10.4.17-1.el7.centos.x86_64
MariaDB-server-10.4.17-1.el7.centos.x86_64
MariaDB-client-10.4.17-1.el7.centos.x86_64
또는
$ yum list installed Maria*
Installed Packages
MariaDB-client.x86_64 10.4.17-1.el7.centos @mariadb
MariaDB-common.x86_64 10.4.17-1.el7.centos @mariadb
MariaDB-compat.x86_64 10.4.17-1.el7.centos @mariadb
MariaDB-server.x86_64 10.4.17-1.el7.centos @mariadb
// 버전 확인
$ mariadb --version
mariadb Ver 15.1 Distrib 10.4.17-MariaDB, for Linux (x86_64) using readline 5.1
기본적으로 /var/lib/mysql에 설치된다.
// mariadb 실행
$ systemctl start mariadb
// 패스워드 설정
$ /usr/bin/mysqladmin -u root password '패스워드'
// 포트 확인
$ netstat -anp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 102252/mysqld
$ mysql -u root -p
> use mysql ;
[사용자 추가]
create user 'crazyj'@'%' identified by 'crazyj00.';
create user 'crazyj'@'localhost' identified by 'crazyj00.';
flush privileges ;
[DB생성]
create database CRAZYJ_DB ;
grant all privileges on CRAZYJ_DB.* to 'crazyj'@'%';
grant all privileges on CRAZYJ_DB.* to 'crazyj'@'localhost';
flush privileges ;
[사용자 패스워드 변경]
ALTER user 'crazyj'@'localhost' IDENTIFIED WITH mysql_native_password BY '새패스워드';
또는 아래와 같이 설정
ALTER user 'crazyj'@'localhost' IDENTIFIED BY '새패스워드';
ALTER user 'crazyj'@'%' IDENTIFIED BY '새패스워드';
flush privileges ;
여기서 기본 경로가 /var/lib/mysql 인데 추후 디스크 공간을 고려하면 다른 파티션으로 옮기고 싶어졌다.
여기서 문제가 시작됨…
데이터 경로 위치 변경
쉽게 생각하면… DB 서비스 중지하고,
/var/lib/mysql 폴더를 용량큰 파티션으로 이동하고
기존 경로를 링크를 걸어주면 끝.
이라고 생각하지만, 여러가지 원인으로 실패할 수 있다.
결론부터 말하면
- selinux (접근통제)도 off 해줘야 한다.
- mariadb 기본설정에서 /root 나 /home 경로로 이동을 막고 있다.
설정을 바꾸면 해결됨.
# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
#
#vi /etc/selinux/config
--------------
#SELINUX=enforcing
SELINUX=disabled
------------
$ systemctl stop mariadb
$ vi /usr/lib/systemd/system/mariadb.service
--------------------
# Prevent accessing /home, /root and /run/user
#ProtectHome=true
ProtectHome=false
------------------------
$ mv /var/lib/mysql /home/mysql
$ ln -s /home/mysql /var/lib/mysql
$ systemctl start mariadb
끝.
참고) 아래는 시도 과정…
아예 처음부터 새로 만들자. 디폴트 경로 변경
$ vi /etc/my.cnf.d/server.cnf
아래 섹션에 추가
------------------------
[mysqld]
datadir=/home/data/mysql
socket=/home/data/mysql/mysql.sock
-----------------
$ vi /etc/my.cnf.d/mysql-clients.cnf
아래를 추가 (client 섹션이 없어서 추가)
-----------------
[client]
socket=/home/data/mysql/mysql.sock
----------------
$ cd /bin
$ mariadb-install-db --user=mysql
위 설정파일에서 지정된 경로에서 초기화됨!!!!
(--user 옵션을 생략하면 root 계정으로 생성됨)
위와 같이 하면 되야 되는데… 서비스 실행시 그래도 에러발생???
$ yum install policycoreutils-python
$ ls -lZ /var/lib/mysql
$ cp -rf /var/lib/mysql /home/data/mysql
$ chown -R mysql:mysql /home/data/mysql
$ ls -lZ /home/data/mysql
$ vi my.cnf
datadir=/home/data/mysql
$ semanage fcontext -a -t mysqld_db_t "/home/data/mysql(/.*)?"
$ grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local
$ restorecon -R -v /home/data/mysql
$ ls -lZ /home/data/mysql
-----------------------------------
위와 같이 했는데도 결국 안되서 selinux 옵션을 끄기로...
# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
#
#vi /etc/selinux/config
--------------
#SELINUX=enforcing
SELINUX=disabled
------------
위와 같이 해도 selinux를 off했음에도 실패했음.
원인은… 기본적으로 centos에서 mariadb는 /home, /root 경로를 사용할 수 없다나…
아니, 이런 설정도 있었나??? 헐… 삽질만…
데이터 폴더 이동 방법 찾던 중 발견.
$ systemctl stop mysql
$ mkdir -p /home/data/mysql
$ cp -rf /var/lib/mysql /home/data/mysql
$ chown -R mysql:mysql /home/data/mysql
(나중에 정상작동 확인후, 기존data인 /var/lib/mysql은 삭제)
==================> 이 문제였음. <===================
$ vi /usr/lib/systemd/system/mariadb.service
# Prevent accessing /home, /root and /run/user
#ProtectHome=true
ProtectHome=false
==================> 이 문제였음. <===================
서비스 시작
$ systemctl start mysql
Author: crazyj7@gmail.com