MariaDB 란?

오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)

MySQL을 소유한 썬 마이크로 시스템즈가 오라클에 인수되면서, MySQL의 라이선스 상태에 반발하여 만들어졌다.

MySQL에서 포크되었으며, 이로 인해 MySQL과 호환성이 높다.


MariaDB의 추가된 주요 기능들

  • Mariadb Galera Cluster (MySQL과는 달리 MariaDB 공식 릴리즈 버전에 포함됨)
  • 새로운 스토리지 엔진 : Aria, XtraDB, TokuDB 등
  • MariaDB Backup (MySQL의 xtrabackup이 MariaDB 공식 릴리즈 버전에 포함됨)

설치 환경

  • CentOS 6 / 7
  • cmake 3.9.6
  • MariaDB 10.2.36 / 10.3.26

mysql 계정 생성

[root@localhost work]# useradd -s /sbin/nologin mysql

필수 라이브러리 설치

CentOS 7 환경에서 설치 시

[root@localhost work]# yum -y install make zlib curl gcc cpp gcc-c++ libtermcap-devel ncurses-devel bzip2-devel gnutls-devel zlib-devel

CentOS 6 환경에서 설치 시

[root@localhost work]# yum -y install make zlib curl gcc cpp gcc-c++ libtermcap-devel ncurses-devel bzip2-devel

CentOS 7의 경우 yum으로 gnutls-devel 설치 시 “gnutls-devel-3.3.29-9” 이상의 버전이 설치 되기 때문에 최소 요구 버전인 3.3.24를 충족한다.

하지만 CentOS 6의 경우 “gnutls-devel-2.12.23-22”가 설치 되기 때문에 버전 최소 요구 조건이 충족하지 않아 MariaDB가 정상적으로 설치되지 않는다.

CMake Error at /usr/local/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find GnuTLS (missing: GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR)
  (Required is at least version "3.3.24")
Call Stack (most recent call first):
  /usr/local/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:377 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/share/cmake-3.9/Modules/FindGnuTLS.cmake:54 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  libmariadb/CMakeLists.txt:319 (FIND_PACKAGE)

-- Configuring incomplete, errors occurred!

gnutls를 소스 설치해야 하지만 이때도 필요한 라이브러리들이 있다. gnutls 설치 전 필수 라이브러리를 순서대로 설치한다.

[gmp 설치]

[root@localhost work]# yum -y install gmp-devel
[root@localhost work]# rpm -qa | grep gmp-devel
gmp-devel-4.3.1-13.el6.x86_64

[nettle 설치]

  • gmp 라이브러리를 설치하지 않은 상태에서 nettle 라이브러리를 설치하면 libhogweed.so 파일이 생성되지 않는다. 이로 인해 gnutls 설치가 안되니 주의한다.
    • 3.2버전 부터 llibhogweed.so 가 생성되지 않는다.
    • 여기서는 CentOS 7에서의 nettle-devel 버전에 맞추어 2.7.1로 설치를 진행한다.
[root@localhost work]# wget https://ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz
[root@localhost work]# tar zxvf nettle-2.7.1.tar.gz 
[root@localhost work]# cd nettle-2.7.1
[root@localhost nettle-2.7.1]# ./configure --prefix=/usr/local --libdir=/usr/local/lib64
[root@localhost nettle-2.7.1]# make
[root@localhost nettle-2.7.1]# make install

[gnutls 설치]

  • 여기서는 CentOS 7에서의 gnutls-devel 버전에 맞추어 3.3.29로 설치를 진행한다.
    • 설치 시 libnettle과 libhogweed를 찾지 못해 실패하게 되므로, 아래의 명령어들을 입력한다.
[root@localhost work]# ln -s /usr/local/lib64/pkgconfig/nettle.pc /usr/lib64/pkgconfig/nettle.pc
[root@localhost work]# ln -s /usr/local/lib64/pkgconfig/hogweed.pc /usr/lib64/pkgconfig/hogweed.pc
[root@localhost work]# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib64                   # 추가 후 저장
[root@localhost work]# ldconfig
	
[root@localhost work]# wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.3/gnutls-3.3.29.tar.xz
[root@localhost work]# tar Jxvf gnutls-3.3.29.tar.xz 
[root@localhost work]# cd gnutls-3.3.29
	
[root@localhost gnutls-3.3.29]# ./configure --prefix=/usr/local --libdir=/usr/local/lib64
[root@localhost gnutls-3.3.29]# make
[root@localhost gnutls-3.3.29]# make install

