본문 바로가기

MySQL/MySQL Setup

MySQL Source 설치 - Compile 및 설치

OS 세팅에 이어서 본격적인 컴파일 및 설치에 들어가도록 하겠습니다.

MySQL 홈페이지에서 source 파일로 받았을 경우 tar.gz으로 떨어지는 파일로 되어 있습니다.

안에보면 c소스로 되어 있구요 ㅎ 소스들은 빌딩과정을 통해 파일로 만들어지는데 이것을 컴파일이라고 하죠 ㅎ

compile을 시키는 도구로서는 앞 글에서 말한 것처럼 cmake를 쓰도록 하겠습니다.

 

참고로 MySQL 컴파일의 경우 cmake를 지원하도록 하게 된 것은 5.5버전 이후 입니다.

cmake를 yum으로 설치할 수 있지만 이 또한 source 설치로 하겠습니다.

 

컴파일을 각기 다른버전으로 해보고 MySQL도 5.6대, MariaDB 5.5, 10.0 등 버전을 설치하는데 있어서 cmake의 버전 호환이 안되는 경우가 종종있습니다. 스스로 찾아보고 해야된다는 불편함이.. 그래도 cmake 2.8.3이 저는 제일 잘 맞고 잘 되더라구요.. 설치 다하고 MySQL 컴파일 시 에러가 발생하면... 헉 스럽습니다..ㅎ

 

cmake도 tar.gz으로 압축되어 있기때문에 tar의 조건을 준 후 압축을 풀어줍니다.

 

[root@MyDB root]# tar xzvf cmake-2.8.3.tar.gz

 

압축을 모두 풀어 준 후 디렉토리로 이동해서 보면 configure 파일이 있습니다.

실행을 시켜주면 현재 상태에 맞게끔 구성을 해줍니다. 설치 경로 등등이 default value로 잡히게 됩니다.

 

[root@MyDB root]# cd cmake-2.8.3

[root@MyDB cmake-2.8.3]# ./configure

CMake 2.8.3, Copyright 2000-2009 Kitware, Inc.

Found GNU toolchain

C compiler on this system is: gcc

C++ compiler on this system is: g++

……………………………………………………………………..

CMake has bootstrapped.  Now run gmake.

 

여기서 make를 해주시면 지금 default value로 잡힌 것들을 compile 하게 됩니다.

 

[root@MyDB cmake-2.8.3]# make

Scanning dependencies of target cmsys

[  0%]# Building C object Source/kwsys/CMakeFiles/cmsys.dir/ProcessUNIX.o

[  1%]# Building C object Source/kwsys/CMakeFiles/cmsys.dir/Base64.o

……………………………………………………………………..

[100%]# Building CXX object Tests/CMakeLib/CMakeFiles/CMakeLibTests.dir/testXMLSafe.o

Linking CXX executable CMakeLibTests

[100%]# Built target CmakeLibTests

 

컴파일이 100% 다 된 후엔 make install로 현재 컴파일 된 것들을 설치하게되죠 ㅎ 

 

[root@MyDB cmake-2.8.3]# make install

[  4%]# Built target cmsys

[  4%]# Built target cmsysTestDynload

……………………………………………………………………..

-- Up-to-date: /usr/local/doc/cmake-2.8/ccmake.txt

-- Up-to-date: /usr/local/doc/cmake-2.8/ccmake.docbook

[root@MyDB cmake-2.8.3]#

 

이렇게하면 cmake 설치가 끝나게 됩니다 ㅎ

 

추가적으로 m4와 bison을 설치 후 mysql을 설치하도록 하겠습니다.

bison은 파서 생성기입니다. LALR방식으로 작성된 문법을 처리하고 해석하여 c코드로 만들어 줍니다.

m4는 매크로 처리 언어로, 기존의 텍스트 템플릿을 다시 사용하기 위해 사용됩니다.

이 두 프로그램 또한 compile과 make를 통해 설치를 해줍니다.

 

[root@MyDB root]# tar xjvf m4-1.4.15.tar.bz2

[root@MyDB root]# cd m4-1.4.15

[root@MyDB m4-1.4.15]# ./configure

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

……………………………………………………………………..

config.status: executing stamp-h commands

