MariaDB 10.5.8 컴파일 설치

MariaDB 10.5.8 컴파일 설치를 해보도록 한다. 컴파일 설치를 위한 환경은 다음과 같다.

  • CentOS 8(x86_64) Latest version
  • 최소 설치(Minimal Installation) 환경

CentOS 8 에 최소 설치 환경이 매우 중요 하다. 최소 설치 환경이 아니라면 이 문서 내용 그대로 할 수는 없을 수도 있다.

컴파일 환경 구축

CentOS 8 을 최소설치하게 되면 패키지 저장소 또한 최소한으로 활성화가 된다. CentOS 8 은 패키지를 위한 저장소를 많이 분할해 놨는데 다음과 같다.

]# ls -lh /etc/yum.repos.d/
total 48K
-rw-r--r--. 1 root root  719 Nov 10 09:32 CentOS-Linux-AppStream.repo
-rw-r--r--. 1 root root  704 Nov 10 09:32 CentOS-Linux-BaseOS.repo
-rw-r--r--. 1 root root 1.2K Nov 10 09:32 CentOS-Linux-ContinuousRelease.repo
-rw-r--r--. 1 root root  318 Nov 10 09:32 CentOS-Linux-Debuginfo.repo
-rw-r--r--. 1 root root  731 Jan 24 20:47 CentOS-Linux-Devel.repo
-rw-r--r--. 1 root root  704 Nov 10 09:32 CentOS-Linux-Extras.repo
-rw-r--r--. 1 root root  719 Nov 10 09:32 CentOS-Linux-FastTrack.repo
-rw-r--r--. 1 root root  740 Nov 10 09:32 CentOS-Linux-HighAvailability.repo
-rw-r--r--. 1 root root  693 Nov 10 09:32 CentOS-Linux-Media.repo
-rw-r--r--. 1 root root  706 Nov 10 09:32 CentOS-Linux-Plus.repo
-rw-r--r--. 1 root root  723 Jan 24 20:48 CentOS-Linux-PowerTools.repo
-rw-r--r--. 1 root root  898 Nov 10 09:32 CentOS-Linux-Sources.repo

최소설치한 후 활성화된 저장소는 다음과 같다.

]# dnf repolist
repo id                                                                                      repo name
appstream                                                                                    CentOS Linux 8 - AppStream
baseos                                                                                       CentOS Linux 8 - BaseOS
extras                                                                                       CentOS Linux 8 - Extras

RedHat 배포판의 경우 프로그래밍 라이브러리들은 devel 패키지로 불린다. 이런 devel 패키지는 powertools 저장소에 존재한다. 따라서 이 저장소를 다음과 같이 활성화 시켜준다.

]# dnf config-manager --set-enabled powertools

이제 컴파일을 위한 컴파일러와 라이브러리를 다음과 같이 설치 한다.

]# dnf clean all
]# dnf install gcc.x86_64 gcc-c++.x86_64 wget.x86_64 bzip2-devel.x86_64 pkgconf-pkg-config.x86_64 openssl-devel.x86_64 make.x86_64 man-db.x86_64 nasm.x86_64 readline-devel.x86_64 ncurses-devel.x86_64 automake* autoconf* pcre-devel.x86_64 cmake.x86_64 libaio-devel.x86_64 libevent-devel.x86_64 bison.x86_64 bison-devel.x86_64 numactl-devel.x86_64 cracklib-devel.x86_64 pam-devel.x86_64 systemd-devel.x86_64

설치 작업시에 필요한 유틸리티 프로그램도 함께 설치해 준다.

]# dnf install tar vim-enhanced

Configure, Make, Install

컴파일을 위해 Configure 를 해준다. Configure 를 하기전에 소스 압축을 해제한 디렉토리에 build_target 디렉토리를 만들고 그 안에 다음의 내용을 기반으로 하는 build.sh 스크립트 파일을 작성해 준다.

]# tar xvzf mariadb-10.5.8.tar.gz
]# cd mariadb-10.5.8
]# mkdir build_target
]# cd build_target
]# vim build.sh
export CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fPIC -fno-delete-null-pointer-checks'
export CXXFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fPIC -fno-delete-null-pointer-checks'
export LDFLAGS=' -pie -Wl,-z,relro,-z,now'

cmake .. \
-DCMAKE_INSTALL_PREFIX=/opt/mariadb-10.5.8 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/opt/mariadb-10.5.8/data \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATEDX_STORAGE_ENGINE=1 \
-DWITH_ARIA_STORAGE_ENGINE=1 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_QUERY_CACHE_INFO=ON \
-DWITH_QUERY_RESPONSE_TIME=ON \
-DWITH_SAFEMALLOC=AUTO \
-OPENSSL_ROOT_DIR=/usr \
-OPENSSL_INCLUDE_DIR=/usr/include \
-OPENSSL_LIBRARIES=/usr/lib \
-DWITH_LOCALES=ON \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_READLINE=1 \
-DWITH_SYSTEMD=yes \
-DWITH_SSL=system \
-DWITH_ZLIB=system

