Last Updated on 1월 20, 2024 by Jade(정현호)
안녕하세요
이번에는 MySQL 5.7 버전에 대해서 Source Compile 설치와 Linux Generic(Binary 파일) 파일을 통한 설치에 대해서 확인해보도록 하겠습니다.
[참고1] Source Compile 로 APM 스택 구성 글로 연관된 이전 글 아래와 같습니다
Apache -> MySQL -> PHP 순으로 진행됩니다.
Apache -> MySQL -> PHP-FPM 순으로 보시면 되며 하단에 연결 링크가 있습니다.
[참고2]
Source Compile 과 Binary 설치 방식 모두 기재되어 있고 설치 버전과 환경은 아래와 같습니다.
OS : CentOS 7.8 / MySQL : 5.7.31
[참고3] YUM(rpm) 으로 MySQL 설치는 아래 APM 연동 글을 참조하시면 됩니다.
PHP 를 구동 하기 위한 서버 스택의 구성은 여러가지 방식으로 할 수 있습니다.
[참고4] 우분투 환경에서 MySQL 설치는 아래 포스팅을 확인해주세요
apt(패키지 설치) 방법, Binary를 이용한 설치 , Source Compile 설치 3개 방법에 대해서 기술되어 있습니다.
[참고5] CentOS8 에 MySQL8 버전 설치는 아래 포스팅을 확인해주세요
Contents
선행 작업 수행
# 유저 그룹 생성
[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 설치 및 연동
연관된 다른 글
늦었지만 소식 업데이트 합니다.
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io
정말 감사합니다. 설치 관련 다른 곳의 글도 많이 참고했는데, 적어주신 내용에서 정말 많은 도움을 받았습니다.
안녕하세요
도움이 되었다니 다행이십니다.
방문 및 친절한 코멘트 감사합니다.
좋은 하루되세요