Ubuntu 16.04 Server 위에 MariaDB 설치/사용하기

악의 조직 Oracle 에서 Sun 을 인수한 후 이어진 반 open source 적 행보에 MySQL 개발자는 MySQL 을 fork 해서 MariaDB 를 개발하고 있습니다. 저작권을 악용해 중요한 기능은 천천히 릴리즈 하거나 유료 라이센스로만 공개하기도 하는 Oracle 의 MySQL 과 달리 MariaDB 는 예전 MySQL 처럼 공개적으로 개발되고 있어 새롭고 진보적인 기능도 많이 있는 편인 것 같습니다.

이 글에서는 Ubuntu 16.04 서버에 MariaDB 를 소스코드부터 가져와서 설치하고 사용하는 간단한 사용법을 정리해 봅니다.

Environment

이 글에서는 Ubuntu 16.04.2 server 버전을 사용합니다.

Build and Install

MariaDB 는 대부분의 리눅스 배포본을 위한 패키징이 잘 되어 있어서 각 배포본의 패키징 시스템을 사용하면 한두줄의 커맨드로 쉽게 설치할 수 있습니다. 하지만 여기선 문서[1] 를 참고해 가며 소스 코드부터 가져와서 바닥부터 가장 최신 버전을 설치해 보기로 합시다.

소스코드는 github 에 git repository 의 형태로 공개되어 있습니다. 아래의 명령어로 코드를 mariadb/ 디렉토리 아래에 가져올 수 있습니다.

$ git clone https://github.com/MariaDB/server.git mariadb
$ cd mariadb

git repository 인만큼 버전은 git 을 통해 tag 로 관리되고 있습니다. 이 글을 작성 중인 시점에서 가장 최신 stable 릴리즈는 10.2.8[2] 로, 2017년 8월 18일 자로 릴리즈 되었습니다. 다음 커맨드로 해당 버전의 코드를 checkout 할 수 있습니다:

$ git checkout mariadb-10.2.8

이제 소스코드는 준비되었고, 빌드할 차례입니다. cmake 를 사용해 어떻게 빌드할지 등을 설정할 수 있는데, 여기선 release 할때 사용하는 설정을 사용해 보겠습니다. cmake 가 실패하는 경우는 대부분 필요 패키지가 설치되지 않은 경우입니다. libaio-dev, libjemalloc-dev, libgnutls-dev 등의 패키지가 설치되어 있어야 합니다.

해당 패키지 설치 후에도 같은 에러 메세지가 나올 수 있는데, cmake 의 기존 결과가 캐싱되어 재사용되기 때문입니다. CMakeCache.txtCMakeFiles/ 디렉토리를 제거해주면 캐싱된 내용은 사라집니다.

이어서 간단히 make 를 사용해 빌드하고 설치를 할 수 있습니다. 설치는 super user 권한이 필요하기 때문에 sudo 를 사용해야 합니다.

$ cmake . -DBUILD_CONFIG=mysql_release
$ make
$ sudo make install

어떤 사양의 머신에서 빌드하느냐에 따라 다르겠지만 빌드하는데 꽤 긴 시간이 걸립니다. 이 글을 작성하며 사용한 72 코어 / 144 쓰레드 머신에서는 -j144 옵션을 줘서 빌드할 경우 1분 5초 걸렸습니다. 별다른 에러 메세지가 없다면 빌드에 성공한 것입니다.

Initialize MariaDB Server

이제 MariaDB 의 기본 설치는 마무리 되었지만, 아직 MariaDB 구동을 위한 준비가 모두 끝나진 않았습니다. MariaDB 가 제대로 동작하기 위해서는 test database, default user 등등의 최소 데이터를 생성하는 초기화 작업을 진행해야 합니다. 앞의 설치는 MariaDB 실행파일을 만들어 시스템에 설치한 것이고, 이 초기화 작업은 MariaDB 서비스의 설치라고 생각하면 이해가 조금 편할 수도 있겠습니다.

super user 권한의 남용은 보안적으로 위험할 수 있으므로, MariaDB 는 기본적으로 별개의 사용자 계정을 사용할 것을 권장합니다. 다음 예에서는 mysql 이라는 이름의 user 를 생성하고 이 사용자 계정을 사용하도록 해서 초기화를 진행합니다.

$ sudo adduser mysql
$ sudo chown -R mysql /usr/local/mysql/
$ cd /usr/local/mysql/
$ sudo -u mysql ./scripts/mysql_install_db --user=mysql

순조롭게 진행되었다면 다음과 같은 메세지를 볼 수 있을 겁니다:

Installing MariaDB/MySQL system tables in './data' ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'./bin/mysqladmin' -u root password 'new-password'
'./bin/mysqladmin' -u root -h hydra password 'new-password'

Alternatively you can run:
'./bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '.' ; ./bin/mysqld_safe --datadir='./data'

You can test the MariaDB daemon with mysql-test-run.pl
cd './mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

Starting MariaDB

