CentOS8 - MySQL8 설치 - Source 컴파일 - dnf 패키지 설치 - CMake 소스 컴파일

Last Updated on 1월 23, 2021 by 태랑(정현호)

0. 설치 정보



• 설치 환경 정보
    - CentOS 8.3
    - MySQL 8.0.21 ~ 8.0.23

포스팅에서는 패키지 설치(dnf) , 소스 컴파일 , 바이너리 압축 해제 형식 3가지에 대해서 기술되어 있습니다 설치하는 방식에 따라 버전이 8.0.21 ~ 8.0.23 이 사용 하였습니다.


• 업데이트 일자 
2021/01/21



[참고] CentOS7.8 에서 MySQL 5.7 설치에 대한 정보는 아래 포스팅을 참조하시면 됩니다





1. 선행 작업 수행



1-1 유저 그룹 생성

[root]# groupadd mysql

[root]# useradd -M -s /sbin/nologin -g mysql mysql

[참고1] 포스팅에서는 3가지 방식으로 설치를 모두 설명하기 위해서 그룹과 유저를 생성하였지만 패키지 형태로 설치할 경우 mysql 유저를 생성 함으로 위 과정을 생략 하여도 됩니다.

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

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


1-2 EPEL 활성화

user$ sudo dnf -y install dnf-plugins-core
user$ sudo dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
user$ sudo dnf config-manager --set-enabled powertools


1-3 사전 필요 패키지 설치

user$ sudo dnf -y install ncurses ncurses-devel \

ncurses-libs openssl openssl-devel \
bison make cmake readline gcc gcc-c++ wget \
autoconf automake libtool* libmcrypt* git \
patchelf libtirpc* rpcgen \
ncurses-compat-libs




2. 패키지형 설치



패키지 형태로 설치할 때는 dnf로 설치 하시는게 가장 좋은 방법일것 같습니다.

1. 설치 
user$ sudo dnf -y install mysql-server mysql mysql-devel


2. 접속
user$ sudo mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.21 Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>



[참조] 파라미터 관련해서는 아래 "4-2 파라미터 파일 생성" 를 참조하시면 됩니다.




3. Source Compile 설치



3-1 cmake boost 다운


user$ cd /usr/local/src/

sudo wget https://dl.bintray.com/boostorg/release/1.73.0/source/boost_1_73_0.tar.gz
user$ sudo tar zxvf boost_1_73_0.tar.gz

* MySQL 8.0.22 기준 Boost는 1.73.0 버전이 필요 합니다.
(Boost minor version found is 75 we need 73)


3-2 

user$ mkdir -p pkg
user$ cd pkg
user$ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22.tar.gz
user$ tar zxvf mysql-boost-8.0.22.tar.gz
user$ cd mysql-8.0.22

[참고] pkg 디렉토리 생성 및 pkg 디렉토리 사용은 포스팅에서의 예시입니다 다른 디렉토리를 사용하여도 됩니다.



3-3 CMake 수행

user$ sudo cmake \
'-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.0.22' \
'-DINSTALL_SBINDIR=/usr/local/mysql-8.0.22/bin' \
'-DINSTALL_BINDIR=/usr/local/mysql-8.0.22/bin' \
'-DMYSQL_DATADIR=/usr/local/mysql-8.0.22/data' \
'-DINSTALL_SCRIPTDIR=/usr/local/mysql-8.0.22/bin' \
'-DSYSCONFDIR=/usr/local/mysql-8.0.22/etc' \
'-DWITH_INNOBASE_STORAGE_ENGINE=1' \
'-DWITH_PARTITION_STORAGE_ENGINE=1' \
'-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' \
'-DWITH_ARCHIVE_STORAGE_ENGINE=1' \
'-DWITH_BLACKHOLE_STORAGE_ENGINE=1' \
'-DWITH_PERFSCHEMA_STORAGE_ENGINE=1' \
'-DWITH_FEDERATED_STORAGE_ENGINE=1' \
'-DDOWNLOAD_BOOST=1' \
'-DWITH_BOOST=/usr/local/src/boost_1_75_0' \
'-DFORCE_INSOURCE_BUILD=1'



[참고] Cmake Clean 하는 방법

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


3-4 빌드 및 인스톨

user$ sudo make
user$ sudo make install


3-5 경로 단일화를 위해 심볼릭 링크 추가

user$ sudo ln -s /usr/local/mysql-8.0.22 /usr/local/mysql



여기 까지 완료 되었다면 아래 챕터 4~ 6 까지 보시면 됩니다.



4. 바이너리 압축 해제 방식



바이너리의 압축 해제 방식은 Linux - Generic 의 파일을 다운로드를 사용하시면 됩니다.


4.1 파일 다운 로드

다운 로드 경로


OS : Linux Generic
OS Version : Linux - Generic ( glibc 2.17)(x86, 64-bit) 을 선택해서 다운로드 받으시면 됩니다



또는 아래와 같이 서버에서 직접 다운로드를 받으시면 됩니다

user$ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.23-linux-glibc2.17-x86_64-minimal.tar.xz


4.2 압축 해제 및 심볼릭 링크 생성

user$ sudo tar -xvf mysql-8.0.23-linux-glibc2.17-x86_64-minimal.tar.xz \
-C /usr/local/

user$ sudo ln -s /usr/local/mysql-8.0.23-linux-glibc2.17-x86_64-minimal \
/usr/local/mysql


