CentOS 7에서 MySQL 5.6.15 버전을 컴파일하여 설치하는 방법에 대해 알아보겠습니다.

( yum으로 MySQL을 설치하는 방법에 대해서는 여기를 참고해주세요 ! )




컴파일 설치

1. 유저 생성

Root는 모든 권한이 있기 때문에 Root 계정으로 MySQL을 실행하는 것은 보안상 위험합니다.

그래서 mysql 계정을 nologin으로 만들어서 MySQL 디렉터리의 소유권이 mysql이 되도록 관리하는 것이 좋습니다.

# groupadd mysql # useradd -M -g mysql mysql # cat /etc/passwd

mysql 그룹을 생성한 뒤, mysql 그룹에 속하며 홈 디렉터리가 없는 mysql 계정을 생성합니다.

그리고 /etc/passwd 파일을 출력하여 유저가 생성되었는지 확인합니다.





2. 의존성 설치

MySQL을 컴파일 하기 위해서는 여러 라이브러리를 설치해야 합니다.

# yum -y install ncurses-devel # yum -y install perl # yum -y install perl-Data-Dumper

# yum -y install cmake

# yum -y install wget

# yum -y install gcc-c++

ncurses-devel은 Curses 라이브러리를 말합니다.

콘솔 애플리케이션 만들 때 커서( cursor )를 다뤄야 하는데, Curses 라이브러리가 이를 해결해줍니다.

curses 라이브러리는 터미널 유형과 관계 없이 터미널 표시 장치를 조작할 수 있는 일련의 함수를 제공합니다.

( curses 라이브러리가 궁금하시다면 여기를 참고해주세요. )





3. Mysql 설치
mysql 사이트( 링크 )에서 mysql 5.6.15 버전 tar.gz 파일을 받습니다. ( 우클릭하여 주소를 복사 )
그리고 압축을 해제합니다.

# wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz

# tar xvfz mysql-5.6.15.tar.gz

# cd mysql-5.6.15


그리고 설치에 대한 환경 설정을 하기 전에 /usr/local/victolee 디렉터리를 생성합니다.

이 디렉터리는 여러 라이브러리를 모아 놓기 위한 디렉터리인데, 이렇게 관리를 할 수 있다는 것이 컴파일 설치의 큰 장점이죠.

이어서 cmake 명령어를 통해 설치 옵션을 부여합니다.

그리고 make를 하여 빌드를 하고, make install하여 설치를 진행합니다.

# mkdir /usr/local/victolee

# cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/victolee/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/victolee/mysql/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DMYSQL_DATADIR=/usr/local/victolee/mysql/data \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DMYSQL_USER=mysql \ -DMYSQL_TCP_PORT=3306 \ -DENABLE_DOWNLOADS=1


# make

# make install

각 옵션에 대한 내용은 MySQL 공식 홈페이지에서 확인해볼 수 있습니다 ( 링크 )


make install을 하고 나면 /usr/local/victolee 디렉터리에 mysql 디렉터리가 생성된 것을 확인할 수 있습니다.

cmake를 명령할 때 INSTALL_PREFIX로 /usr/local/victolee/mysql 경로를 작성했기 때문이죠.





4. 디렉터리 소유자 변경

이어서 mysql.sock 파일이 저장될 tmp 디렉터리를 생성하고,

mysql 디렉터리의 소유권이 mysql 계정이 되도록 소유권을 변경하겠습니다.

# mkdir /usr/local/victolee/mysql/tmp


# chown -R mysql:mysql /usr/local/victolee/mysql # chown mysql:root /usr/local/victolee/mysql/tmp

mysql 데몬을 뛰우기 전에 소켓 만드는 것을 root가 하기 때문에 tmp 디렉터리의 group 소유권은 root로 변경합니다.





5. 기본 데이터 베이스 생성

다음으로 기본 데이터 베이스를 생성하도록 하겠습니다.

# /usr/local/victolee/mysql/scripts/mysql_install_db \

--defaults-file=/usr/local/victolee/mysql/my.cnf \

