MySQL 이란?

오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)

다중 스레드, 다중 사용자 형식의 구조질의어 형식의 데이터베이스 관리 시스템

이중 라이선스 적용

  • GPL (General Public License) : GNU 일반 공중 사용 허가서
    • 자유 소프트웨어 재단에서 만든 자유 소프트웨어 라이선스
    • GPL 이외의 라이선스로 적용시키려는 경우 전통적인 지적재산권 라이선스 적용

썬 마이크로 시스템즈에 인수되었으나, 썬 마이크로 시스템즈가 오라클에 인수되며 같이 넘어갔다.

설치 환경

  • CentOS 6 / 7
  • cmake 3.9.6
  • MySQL 5.6.48 / 5.7.30

mysql 계정 생성

[root@localhost work]# useradd -s /sbin/nologin mysql

필수 라이브러리 설치

MySQL 5.6 설치 시

[root@localhost work]# yum -y install make zlib curl gcc cpp gcc-c++ libtermcap-devel ncurses-devel bzip2-devel 

MySQL 5.7 설치 시

[root@localhost work]# yum -y install make zlib curl gcc cpp gcc-c++ libtermcap-devel ncurses-devel bzip2-devel libtirpc-devel

cmake 설치

cmake 란?

Make의 대용품을 만들기 위한 오픈소스 프로젝트

스스로 기존의 make의 과정을 수행하지 않고 지정한 운영체제에 맞는 make 파일의 생성만을 수행하기 때문에 Meta Make라고도 불린다.

유닉스 계열 OS 중심이던 기존의 Make와는 달리 한번 작성해 두면 유닉스 계열은 물론, 마이크로소프트 윈도우 계열의 프로그래밍 도구도 지원한다

[root@localhost work]# wget https://cmake.org/files/v3.9/cmake-3.9.6.tar.gz
[root@localhost work]# tar zxvf cmake-3.9.6.tar.gz
[root@localhost work]# cd cmake-3.9.6
[root@localhost cmake-3.9.6]# ./bootstrap
[root@localhost cmake-3.9.6]# make
[root@localhost cmake-3.9.6]# make install

MySQL 다운로드

MySQL 5.6 다운로드

[root@localhost work]# wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.48.tar.gz

MySQL 5.7 다운로드

이전 버전과는 다르게 mysql을 빌드할 때 boost C++ 라이브러리가 필요하다. boost 1.59.0 버전을 따로 다운받아 소스 설치할 수 있지만 아래와 같이 MySQL 공식 홈페이지에서 boost 라이브러리가 포함된 MySQL 소스를 다운받아 설치하는게 더 편하다.


[root@localhost work]# wget https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.30.tar.gz

MySQL 설치

5.6과 5.7 설치 과정은 동일하다.

[root@localhost work]# tar zxvf mysql-5.6.48.tar.gz
[root@localhost work]# cd mysql-5.6.48

- 5.6.46 / 5.7.28 이후 버전부터 OS에 설치되어 있는 OpenSSL 라이브러리를 이용하여 SSL 기능을 구현한다. 여기서는 OpenSSL 컴파일 설치를 했을 때를 가정하여 -DWITH_SSL=/usr/local/openssl 옵션을 추가했다. 해당 옵션을 사용하지 않으면 OS에 기본 설치된 OpenSSL 라이브러리를 이용한다.

[root@localhost mysql-5.6.48]# vi setup.sh
[Character Set을 euckr로 설정하고 싶은 경우]
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=euckr -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_COLLATION=euckr_korean_ci -DWITH_EXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=/usr/local/openssl
	
[Character Set을 UTF-8로 설정하고 싶은 경우]
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=/usr/local/openssl

[root@localhost mysql-5.6.48]# chmod 711 setup.sh
[root@localhost mysql-5.6.48]# ./setup.sh
[root@localhost mysql-5.6.48]# make -j 4
[root@localhost mysql-5.6.48]# make install

초기 설정

MySQL 5.6

[root@localhost mysql-5.6.48]# cd /usr/local/mysql
	
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
[root@localhost mysql]# chown -R mysql:mysql data
[root@localhost mysql]# chgrp mysql *
[root@localhost mysql]# cd /home/work/mysql-5.6.48
[root@localhost mysql-5.6.48]# cp support-files/my-default.cnf /etc/my.cnf

MySQL 5.7

[root@localhost mysql-5.7.30]# cd /usr/local/mysql
[root@localhost mysql]# ./bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

2018-11-11T13:23:00.997980Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-11-11T13:23:01.805365Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-11-11T13:23:01.964491Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-11-11T13:23:02.060497Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: ea2eb987-e5b4-11e8-8f02-782bcb176ff6.
2018-11-11T13:23:02.072939Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-11-11T13:23:02.073899Z 1 [Note] A temporary password is generated for root@localhost: )oapd;Fhp7HA

마지막 줄에 출력된 임시 비밀번호를 따로 기록해둔다 (여기서는 )oapd;Fhp7HA) 이전 버전에서는 설치 후 콘솔로 바로 접속이 가능하나, 5.7에서는 설치 후 콘솔 접속 시 임시 비밀번호를 무조건 입력해야 한다.

[root@localhost mysql]# chown -R mysql:mysql data
[root@localhost mysql]# chgrp -R mysql *
[root@localhost mysql-5.7.30]# vi /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
socket=/tmp/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/usr/local/mysql/data/mysqld.log
pid-file=/usr/local/mysql/data/mysqld.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

이전 버전과는 달리 5.7에서는 my.cnf의 예제 파일을 제공하지 않는다.

여기서는 기본적으로 필요한 최소한의 내용만 입력하여 my.cnf 파일을 생성하겠다.

부팅 이후 자동 실행되게 설정

CentOS 6 이하 버전

[root@localhost mysql-5.6.48]# cd /etc/rc.d/rc3.d
[root@localhost rc3.d]# ln -s /usr/local/mysql/support-files/mysql.server S99mysql
[root@localhost rc3.d]# ./S99mysql start

CentOS 7

[root@localhost ~]# vi /usr/lib/systemd/system/mysqld.service

[Unit]
Description=Mysql Service
After=syslog.target
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop

[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl enable mysqld.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.

[root@localhost ~]# systemctl list-unit-files | grep mysql
mysqld.service                                enabled

[root@localhost ~]# systemctl restart mysqld.service