여기 까지 완료 되었다면 아래 챕터 4~ 6 까지 보시면 됩니다.



4. Post Install Action



4-1 MySQL 라이브러리 경로 추가

user$ sudo echo "/usr/local/mysql/lib" | \

sudo tee -a /etc/ld.so.conf

user$ sudo ldconfig


4-2 파라미터 파일 생성

/etc/my.cnf 파일에 아래 내용을 입력 합니다.

user$ sudo 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=127.0.0.1
#bind-address=0.0.0.0
basedir = /usr/local/mysql
datadir= /usr/local/mysql/data
tmpdir = /usr/local/mysql/data
# Exception InnoDB,ex) MyISAM,csv,arhive
socket=/tmp/mysql.sock
user=mysql
skip_name_resolve
event-scheduler=OFF
sysdate-is-now
federated
# expire_logs_days=7 # deprecated
binlog_expire_logs_seconds=604800
# default = 2592000 sec = 30 Days
# 604800 sec = 7 Days
max_allowed_packet=1073741824
secure-file-priv=""

#timestamp
explicit_defaults_for_timestamp = TRUE

### MyISAM Spectific options
key_buffer_size = 40M
bulk_insert_buffer_size = 16M
myisam_sort_buffer_size = 16M
#myisam_sort_buffer_size = 32M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1

### INNODB Spectific options
default-storage-engine = InnoDB
## 16MB is under to table 1000EA
##innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 384M
innodb_buffer_pool_dump_pct=100
#User Table Datafile
innodb_data_home_dir = /usr/local/mysql/data/
#System Datafile
innodb_data_file_path = ib_system:100M:autoextend
innodb_flush_method = O_DIRECT
innodb_file_per_table=TRUE
innodb_log_buffer_size = 16M
innodb_fast_shutdown=0
innodb_buffer_pool_load_at_startup = ON
innodb_buffer_pool_dump_at_shutdown = ON
innodb_log_file_size=200M
innodb_log_files_in_group=4
# innodb_undo_tablespaces = 2 #Depreacted

### 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=TABLE,FILE
general_log_file = /usr/local/mysql/logs/general_query.log
# disable - 0, enable - 1
general_log=0
slow-query-log=1
long_query_time = 1 # Second 
slow_query_log_file = /usr/local/mysql/logs/slow_query.log
log_queries_not_using_indexes = OFF
pid-file=/usr/local/mysql/tmp/mysqld.pid
log_timestamps=SYSTEM

### Replication
log-bin=/usr/local/mysql/data/binlog
sync_binlog=1
binlog_cache_size=2M
max_binlog_size=512M
# expire_logs_days=7 # deprecated
binlog_expire_logs_seconds=604800
# default = 2592000 sec = 30 Days
# 604800 sec = 7 Days
log_bin_trust_function_creators=ON

###character
character-set-client-handshake=FALSE
skip-character-set-client-handshake
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
init-connect=SET NAMES 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci'

[mysqld_safe]
pid-file=/usr/local/mysql/tmp/mysqld.pid
open-files-limit = 16384




5. DB 생성 및 비밀번호 변경



5-1 디렉토리 생성

user$ cd /usr/local/mysql

user$ sudo mkdir -p logs tmp data
user$ sudo chown mysql:mysql logs tmp data


5-2 DB 생성

user$ cd /usr/local/mysql/bin
user$ sudo ./mysqld \
--defaults-file=/etc/my.cnf \
--initialize \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data


5-3 root password 변경

5-3-1 먼저 mysql 의 환경변수를 설정 합니다

echo "export MYSQL_HOME=/usr/local/mysql" >> ~/.bash_profile
echo "export PATH=\$PATH:\$MYSQL_HOME/bin" >> ~/.bash_profile
source ~/.bash_profile


5-3-2 패스워드 변경을 위한 최초 기동

$user sudo mysqld_safe &


5-3-3 초기 패스워드 확인

user$ sudo cat $MYSQL_HOME/logs/mysqld.err | grep password
[Server] A temporary password is generated for root@localhost: sYlVlTrLh4/g

[참조] 초기 패스워드는 로그에 위와 같이 기록되어 있습니다.


5-3-4 접속

user$ mysql -u root -p
Enter password: sYlVlTrLh4/g


5-3-5 비밀번호 변경

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

mysql> commit;
mysql> flush privileges;
mysql> exit


5-4 MySQL 종료

user$ mysqladmin -u root -p shutdown



6. MySQL 서비스 등록 및 기동



6-1 MySQL 서비스 생성


user$ cd /usr/lib/systemd/system/
user$ sudo vi 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



6-2 systemctl 등록 및 시작

user$ sudo systemctl daemon-reload

user$ sudo systemctl enable mysqld.service
user$ sudo systemctl start mysqld


6-3 MySQL 정상 여부 확인

user$ mysql -u root -p
Enter password: [패스워드]

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.22 |
+-----------+


mysql> status;
--------------
mysql Ver 8.0.22 for Linux on x86_64 (Source distribution)

Connection id: 7
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: less -n -i -F -X -E
Using outfile: "
Using delimiter: ;
Server version: 8.0.22 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /tmp/mysql.sock
Binary data as: Hexadecimal
Uptime: 51 sec



관련된 다른 글

 

 

 

 

 

 

 

 

 

답글 남기기