[root@MyDB m4-1.4.15]# make

make  all-recursive

make[1]#: Entering directory `/root/all_use_for_mysql-5.5.13/m4-1.4.15'

Making all in .

……………………………………………………………………..

make[1]#: Leaving directory `/root/all_use_for_mysql-5.5.13/m4-1.4.15'

[root@MyDB m4-1.4.15]# make install

make  install-recursive

make[1]#: Entering directory `/root/all_use_for_mysql-5.5.13/m4-1.4.15'

Making install in .

……………………………………………………………………..

make[1]#: Leaving directory `/root/all_use_for_mysql-5.5.13/m4-1.4.15'

[root@MyDB m4-1.4.15]# cd ..

[root@MyDB root]# tar xjvf bison-2.4.3.tar.bz2

[root@MyDB root]# cd bison-2.4.3

[root@MyDB bison-2.4.3]# ./configure

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

……………………………………………………………………..

config.status: executing tests/atconfig commands

[root@MyDB bison-2.4.3]# make

make  all-recursive

make[1]#: Entering directory `/root/all_use_for_mysql-5.5.13/bison-2.4.3'

……………………………………………………………………..

make[1]#: Leaving directory `/root/all_use_for_mysql-5.5.13/bison-2.4.3'

[root@MyDB bison-2.4.3]# make install

make  install-recursive

make[1]#: Entering directory `/root/all_use_for_mysql-5.5.13/bison-2.4.3'

……………………………………………………………………..

make[1]#: Leaving directory `/root/all_use_for_mysql-5.5.13/bison-2.4.3'

 

--

 

 

여기까지가 MySQL 설치를 위한 기본 설정입니다. 이제 MySQL을 설치해보죠 ㅎㅎ

아까 말한 것처럼 tar.gz으로 되어 있기때문에 압축을 푼 후에 cmake를 이용해서 경로 등을 설정 하겠습니다.

DCMAKE_INSTALL_PREFIX는 mysql을 기본적으로 설치할 경로.

DWITH_INNOBASE_STORAGE_ENGINE은 기본적인 STORAGE ENGINE을 INNODB로 쓴다는 것입니다.

Oracle과 다르게 MySQL은 역할에 따른 엔진과 있고 특성이 있습니다. 나중에 글로 작성하도록 하겠습니다.

DMYSQL_DATADIR은 mysql data file에 대한 경로를 나타냅니다.

DDEFAULT_CHARSET과 DDEFAULT_COLLATION은 언어셋을 나타내는데 euckr로 설정하도록 하겠습니다.

euckr은 지원하지 않는 언어가 있긴하지만.. 뷁같은것은 ?로 나타나게 됩니다. 이럴경우 utf8을 일반적으로 씁니다.

DWITH_EXTRA_CHARSETS은 그외의 언어가 포함되겠느냐라고 물어보는 것인데 기본이 ALL입니다.

저는 COMPLEX로 하고, NONE이라는 값도 존재하고 있습니다.

DWITH_READLINE은 READLINE이라는 라이브러리를 번들로 설치 할 것인지 여부인데 이것은 5.6.5부터 사라지게 됩니다.

이 후 버전부터는 readline이 지원이 되지 않는다네요..ㅎ

DENABLED_LOCAL_INFILE은 MySQL 문법중에 load data infile이라는 것이 있습니다. txt파일 등을 mysql data로 가져오는 문법이라 편리하긴 하지만 보안상의 문제도 동시에 발생하게 됩니다. 테스트용도라면 모를까 서비스하는 서버에서는 위험하다고 볼 수 있습니다. 권한관리가 잘 된다면 모를까 권한관리가 제대로 안된다면 엄청 무서운 기능이니까요.

 

우선 제가 간단히 각 옵션에 대해 설명을 했습니다.

자세한 것은 역시 공식 홈페이지의 document 겠죠?ㅎ

5.5 ver

http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html

5.6 ver

http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html

 

[root@MyDB root]# tar xzvf mysql-5.5.30.tar.gz

[root@MyDB root]# cd mysql-5.5.30

