MySQL 5.7 설치 (Source Compile&binary) on CentOS 7

Share

Last Updated on 1월 20, 2024 by Jade(정현호)

안녕하세요

이번에는 MySQL 5.7 버전에 대해서 Source Compile 설치와 Linux Generic(Binary 파일) 파일을 통한 설치에 대해서 확인해보도록 하겠습니다.

[참고1] Source Compile 로 APM 스택 구성 글로 연관된 이전 글 아래와 같습니다
Apache -> MySQL -> PHP 순으로 진행됩니다.


[참고2
Source Compile 과 Binary 설치 방식 모두 기재되어 있고 설치 버전과 환경은 아래와 같습니다.


OS : CentOS 7.8  / MySQL : 5.7.31 


[참고3] YUM(rpm) 으로 MySQL 설치는 아래 APM 연동 글을 참조하시면 됩니다.



[참고4] 우분투 환경에서 MySQL 설치는 아래 포스팅을 확인해주세요



[참고5] CentOS8 에 MySQL8 버전 설치는 아래 포스팅을 확인해주세요

           

선행 작업 수행

# 유저 그룹 생성
[root]# groupadd mysql
[root]# useradd -M -s /sbin/nologin -g mysql mysql

-M 옵션을 사용해서 홈디렉토리를 생성하지 않고,
-s /bin/false 혹은 /sbin/nologin 옵션을 사용해서 유저의 로그인쉘을 사용할 수 없게 하는 것입니다.

즉 mysql이라는 유저는 mysql 데몬을 실행하기 위한 유저이고
서버의 보안강화 측면에서 외부에서 mysql 유저로 쉘로그인은 필요가 없습니다.


# 추가 필요 패키지 설치
[root]# yum -y install ncurses ncurses-devel \
ncurses-libs ncurses-static openssl \
openssl-devel bison readline \
gcc gcc-c++ make cmake glibc \
automake numactl numactl-devel \
libaio libaio-devel ca-certificates


[참고] yum 이나 wget 시 certificate 관련 에러 발생시
아래와 같이(유사하게) 에러 발생시 CentOS7 설치시 포함된 인증서가 만료되었기 때문에 입니다.

RROR: cannot verify [URL주소]'s certificate,
 issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
  Issued certificate has expired.
To connect to [URL주소] insecurely, 
use `--no-check-certificate'


아래와 같이 인증서를 설치해주면 됩니다

sudo yum install -y ca-certificates

포스팅에서는 추가 필요 패키지 설치 항목에서 ca-certificates 패키지가 포함되어 있습니다.


# ulimit 설정
/etc/security/limits.conf 파일에 아래와 같이 입력합니다.

[root]# vi /etc/security/limits.conf


mysql    soft   memlock  unlimited
mysql    hard   memlock  unlimited
mysql    hard   nofile   65536
mysql    soft   nofile   65536
mysql    soft   nproc    16384
mysql    hard   nproc    16384


# Swappiness 조정
sysctl.conf 파일에서 아래 내용을 추가합니다.

[root]# vi /etc/sysctl.conf


vm.swappiness=1


커널 파라미터 적용합니다.

[root]# sysctl -p

                  

Source Compile 설치

* 해당과정은 Source Compile 설치 과정입니다.
Binary 파일(uncompress) 설치 방식은 아래쪽에 기술되어 있습니다


## cmake boost 다운로드

cmake boost 는 compile 해서 사용하는 것이 아니라서 바로 /usr/local/src 에 압축을 풀면 됩니다.

[root]# cd /usr/local/src/
[root]# wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
[root]# tar zxvf boost_1_59_0.tar.gz



## MySQL 5.7 다운로드 및 설치

[root]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31.tar.gz
[root]# tar zxvf mysql-5.7.31.tar.gz
[root]# cd mysql-5.7.31



DCMAKE_INSTALL_PREFIX 를 통해 설치 위치를 지정하면 됩니다.
예시)  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

[root]# cmake \
'-DCMAKE_INSTALL_PREFIX=/usr/local/mysql' \
'-DINSTALL_SBINDIR=/usr/local/mysql/bin' \
'-DINSTALL_BINDIR=/usr/local/mysql/bin' \
'-DMYSQL_DATADIR=/usr/local/mysql/data' \
'-DINSTALL_SCRIPTDIR=/usr/local/mysql/bin' \
'-DWITH_INNOBASE_STORAGE_ENGINE=1' \
'-DWITH_PARTITION_STORAGE_ENGINE=1' \
'-DSYSCONFDIR=/usr/local/mysql/etc' \
'-DDEFAULT_CHARSET=utf8mb4' \
'-DDEFAULT_COLLATION=utf8mb4_general_ci' \
'-DWITH_EXTRA_CHARSETS=all' \
'-DWITH_SSL=bundled' \
'-DWITH_SSL_PATH=/usr/include/openssl' \
'-DENABLED_LOCAL_INFILE=1' \
'-DMYSQL_TCP_PORT=3306' \
'-DMYSQL_UNIX_ADDR=/tmp/mysql.sock' \
'-DCURSES_LIBRARY=/usr/lib64/libncurses.so' \
'-DCURSES_INCLUDE_PATH=/usr/include' \
'-DDOWNLOAD_BOOST=1' \
'-DWITH_BOOST=/usr/local/src/boost_1_59_0' \
'-DWITH_ARCHIVE_STORAGE_ENGINE=1' \
'-DWITH_BLACKHOLE_STORAGE_ENGINE=1' \
'-DWITH_PERFSCHEMA_STORAGE_ENGINE=1' \
'-DWITH_FEDERATED_STORAGE_ENGINE=1'



configure 가 정상적으로 수행되었다면 아래와 같이 build 를 진행합니다.

[root]# make&&make install



# 참고 - cmake clean 하는 방법

해당 디렉터리의 캐시파일 삭제
rm -rf CMakeCache.txt
rm -rf CMakeFile



## MySQL 라이브러리 등록

[root]# echo /usr/local/mysql/lib >> /etc/ld.so.conf

[root]# ldconfig



* Apache+PHP 서버에서는 Client Library 를 위해서라면 여기 까지만 설치하면 됩니다

* Source Compile 부분은 여기까지이며 다음 단계 부터는 바이너리 설치 방식과 공통 내용입니다.
             

Binary 방식 설치

Linux Generic 파일(Binary,Tarball) 을 통해 설치를 진행하도록 하겠습니다.

# 파일 다운로드 및 압축해제

[root]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31-el7-x86_64.tar.gz

[root]# tar zxvf mysql-5.7.31-el7-x86_64.tar.gz -C /usr/local

[root]# chown -R mysql:mysql /usr/local/mysql-5.7.31-el7-x86_64



# 심볼릭 링크 설정

[root]# ln -s /usr/local/mysql-5.7.31-el7-x86_64 /usr/local/mysql



# MySQL 라이브러리 등록

[root]# echo /usr/local/mysql/lib >> /etc/ld.so.conf

[root]# ldconfig



* Apache+PHP 서버에서는 Client Library 를 위해서라면 여기 까지만 설치하면 됩니다
* 다음 단계 부터는 바이너리 설치 방식과 Source Compile 방식과 공통 내용입니다.
            

파라미터 설정(my.cnf)

[참고] 5.7.18 부터는 my-default.ini 를 제공하지 않습니다.

The my-default.cnf.sh file (used to produce a default my-default.cnf or my-default.ini file) is no longer included
in source distributions and my-default.cnf and my-default.ini are no longer included in or
installed by distribution packages. (Bug #22525354)

https://docs.oracle.com/cd/E17952_01/mysql-5.7-relnotes-en/news-5-7-18.html
https://mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-18.html#mysqld-5-7-18-packaging


my.cnf 파일 수정

[root]# vi /etc/my.cnf

[client]
port = 3306
socket = /tmp/mysql.sock

[mysql]
no-auto-rehash
show-warnings
prompt=\u@\h:\d_\R:\m:\\s>
pager="less -n -i -F -X -E"

[mysqld]
server-id=1
port = 3306
bind-address = 0.0.0.0
basedir = /usr/local/mysql
datadir= /usr/local/mysql/data
tmpdir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
skip_name_resolve
#timestamp
explicit_defaults_for_timestamp = TRUE

### MyISAM Spectific options
key_buffer_size = 100M

### INNODB Spectific options
default-storage-engine = InnoDB
innodb_buffer_pool_size = 384M

#User Table Datafile
innodb_data_home_dir = /usr/local/mysql/data/
innodb_data_file_path = ib_system:100M:autoextend
innodb_file_per_table=ON
innodb_log_buffer_size = 8M
innodb_log_files_in_group = 3
innodb_log_file_size=200M
innodb_log_files_in_group=4
#innodb_log_group_home_dir = /usr/local/mysql/data/redologs
#innodb_undo_directory = /usr/local/mysql/data/undologs
innodb_undo_tablespaces = 1

### Connection
back_log = 100
max_connections = 1000
max_connect_errors = 1000
wait_timeout= 60


### log
# Error Log
log_error=/usr/local/mysql/logs/mysqld.err
log-output=FILE
general_log=0
slow-query-log=0
long_query_time = 5 
#5sec
slow_query_log_file = /usr/local/mysql/logs/slow_query.log
pid-file=/usr/local/mysql/tmp/mysqld.pid


###chracterset
character-set-client-handshake=OFF
skip-character-set-client-handshake
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

[mysqld_safe]
log_error=/usr/local/mysql/logs/mysqld.err
pid-file=/usr/local/mysql/tmp/mysqld.pid


innodb_buffer_pool_size 는 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 배수와 같아야 합니다

innodb_buffer_pool_chunk_size default 값은 128M 이고 innodb_buffer_pool_instances 는 innodb_buffer_pool_size < 1GB 미만일 경우 1 이고 1GB보다 크다면 기본값 8 입니다.
            

DB 생성

# 필요한 디렉토리 생성

[root]# cd /usr/local/mysql

[root]# mkdir logs
[root]# mkdir tmp
[root]# mkdir data


[root]# touch /usr/local/mysql/logs/mysqld.err


[root]# chown -R mysql:mysql logs
[root]# chown -R mysql:mysql tmp
[root]# chown -R mysql:mysql data



# mysqld --initialize 을 실행

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


[root]# ./mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data



# 생성된 데이터 파일 확인
[root]# ls -al /usr/local/mysql/data/


redo,undo 설정 변경

# 이 과정은 필수는 아닙니다. 생략 가능 합니다.

my.cnf 파일을 수정합니다.

[root]# vi /etc/my.cnf


아래 2개 항목 주석을 해제 합니다.

innodb_log_group_home_dir = /usr/local/mysql/data/redologs
innodb_undo_directory = /usr/local/mysql/data/undologs



디렉토리 생성 및 소유권 변경을 합니다.

[root]# cd /usr/local/
[root]# chgrp -R mysql mysql


[root]# cd /usr/local/mysql/data
[root]# mkdir -p redologs
[root]# mkdir -p undologs


[root]# chown -R mysql:mysql redologs
[root]# chown -R mysql:mysql undologs


[root]# cd /usr/local/mysql/data
[root]# mv undo* undologs
[root]# mv ib_logfile* redologs



root 패스워드 변경

mysqld_safe 로 기동 후 접속하여 alter 명령어로 패스워드를 변경합니다.


[root]# /usr/local/mysql/bin/mysqld_safe &

[root]# cd /usr/local/mysql/logs
[root]# cat mysqld.err | grep generated
-> root 패스워드가 확인됩니다.

A temporary password is generated for root@localhost: *+345#$q5FyvtZ


[root]# /usr/local/mysql/bin/mysql -uroot -p
Enter password: *+345#$q5FyvtZ
-> 패스워드는 위에서 mysqld.err 에서 확인되는 패스워드 입력합니다.


mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '변경할패스워드';
mysql> commit;
mysql> flush privileges;
mysql> exit;


MySQL 서비스 등록 및 시작

# 기존 MySQL 서비스 종료

[root]# cd /usr/local/mysql/bin
[root]# ./mysqladmin -uroot -p shutdown


# MySQL 서비스 등록(systemctl)

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


파일의 내용은 아래 내용으로 입력합니다.

[Unit]
Description=Mysql Community Server
After=network.target
After=syslog.target

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

[Install]
WantedBy=multi-user.target

* 설치 환경에 따라 경로는 변경하여 사용하시면 됩니다.


# systemctl 등록 및 시작

[root]# systemctl daemon-reload

[root]# systemctl enable mysqld.service

[root]# systemctl start mysqld.service



이어지는 다음글 : Source 설치 방식의 APM 스택 - 3번째 PHP-FPM 설치 및 연동



연관된 다른 글

 

 

 

 

 

 

2
0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x