build.sh 파일을 작성한 후에 다음과 같이 실행 퍼미션을 주고 실행해 준다.

]# chmod +x build.sh
]# ./build.sh
-- Found BISON: /usr/bin/bison (found suitable version "3.0.4", minimum required is "2.0")
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mariadb-10.5.8/build_target

아무런 오류 없이 실행이 됐다면 컴파일과 설치를 해준다.

]# make
]# make install

이상 없이 컴파일과 정상적으로 설치가 되었다면 설치후 작업을 진행한다.

설치 후 작업

Mariadb 는 정상적으로 작동하기 위해서는 시스템 계정이 반드시 필요하다. 다음과 같이 시스템 계정을 생성해 준다.

]# /usr/sbin/groupadd -g 27 -o -r mariadb
]# useradd -M -g mariadb -o -r -d /opt/mariadb/logs -s /bin/false -c "MariaDB Server" -u 27 mariadb

계정 생성이 되었다면 이제 데이터베이스가 사용할 데이터 디렉토리를 생성해 준다.

]# mkdir /opt/mariadb/run
]# mkdir -p /opt/dbstorage/tmp
]# mkdir -p /opt/dbstorage/maria
]# mkdir -p /opt/dbstorage/logs
]# mkdir -p /opt/dbstorage/InnoDB
]# mkdir -p  /opt/dbstorage/InnoDB/redoLogs
]# mkdir -p /opt/dbstorage/InnoDB/undoLogs
]# chown -R mariadb: /opt/dbstorage
]# cd /opt/mariadb
]# chown -R root:mariadb .
]# chown -R mariadb:mariadb run

MariaDB 의 라이브러리를 인식시켜준다.

]# echo "/opt/mariadb/lib" > /etc/ld.so.conf.d/mariadb10.conf
]# ldconfig

이제 간단하게 데이터베이스를 초기화 해야 하는데, 그러기 위해서 my.cnf 파일을 다음과 같이 생성.

# vim /etc/my.cnf
[mariadbd]
server_id = 1
user = mariadb

character_set_server = utf8
collation_server = utf8_general_ci

default_time_zone='+9:00'

port = 3306

basedir = /opt/mariadb
# 이 디렉토리의 소유권과 그룹은 user 에서 지정한 사용자와 그룹이어야 한다.
datadir = /opt/dbstorage/maria
# 이 디렉토리는 Mysql 서버가 내부적 작업을 할때 임시로 사용하게 된다.
# 예를들어 대량의 select 처리를 위해서 임시 테이블을 만들거나 할 경우에 여기에 임시로 파일이 생성될 수 있다.
tmpdir  = /opt/dbstorage/tmp
socket  = /opt/mariadb/run/mariadb.sock
pid-file = /opt/mariadb/run/mariadb.pid
 
log_error = /opt/dbstorage/logs/mariadb_error.log
general_log_file = /opt/dbstorage/logs/general_query_all.log
 
slow_query_log_file = /opt/dbstorage/logs/slow_query.log
 
innodb_data_home_dir = /opt/dbstorage/InnoDB
innodb_log_group_home_dir = /opt/dbstorage/InnoDB/redoLogs
innodb_undo_directory = /opt/dbstorage/InnoDB/undoLogs

[client]
socket  = /opt/mariadb/run/mariadb.sock
]# chown root:mariadb /etc/my.cnf

이제 시스템 데이터베이스를 생성해준다.

]# cd /opt/mariadb
]# ./scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mariadb

galera_recovery 파일 수정

galera_recovery 라는 명령어가 있다. 이 파일을 쉘 스크립트 파일인데, mariadb.service 파일에도 이 명령어가 사용되고 있다. 그런데, 이 파일에는 사용지로 mysql 로 하드코딩되어 있어서 오류를 낸다. 바꿔준다.

- user=mysql
+ user=mariadb

systemd 등록

Mariadb 에서는 systemd 등록을 위한 서비스 유닛 파일을 제공한다. 이 파일은 설치 디렉토리에 support-files/systemd 에 mariadb.service 파일로 존재한다. 이 파일을 열어서 mariadb 실행 계정과 그룹을 다음과 같이 바꿔 준다.

]# vim /opt/mariadb/support-files/systemd/mariadb.service
- User=mysql
+ User=mariadb
- Group=mysql
+ Group=mariadb

systemd 를 사용할 경우에 Max file open 갯수를 mariadb.service 에서 바꿔줄 수 있다. 물론 /etc/security/limits.conf 파일을 수정해야하는 경우도 있다.

]# vim /etc/systemd/system/mariadb.service
# Number of files limit. previously [mysqld_safe] open-files-limit
LimitNOFILE=65535

이제 systemd 에 등록하고 활성화 해준다.

]# cp /opt/mariadb/support-files/systemd/mariadb.service /etc/systemd/system/
]# systemctl enable mariadb.service

Mariadb 시작/중지

이제 제대로 설치가 되었는지 Mariadb 를 시작/중지 해보자.

]# systemctl start mariadb.service
]# systemctl stop mariadb.service

아무런 에러가 없다면 정상적으로 작동하는 것이다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다