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

Last Updated on 2월 15, 2021 by 태랑(정현호)



[참고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.x86_64 ncurses-devel.x86_64  \
ncurses-libs.x86_64 ncurses-static.x86_64 openssl.x86_64 \
openssl-devel.x86_64 bison.x86_64 readline.x86_64 \
gcc-c++.x86_64 cmake.x86_64 bash.x86_64









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'



[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 방식 설치



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

[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 방식과 공통 내용입니다.












파라미터 설정



[참고]  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_safe.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_safe.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 파라미터 변경 및 퍼미션 변경


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


[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 로 기동
[root]# /usr/local/mysql/bin/mysqld_safe &

[root]# cd /usr/local/mysql/logs
[root]# cat mysqld_safe.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_safe.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=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



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







# systemctl 등록 및 시작 

[root]# systemctl daemon-reload

[root]# systemctl enable mysqld.service

[root]# systemctl start mysqld.service







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



연관된 글:
mysql --login-path 설정

웹 기반 mysql 관리툴 - phpmyadmin

Mysql 다중 인스턴스 구동 / 인스턴스 2개 구동

Mysql 25주년 - Celebrating MySQL 25th Anniversary!

“MySQL 5.7 설치 (Source Compile&binary) on CentOS 7” 에 대한 1 댓글

  1. 핑백: Apache 와 PHP-FPM 연동 | | 작은 공간,하지만 꿈이있는

답글 남기기