[root@MyDB mysql-5.5.30]# cmake . \

 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

 -DWITH_INNOBASE_STORAGE_ENGINE=1 \

 -DMYSQL_DATADIR=/usr/local/mysql/data \

 -DDEFAULT_CHARSET=euckr \

 -DDEFAULT_COLLATION=euckr_korean_ci \

 -DWITH_EXTRA_CHARSETS=complex \

 -DWITH_READLINE=1 \

 -DENABLED_LOCAL_INFILE=1

-- The C compiler identification is GNU

-- The CXX compiler identification is GNU

……………………………………………………………………..

-- Build files have been written to: /root/all_use_for_mysql-5.5.30/mysql-5.5.30

 

빌딩이 모두 끝났습니다. 이제 컴파일을 하고 설치를 해야겠죠?ㅎ

 

[root@MyDB mysql-5.5.30]# make

Scanning dependencies of target abi_check

[  0%] Built target abi_check

……………………………………………………………………..

[100%] Built target my_safe_process

 

[root@MyDB mysql-5.5.30]# make install

[  0%] Built target abi_check

[  5%] Built target readline

……………………………………………………………………..

-- Installing: /usr/local/mysql/man/man8/mysqld.8

 

[root@MyDB mysql-5.5.30]# 

 

여기까지가 설치입니다.

 

또다시 설정 및 실행을 거쳐야합니다. 아직 mysql계정과 그룹이 지정되지 않았으니까요 ㅎ

 

앞으로 설명 드리는 부분은 default engine이 innodb이기때문에 innodb 기준으로 설명드리도록 하겠습니다.

innodb의 경우 기본적인 config 파일인 my.cnf에 log 경로와 datafile의 경로를 적게 되어 있습니다.

그래서 그에 따른 경로를 만들어주어야합니다.

[root@MyDB mysql-5.5.30]# mkdir -p /usr/local/mysql/data/ibdata

[root@MyDB mysql-5.5.30]# mkdir -p /usr/local/mysql/data/iblogs

 

그리고 mysql을 띄울 계정을 만들어줍니다. 그룹도 만찬가지구요 ㅎ 그리고 권한부여를 합니다.

data 디렉터리경우 mysql 계정으로 되어 있지 않다면 mysql이 실행되지 않습니다.

 

[root@MyDB mysql-5.5.30]# useradd mysql

[root@MyDB mysql-5.5.30]# chown -R root /usr/local/mysql

[root@MyDB mysql-5.5.30]# chown -R mysql /usr/local/mysql/data

[root@MyDB mysql-5.5.30]# chgrp -R mysql /usr/local/mysql

 

그리고 config 파일을 수정합니다.

기본적인 config양식은 support-files에 서버의 크기별로 들어있습니다. small, medium, huge 등으로요.

먼저 기본으로 되어 있는 파일은 /etc/에 옮기고 수정하도록 합니다.

 

[root@MyDB mysql-5.5.30]# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

[root@MyDB mysql-5.5.30]# vi /etc/my.cnf

 

[client]

#password        = your_password

port                = 3306

socket             = /tmp/mysql.sock

default-character-set = euckr

 

[mysqld]

port                = 3306

socket             = /tmp/mysql.sock

 

skip-name-resolve

skip-external-locking

key_buffer_size = 124M

myisam_sort_buffer_size = 32M

thread_concurrency = 2

character-set-server = euckr

long_query_time = 3

slow-query-log-file = /usr/local/mysql/data/mysqld.slow.log

max_connections=2000

table_open_cache = 1448    # max_connections * (쿼리 1개의 총 join 테이블 수)

sort_buffer_size = 8M

read_buffer_size = 8M

read_rnd_buffer_size=8M

back_log=8000

thread_cache_size= 200

query_cache_size= 64M

interactive-timeout = 300

wait_timeout = 300

max_allowed_packet = 64M     

 

slave-skip-errors      = all

 

innodb_data_file_path = /usr/local/mysql/data/ibdata/ibdata1:10G:autoextend

innodb_log_group_home_dir = /usr/local/mysql/data/iblogs

# You can set .._buffer_pool_size up to 50 - 80 %

# of RAM but beware of setting memory usage too high

innodb_buffer_pool_size = 1G

innodb_additional_mem_pool_size = 100M

# Set .._log_file_size to 25 % of buffer pool size