--user=mysql \

--basedir=/usr/local/victolee/mysql/ \

--datadir=/usr/local/victolee/mysql/data \

--explicit_defaults_for_timestamp=on





6. MySQL 환경 설정

다음으로 /etc/my.cnf 파일의 내용을 지우고, 아래와 같이 수정해서 mysql 환경 설정을 하도록 하겠습니다.

# vi /etc/my.cnf


# Example MySQL config file for large systems. # # This is for a large system with memory = 512M where the system runs mainly # MySQL. # # MySQL programs look for option files in a set of # locations which depend on the deployment platform. # You can copy this option file to one of those # locations. For information about these locations, see: # http://dev.mysql.com/doc/mysql/en/option-files.html # # In this file, you can use all long options that a program supports. # If you want to know which options a program supports, run the program # with the "--help" option. # The following options will be passed to all MySQL clients [client] port = 3306 socket         = /usr/local/victolee/mysql/tmp/mysql.sock character-set = utf8 # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3306 socket         = /usr/local/victolee/mysql/tmp/mysql.sock key_buffer_size = 256M max_allowed_packet = 1M table_open_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M # Try number of CPU's*2 for thread_concurrency thread_concurrency = 8 character-set-server=utf8 collation-server=utf8_general_ci init_connect=SET collation_connection=utf8_general_ci init_connect=SET NAMES utf8 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash default-character-set = utf8 # Remove the next comment character if you are not familiar with SQL #safe-updates [myisamchk] key_buffer_size = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout





7. Mysql 데몬 실행

mysql을 실행하기 위해서는 mysqld_safe를 데몬으로 실행해야 합니다.

mysqld_safe는 mysql 데몬을 띄어주는 스크립트 파일 입니다.

# /usr/local/victolee/mysql/bin/mysqld_safe & # ps -ef | grep mysql


mysqld_safe가 실행되는지 확인합니다.





8. mysql 환경 변수 설정

이제 어느 디렉터리에서나 mysql을 실행 할 수 있도록 환경 변수를 설정하겠습니다.

그리고 이 설정이 반영 될 수 있도록 source 명령어를 수행합니다.

# vi /etc/profile

( 파일 맨 끝에 아래의 내용을 추가 )

#mysql export PATH=$PATH:/usr/local/victolee/mysql/bin


# source /etc/profile





9. mysql 실행

mysql을 실행하여 비밀번호를 설정합니다.

# mysql

비밀번호 설정




10. mysql.service 등록

이번에는 서버가 실행되면 mysql이 자동으로 실행되도록 서비스를 등록하겠습니다. ( 서비스에 대해서는 여기를 참고해주세요 )

서비스를 등록하지 않으면 매 번 /usr/local/victolee/mysql/bin/mysqld_safe & 명령으로 mysql을 실행해야 합니다.

서비스를 등록하기 전에 실행되고 잇는 mysql 프로세스를 종료 하고 진행합니다.

# ps -ef | grep mysql

# kill -9 mysql프로세스번호


# vi /usr/lib/systemd/system/mysql.service

[Unit] Description=MySQL Community Server After=network.target After=syslog.target [Install] WantedBy=multi-user.target Alias=mysql.service [Service] User=mysql Group=mysql # Execute pre and post scripts as root PermissionsStartOnly=true # Needed to create system tables etc. #ExecStartPre= # Start main service ExecStart=/usr/local/victolee/mysql/bin/mysqld_safe # Don't signal startup success before a ping works #ExecStartPost= # Give up if ping don't get an answer TimeoutSec=300 Restart=always PrivateTmp=false




11. 서비스 관리

마지막으로 서비스를 활성화 시킵니다.

서비스가 등록이 되었는지 확인하기 위해 재부팅을 한 후, 프로세스를 확인하는 것으로 테스트를 마칩니다.

# systemctl enable mysql.service

# systemctl start mysql.service

# ps -ef | grep mysql


# reboot

# ps -ef | grep mysql




이상으로 CentOS 7에서 MySQL 5.6.15 버전을 설치해보았습니다.