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 |
---|