cmake 설치

cmake 란?

Make의 대용품을 만들기 위한 오픈소스 프로젝트

스스로 기존의 make의 과정을 수행하지 않고 지정한 운영체제에 맞는 make 파일의 생성만을 수행하기 때문에 Meta Make라고도 불린다.

유닉스 계열 OS 중심이던 기존의 Make와는 달리 한번 작성해 두면 유닉스 계열은 물론, 마이크로소프트 윈도우 계열의 프로그래밍 도구도 지원한다

[root@localhost work]# wget https://cmake.org/files/v3.9/cmake-3.9.6.tar.gz
[root@localhost work]# tar zxvf cmake-3.9.6.tar.gz
[root@localhost work]# cd cmake-3.9.6
[root@localhost cmake-3.9.6]# ./bootstrap
[root@localhost cmake-3.9.6]# make
[root@localhost cmake-3.9.6]# make install

MariaDB 다운로드

MariaDB 10.2.36 다운로드

[root@localhost work]# wget https://mirror.yongbok.net/mariadb//mariadb-10.2.36/source/mariadb-10.2.36.tar.gz

MariaDB 10.3.26 다운로드

[root@localhost work]# wget https://mirror.yongbok.net/mariadb//mariadb-10.3.26/source/mariadb-10.3.26.tar.gz

MariaDB 설치

MariaDB 10.2.x와 10.3.x의 설치 과정은 기본적으로 동일하다.

MariaDB에서는 기본적으로 GNUSSL 라이브러리를 이용하여 SSL 기능을 구현한다.

OpenSSL 라이브러리를 사용하길 원한다면 아래와 같이 -DWITH_SSL 컴파일 옵션에 OpenSSL이 설치된 위치를 지정해주면 된다.

ex : OpenSSL 컴파일 설치 위치가 /usr/local/openssl 이라면 -DWITH_SSL=/usr/local/openssl

여기에선 기본적으로 사용하는 GNUSSL 라이브러리를 사용한다.

[root@localhost work]# tar zxvf mariadb-10.2.36.tar.gz
[root@localhost work]# cd mariadb-10.2.36

[root@localhost mariadb-10.2.36]# vi setup.sh

[Character Set을 euckr로 설정하고 싶은 경우]

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=euckr -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_COLLATION=euckr_korean_ci -DWITH_EXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1

[Character Set을 UTF-8로 설정하고 싶은 경우]

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1
[root@localhost mariadb-10.2.36]# chmod 711 setup.sh
[root@localhost mariadb-10.2.36]# ./setup.sh
[root@localhost mariadb-10.2.36]# make -j 4
[root@localhost mariadb-10.2.36]# make install

[root@localhost mariadb-10.2.36]# cd /usr/local/mysql
	
[root@localhost mariadb-10.2.36]# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql

my.cnf 파일 생성

MariaDB 10.2.x

[root@localhost mariadb-10.2.36]# cd /home/work/mariadb-10.2.36
[root@localhost mariadb-10.2.36]# cp support-files/my-innodb-heavy-4G.cnf.sh /etc/my.cnf
  • 해당 파일 복사한 후 정상적으로 MySQL이 실행되지 않는다면 /etc/my.cnf 안의 inno 로 시작하는 옵션들에 주석을 달아준다.

MariaDB 10.3.x

  • MariaDB 10.3.1 이후부터 my.cnf의 예제 파일이 소스를 통해 제공되지 않기 때문에 새로 생성한다.
[root@localhost mariadb-10.3.36]# vi /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
socket=/tmp/mysql.sock
bind-address=0.0.0.0

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/usr/local/mysql/data/mysqld.log
pid-file=/usr/local/mysql/data/mysqld.pid

부팅 이후 자동 실행되게 설정

CentOS 6 이하 버전

[root@localhost mariadb-10.2.36]# cd /etc/rc.d/rc3.d
[root@localhost rc3.d]# ln -s /usr/local/mysql/support-files/mysql.server S99mysql
[root@localhost rc3.d]# ./S99mysql start

CentOS 7

[root@localhost mariadb-10.2.36]# vi /usr/lib/systemd/system/mysqld.service
[Unit]
Description=Mysql Service
After=syslog.target
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop

[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl enable mysqld.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.

[root@localhost ~]# systemctl list-unit-files | grep mysql
mysqld.service                                enabled

[root@localhost ~]# systemctl restart mysqld.service