이제 준비가 끝났습니다. 앞의 초기화 과정 이후 나온 메세지에서도 알 수 있듯이, 다음 커맨드로 MariaDB 서버를 시작할 수 있습니다:

$ sudo -u mysql /usr/local/mysql/bin/mysqld_safe --datadir='./data'

Connect to Local MariaDB Server

MariaDB 는 여러가지 방법으로 접근해 사용할 수 있는데, 관리 목적 등으로는 local shell 을 사용하는게 가장 간단합니다. 다음 커맨드로 local shell 을 열 수 있습니다. 이 커맨드는 같은 기계 위에 띄워져 있는 MariaDB 서버 프로세스에 접속해 해당 서버에 sql 쿼리를 날릴 수 있는 프롬프트를 띄워 줍니다.

$ /usr/local/mysql/bin/mysql

위 커맨드에 –version 인자를 주면 현재 mariadb 의 버전도 볼 수 있습니다:

$ /usr/local/mysql/bin/mysql --version
/usr/local/mysql/bin/mysql  Ver 15.1 Distrib 10.2.8-MariaDB, for Linux (x86_64) using readline 5.1
s

Kill MariaDB Server

서버를 끝낼 수도 있어야겠죠. 다음의 커맨드로 mysql 서버 프로세스에게 SIGTERM 시그널을 날려서 서버 프로세스를 종료시킬 수 있습니다.

$ sudo -u mysql kill -SIGTERM `pidof mysqld`

Basical Usage

프롬프트에서 다음과 같이 기본적인 sql 쿼리를 날릴 수 있습니다.

$ sudo /usr/local/mysql/bin/mysql
> create database sj_db;
> create table sjtable ( id INT PRIMARY KEY, name VARCHAR(20) );
> insert into sjtable values ( 1, 'Will' );
> select * from sjtable;

그 외의 MariaDB sql 문법을 위해서는 MariaDB basic sql statement 문서[3] 를 참고합시다.

my.cnf configuration

mysql 과 마찬가지로 MariaDB 역시 my.cnf 파일을 사용해[1] 대부분의 설정을 구성합니다. 기본적으로 /etc/my.cnf, /etc/mysql/my.cnf … 순으로 설정 파일을 찾게 되며, mysqld_safe 실행파일 실행 시에 –defaults-file 인자로 파일 경로를 줄수도 있습니다. 소스 코드 디렉토리의 support-files/ 디렉토리 아래에 my-huge.cnf, my-large.cnf, my-medium.cnf 등의 예제 설정도 있습니다.

앞의 과정을 따라서 설치하면 /etc/ 아래에 my.cnf 파일이 없을 겁니다. 이 때의 기본 설정은 어떻게 되는지는 다음 커맨드를 통해 알 수 있습니다.

$ /usr/local/mysql/bin/mysql -NBe 'SHOW VARIABLES'

askapache.com 에서는[5] 이를 이용해 기본 my.cnf 를 추출하는 커맨드도 소개하고 있으니 필요하면 참고하시기 바랍니다.

Data Directory Specification

실험용으로 MariaDB 를 사용하는 경우라면 MariaDB 데이터를 최초 상태로 백업해 두거나 서로 다른 설정의 데이터를 유지해야 할 수도 있습니다.

MariaDB 의 default data directory 는 /usr/local/mysql/data/ 로, 프롬프트에서

> select @@datadir;

명령으로 현재 띄워진 MariaDB 서버 프로세스가 사용중인 data directory 의 경로를 볼 수 있습니다. 이 경로는 my.cnf 상에서 수정할 수도 있고, mysqld_safe 실행 시 –datadir 옵션으로 지정할 수도 있습니다. 주의할 점은, 이때 –datadir 인자로 주는 데이터 디렉토리는 한번은 scripts/mysql_install_db 를 실행해준 디렉토리여야 한다는 것입니다. mysql_install_db 명령에도 –datadir 인자를 줄수 있습니다.

Conclusion

MariaDB 최신 버전의 소스코드를 가져와 빌드하고 설치해서 사용하는 방법을 알아봤습니다. 하나의 예제로 정리해 보자면 다음과 같습니다.

$ git clone https://github.com/MariaDB/server.git mariadb
$ cd mariadb
$ git checkout mariadb-10.2.8
$ cmake . -DBUILD_CONFIG=mysql_release
$ make
$ sudo make install
$ sudo adduser mysql
$ sudo chown -R mysql /usr/local/mysql/
$ cd /usr/local/mysql/
$ sudo -u mysql ./scripts/mysql_install_db --datadirr='./data' &
$ /usr/local/mysql/bin/mysql

References

[1] https://mariadb.com/kb/en/mariadb/generic-build-instructions/
[2] https://downloads.mariadb.org/mariadb/+releases/
[3] https://mariadb.com/kb/en/mariadb/basic-sql-statements/
[4] https://mariadb.com/kb/en/mariadb/configuring-mariadb-with-mycnf/
[5] https://www.askapache.com/mysql/view-mysql-variables-my-cnf/

Avatar
SeongJae Park
Kernel Development Engineer

SeongJae Park is a programmer who loves to analyze and develop systems.