innodb_log_file_size = 256M

innodb_log_buffer_size = 64M

innodb_flush_log_at_trx_commit = 1

innodb_lock_wait_timeout = 20

 

현재 저의 설정입니다. 물론 이 설정값은 제 값이므로 다른분들에게 맞지 않을 겁니다.

각각에 맞게끔만?ㅎ 현재는 튜닝에 대해 설명해 드릴게 아니라 설치이기 때문에 올릴경우 어떤 값이 주요하게 작용하는지만 짚도록 하겠습니다. 이 모든 파라미터 들에 대해서는 다른 글에서 설명드리도록 하겠습니다.

 

thread_concurrency는 코어 개수*2로 설정을 해주시면 됩니다. 쓰레드 관리입니다.

character-set-server는 서버의 기본적인 character set인데 앞에 compile할 때 euckr로 해주었기때문에 여기서도 euckr로 설정을 해주도록 합니다.

long_query_time는 얼마정도의 시간을 slow 쿼리(오래걸리는 쿼리)로 인식 한건지에 대한 초 단위입니다.

slow-query-log-file는 그 slow query 파일을 어디에 저장할 것인지를 지정하는 것입니다.

innodb_data_file_path는 innodb engine의 데이터를 어디에 저장 할 것인지에 대한 값입니다.

innodb_log_group_home_dir는 log파일들을 어디에 저장 할 것인지에 대한 값입니다.

innodb_buffer_pool_size는 innodb의 메모리 값을 얼마로 설정 할 것인지인데 현재 메모리의 50%를 default로 잡습니다.

innodb_log_file_size는 innodb logfile의 크기를 얼마로 할 것인지인데 보통 buffer pool size의 25%로 잡습니다.

 

여기까지가 config 설정입니다. 설정을 했으니 실행을 해야겠죠?ㅎ

mysql 설치 경로로 이동을 합니다.

[root@MyDB mysql-5.5.30]# cd /usr/local/mysql/

 

그리고 기본적인 mysql install 스크립트를 돌리는데 5.5버전에서는 mysql db설치만을 하는데 5.6에서는 innodb datafile 설치와 logsfile설치도 이 과정에서 이루어집니다.

[root@MyDB mysql]# ./scripts/mysql_install_db --user=mysql

완료가 되면 OK가 두개가 떨어지고 아니라면 ERROR가 떨어지게 됩니다.

 

MySQL을 실행시키는 방법은 service로 실행시키는 것과 해당 bin 디렉터리에 있는 것을 실행시키는 방법이 있는데

개인적으론 nohup으로 실행시키는 것을 선호합니다.

[root@MyDB mysql]# cd /usr/local/mysql/bin

[root@MyDB bin]# nohup ./mysqld_safe -u mysql &

 

위에서 말씀드린 것처럼 innodb datafile과 logfile이 5.5버전에서는 이 과정에서 생성이 되는데 다음으로 넘어가지 않고 뭔가 계속 돌고 있습니다. 해당 data 경로인.(현재 /usr/local/mysql/data)에 보시면 err 파일이 있을 겁니다. 해당 Host명.err 파일을 tail -f 로 걸어서보시면 에러가 난 것인지 진행중인지 알 수 있습니다.

모두 완료가 되면 root 패스워드를 설정해 주어야 합니다.

[root@MyDB bin]# ./mysqladmin -u root password ********* 

패스워드를 설정하는데 나중에 패스워드 초기화 할 수 있는 방법을 적겠습니다..ㅎ

 

이제 들어가봅시다

[root@MyDB bin]# ./mysql --user=root –p

Enter password:

Mysql> grant all privileges on *.* to root@"%" identified by '*********';

Mysql> flush privileges; #시스템에 적용

Mysql> exit

 

여기까지가 MySQL 설치법입니다 ㅎㅎ

 

이 글에서 말했던 것중에 추후에 적어야 할 것들이 꽤 보이네요..ㅎ

config value들과 password 초기화, grant옵션 등등 ㅎ 또 글을 적도록 하겠습니다.


'MySQL > MySQL Setup' 카테고리의 다른 글

MySQL Source 설치 - OS 세팅  (0) 2015.10.10