[MySQL][Install] - 8.0+CentOS 7.x - Source

MySQL 8.0 CentOS 7.x - Source

 

MySQL에서 제공하는 Source 이용해서 Compile 설치하는 방법입니다.

MySQL 5.7에서도 이미 설명했던 설치 방법입니다. 전체 내용에서 필요 부분만 수정했습니다.

 

먼저 Source Code 설치를 하기 위해선 OS 몇가지 필요 Package(프로그램) 설치해야 합니다.

이게 설치가 되어 있어야 Source Code Compile 됩니다. 필요 Package 다음과 같습니다.

한가지 유의 사항은 CentOS 7에서 사용하던 3가지정도의 패키지를 업데이트 해야 합니다.

CMake 3.5.1 이상

gcc 5.4 이상

boost : 1.69 이상

cmake gcc 설치하는 방법을 같이 첨부해서 설명합니다.

 

필수 설치 패키지 리스트 설치 확인

그냥 모르고 설치하는것보다는 필수 패키지가 어떤 역활을

하는지 알면 좋을것 같아 같이 설명드립니다. 그리고 패키지 설치후 설치가 되었는지 확인하는 방법도 같이 설명드리겠습니다.

참고로 모든 설치는 root 진행됩니다.

shell > su - root

 

+ cmake

패키지설명

make 소스관리 문제점을 개선시켜 새롭게 나온 빌드 프레임워크 프로그램입니다. 기존 make보다 좀더 편리하게 관리하고 빌드되도록 만든 프로그램입니다. 

centos 8.x 이상은 지원이 되며 7.x이하는 수동으로 설치해 주어야 합니다.

CMake 3.5.1 이상이 되어야 합니다.

참고 URL : http://www.cmake.org.

 

설치방법 확인방법

문서는 CentOS 7이므로 무조건 소스를 이용해서 설치를 해주어야 합니다.

위의 URL에서 3.5이상의 버전을 받습니다.( 문서 기준으로 3.16.2 최신 버전입니다.)

shell > wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz
shell > tar -zxvf cmake-3.16.2.tar.gz
shell > ./bootstrap
shell > make
shell > make install
shell > cmake --version
cmake version 3.16.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

 

+ make

* 패키지 설명

직접 소스를 빌드하는 프로그램입니다. 소스를 빌드하여 기계어로 만들어주는 핵심적인 역활을 하는 프로그램입니다. 반드시 설치하셔야 합니다. GNU make 3.75 이상 버전을 강력히 권고합니다.

 

설치방법 확인방법

OS설치시 개발자 옵션을 선택하셨다면 설치가 되어 있습니다.

shell> rpm -qa | grep -i make
make-3.82-24.el7.x86_64

 

위와 비슷한 결과가 나오지 않으면 설치를 합니다.

shell> yum install make

 

+ Ansi c++컴파일러

* 패키지설명

ANSI C++ compiler 필요합니다.  4.2.1 이상이 필요합니다. Mysql 소스로 제공되므로 컴파일 과정이 반드시 필요한데 패키지가 역활을 해줍니다.

그런데 centos에서 얘기하는 C 혹은 C++ 라이브러리는 다음과 같은 것들을 얘기한다고 합니다.

1 .autoconf

2. automake

3. binutils

4. bison

5. flex

6. gcc (c compiler)

7. gcc-c++ (c++ compiler)

8. gettext

9. libtool

10. make

11. patch

12. pkgconfig

13. redhat-rpm-config

14. rpm-build

15. rpm-sign

그래서 한꺼번에 설치하는 방법을 사용합니다.

 

설치방법

shell > yum group install "Development Tools"

이렇게 하면 개발관련된 모든 패키지들을 자동으로 설치하게 됩니다.

물론 C, C++ Ansi 라이브러리도 설치가 됩니다

혹시 OS설치시 개발자 옵션을 선택하셨다면 설치가 되어 있습니다.

 

+ Openssl

* 패키지설명

OpenSSL 네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS SSL 오픈 소스 구현판입니다. C 언어로 작성되어 있는 중심 라이브러리 안에는, 기본적인 암호화 기능 여러 유틸리티 함수들이 구현되어 있스니다. WITH_SSL 옵션을 이용하여 설정합니다.

 

* 설치방법

shell > rpm -qa | grep -i openssl
openssl-libs-1.0.2k-19.el7.x86_64
openssl-1.0.2k-19.el7.x86_64
openssl-devel-1.0.2k-19.el7.x86_64

없다면 설치 진행합니다.

shell > yum install openssl openssl-devel

 

+ ncurses library

* 패키지설명

프로그래머가 텍스트 사용자 인터페이스를 터미널 독립 방식으로 기록할 있도록 API 제공하는 프로그래밍 라이브러리입니다. GUI같은 응용 소프트웨어를 개발하는 툴킷이라고 합니다.

 

설치방법

OS설치시 개발자 옵션을 선택하셨다면 설치가 되어 있습니다.

shell > rpm -qa | grep -i ncurses
ncurses     
ncurses-base
ncurses-libs
ncurses-devel

없다면 설치 진행합니다.

shell > yum install ncurses ncurses-base ncurses-libs ncurses-devel

위의 설치 화면이 나오는지 확인합니다.

 

+ perl 관련

* 패키지설명

스크립트 언어입니다. 터미널에서 작성해서 바로 수행이 가능하며 python 비슷한 특징을 가진 언어입니다. perl 관련 스크립트를 작성하려면 설치가 필요합니다.

 

* 설치방법

OS설치시 개발자 옵션을 선택하셨다면 설치가 되어 있습니다. 위의 그룹 설치인 yum group install "Development Tools” 설치를 하셨다면 이미 설치가 되었을 겁니다.

shell > rpm -qa | grep -i perl
perl-parent-0.225-244.el7.noarch
perl-Pod-Escapes-1.04-294.el7_6.noarch
perl-libs-5.16.3-294.el7_6.x86_64
perl-threads-1.87-4.el7.x86_64
perl-constant-1.27-2.el7.noarch
perl-File-Temp-0.23.01-3.el7.noarch
perl-Pod-Simple-3.28-4.el7.noarch

이외 많은 것들이 출력됩니다.

 

따로 설치를 원할 아래와 같이 입력하고 설치합니다.

shell > yum install perl

 

+ gnu tar

mysql source gnu tar라는 압축툴로 압축되어 있습니다. 압축을 풀려면 설치가 필요하나 기본적으로 설치가 되어 있습니다.

 

+ git

* 패키지설명

mysql 관련해서 소스를 배포해보고 싶으시다거나 엔지니어로써 참여를 원하시면 git 설치를 하셔야 합니다.

 

* 설치방법

OS설치시 개발자 옵션을 선택하셨다면 설치가 되어 있습니다.

shell > rpm -qa | grep -i git
git-1.8.3.1-20.el7.x86_64

 

없다면 설치 진행합니다.

shell > yum install git

 

 

 

+ bison

* 패키지설명

GNU 파서 생성기로 yacc 개선하고 대체하기 위해 만들어졌습니다. 프로그램 도구는 LALR 방식으로 작성된 문법을 처리하고 해석하여 C코드로 만들어 줍니다. 흔히 사칙 계산기부터 고도의 프로그래밍 언어까지 다양한 범위의 언어를 만드는데 사용할 있습니다.

버전은 2.1 이상을 설치하셔야 합니다. 

 

* 설치방법

OS설치시 개발자 옵션을 선택하셨다면 설치가 되어 있습니다.

shell > rpm -qa | grep -i bison
bison-3.0.4-2.el7.x86_64

 

없다면 설치 진행합니다.

shell > yum install bison

 

+ m4

Solaris Express 설치하신다면 m4 반드시 설치되야 합니다. bison 더불어 설치되어야 합니다. 우린 centos 설치되므로 넘어가셔도 됩니다.

 

+ boost

* 패키지설명

각종 데이터 구조와 알고리즘을 모아둔 C++라이브러리 입니다. 거의 표준 패키지로 봐도 무관할만큼 우수한 라이브러리 모임이라고 합니다. 여러 개발자들이 개발에 참여했으며 게임서버나 기타 연산 성능이 필요한 곳에 많이 쓰인다고 합니다. 이건 mysql에서 몇가지 옵션으로 자동으로 다운로드 설치가 됩니다. 그러나 인터넷이 안되는 환경을 위해 boost library 포함된 mysql 제공하고 있습니다.

 

+ gcc

* 패키지설명

GNU 컴파일러 모음(GNU Compiler Collection, 줄여서 GCC) GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러입니다.

자유 소프트웨어 중에 가장 알려진 것들 하나인 GCC 원래 C만을 지원했던 컴파일러로 이름도 "GNU C 컴파일러"였습니다. 이러한 까닭에 현재에도 GCC GNU 컴파일러 모음의 일부인 GNU C 컴파일러(GNU C Compiler) 줄임말로 쓰이기도 합니다. 그러나 나중에 C++, 자바, 포트란, 에이다 여러 언어를 컴파일할 있게 되면서, 현재의 이름으로 바뀌게 되었습니다.

 

* 설치방법

gcc 버전이 5.4 이상이어야 한다. 7.x버전에서는 4.8 최고 버전일 것이다.(일반 yum으로 설치시). 그래서 상위버전 설치가 필요하다. 이때 CentOS에서 제공되는 SCL(The Software Collections ( SCL ) Repository) 설치하는 것입니다. 설치방법은 다음과 같습니다.

shell > yum install centos-release-scl
shell > yum install devtoolset-7-gcc*
shell > scl enable devtoolset-7 bash
shell > gcc --version
gcc (GCC) 6.3.1 20170216 (Red Hat 6.3.1-3)
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 

위의 두번째 yum install devtoolset-7-gcc*에서 설치 진행이 안된다면 devtoolset-7버전이 더이상 나오지 않는것이다.

yum list grep -i devtoolset 명령으로 어떤 버전들이 있는지 확인 후 중간버전(예를 들어 7,8,9 버전들이 나오면 8 버전으로)으로 설치해 주는것을 추천합니다.

만약 자신의 터미널 세션을 LOGOUT 했거나 터미널을 재수행 했다면 위에 "scl enable devtoolset-6 bash" 부분을 재실행해야 합니다.

 

# 참고 : SCL(The Software Collections ( SCL ) Repository)

일반적으로 Linux에서 버전이 발표될때는 패키지나 개발 언어들이 서로 호환이 이루는 버전들로 구성이 되어 있습니다. 그러나 최신 소프트웨어를 깔기 위해선 최신 패키지 버전이나 개발언어 버전을 요구하게 되는데 이때 몇년이 지난 OS 사용하지 못할 수도 있습니다. 예를들어 CentOS python 최신 버전은 2.7인데 3.8 깔게 되면 여기에 관련된 프로그램들이 작동이 안된다거나 멈출수가 있습니다. 그러나 내가 필요로 하는 프로그램은 최신 패키지를 요구한다면 최신 OS 깔아야 하는데 이건 꽤나 공수나 시간이 많이 들어갑니다.

이때 CentOS에서 제공하는 SCL 이용하면 OS 업그레이드하지 않고도 최신의 패키지를 있습니다. 파이선, gcc 등등 시스템과 밀접한 패키지를 업데이트 해서 사용할 있습니다. 참고로 자신의 세션에서만 적용이 됩니다. 시스템에 적용되면 위에서도 얘기했듯이 문제를 발생시킬 있는 소지가 있기 때문입니다.

URL : https://www.softwarecollections.org/en/

 

■ MySQL 옵션 설정 빌드와 설치

먼저 mysql 소스를 받아야 합니다.

https://dev.mysql.com/download

이곳으로 가면 아래 download archive라는곳이 있습니다. 이곳에서 8.0버전을 다운로드 받을 있습니다.

직접적으로 url 가셔도 됩니다.

https://downloads.mysql.com/archives/community/

 

페이지에 가서 아래 product version 8.0.x 최신 버전으로 선택합니다. 기준으로는 8.0.17 되겠습니다. 그리고 Operating System Source 선택합니다.

아래 2가지 버전이 있는데 첫번째는 boost library 없는 압축 파일입니다.

Generic Linux (Architecture Independent), Compressed TAR Archive

 

아래는 boost library 포함된 파일입니다.

Generic Linux (Architecture Independent), Compressed TAR Archive

Includes Boost Headers

 

먼저 mysql에서 사용할 계정을 만들어 줍니다. mysql 내부적으로 mysql이라는 계정을 이용해서 엔진을 컨트롤합니다.

shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql

 

mysql 소스를 받은 디렉토리로 이동합니다.

디렉토리로 이동해 소스를 풀어주고 압축을 디렉토리로 이동합니다.

shell> tar zxvf mysql-8.0.x.tar.gz
shell> cd mysql-8.0.x

 

디렉토리 이동후 반드시 디렉토리를 하나 만들어야 합니다. 이유는 뒤에서 설명합니다.

shell mysql-8.0.x > mkdir build1

 

압축을 풀고 본격적으로 빌드환경에 필요한 cmake 실행합니다. 이때 어떤 옵션들을 설정할지 또는 활성화시키고 중지시킬지 결정해야 합니다. cmake 대한 옵션들의 자세한 설명은 mysql 홈페이지의 기술문서에 나와 있습니다. 또한 터미널에서도 명령을 통해 확인이 가능합니다. 어떤 옵션들이 있는지 확인해 보고 싶으시면 다음과 같은 명령어를 입력하시면 확인해 보실 있습니다.

shell> cmake .. -L   # 옵션에 대해 간략히 보기
shell> cmake .. -LH  # 옵션에 대한 도움말
shell> cmake .. -LAH # 모든 파라미터에 대한 설명 및 도움말
shell> cmake ..     # interactive display

 

참고) MySQL 공식 홈페이지의 옵션 상세 설명 페이지.

https://dev.mysql.com/doc/mysql-sourcebuild-excerpt/5.7/en/source-configuration-options.html

 

일단 어느정도 다양한 기능이 지원되는 빌드 환경으로 만들어 보겠습니다.

여기에서 빌드되어 생성된 기능들은 따로 차차 설명드리겠습니다.

 

아래 내용은 제가 주로 사용하는 cmake 빌드 환경 구성시 사용하는 옵션입니다. 생각에는 이정도면 필요한 왠만한 기능들은 지원되지 않을까 생각합니다. 이외 필요하신 옵션이 있다면 사용하시면 됩니다.

<컴파일 옵션 설명 예제>

-DCMAKE_INSTALL_PREFIX : 설치 디렉토리

-DWITH_BOOST=directory : 다운로드한 boost 위치시킬 디렉토리 위치

-DDOWNLOAD_BOOST=1 : boost library 없을시 자동으로 다운로드

-DSYSCONFDIR : my.cnf 파일 기본 위치

-DWITH_ARCHIVE_STORAGE_ENGINE=1 : archive storage engine 사용

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 : 블랙홀 엔진 사용여부

-DWITH_EXAMPLE_STORAGE_ENGINE=1 : 예제 생성 엔진 사용여부

-DWITH_FEDERATED_STORAGE_ENGINE=1 : 이기종 DB 연결 엔진

-DWITH_PARTITION_STORAGE_ENGINE=1 : 파티션(파티셔닝) 엔진 사용여부

-DENABLED_PROFILING : 프로파일링 기능 사용 여부

-DWITH_CURL=system or curl directory : CURL 외부 CURL사용할지 System CURL사용할지 여부

-DOPTIMIZER_TRACE=1 : 옵티미아저 트레이스 사용 여부

-DWITH_UNIXODBC=1 : ODBC 사용여부

-DWITH_INNODB_MEMCACHED=1 : 멤캐쉬 스토리지 사용여부

-DWITH_NUMA=on : Linux Numa 시스템 사용여부

-DWITH_SSL=system or directory : ssl 사용여부

-DWITH_ZLIB : 압축기능을 사용하는 위치. 시스템 혹은 번들

-DMYSQL_TCP_PORT : 3306 이외에 다른 포트를 지정하고 싶을때 사용

-DMYSQL_UNIX_ADDR : Unix Socket File 위치를 지정하고 싶을때 사용. 기본은 /tmp/mysql.sock

-DWITH_LIBWRAP=1 : 시스템 관리자의 요청으로 Tcp Wrapper 사용해야 할시 사용합니다(호스트서버의 hosts.allow hosts.deny 파일을 이용해서 클라이언트 접속 허용 여부를 설정함.).

-DWITH_SYSTEMD=1 : centos 7이상부터 지원됩니다. systemd라는 시스템 관리툴을 이용해서 MySQL 제어합니다. systemctl 툴을 이용하지 않고 mysqld_safe 서버를 제어하고 싶다면 옵션은 제거합니다. 또한 옵션 활성화시 mysqld_safe, mysqld_multi 같은 스크립트가 설치되지 않고 대신 mysqld_pre_systemd 설치됩니다.

여기서 NUMA 기능과 libwrap기능은 시스템 환경설정이 별도로 필요한 기능들입니다. 포스트의 범위를 벗어남으로 별도로 기회가 설명드리겠습니다.

또한 위의 환경설정은 기본 위치를 정할 , 추후 환경설정파일에서 다시 위치를 지정할 있습니다.

 

<컴파일 옵션 예제>

cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DWITH_BOOST=/usr/local/src/boost \
-DDOWNLOAD_BOOST=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DENABLED_PROFILING=1 \
-DWITH_CURL=system \
-DOPTIMIZER_TRACE=1 \
-DWITH_INNODB_MEMCACHED=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=bundled

 

조금 기다리시면 터미널에 아래 메세지가 떨어지는데 특별한 에러가 보이지 않는다면 빌드환경 구성이 성공한겁니다. 만약 에러가 떨어지면 이유를 분석해 필수 필요패키지를 추가로 설치하거나, 해당 패키지에 대한 환경 구성을 다시 해주거나, 옵션 변경을 통해 해결해 주어야 합니다.

 

이제 컴파일을 해보도록 하겠습니다.

shell> make

오래 시간이 걸립니다. 40 이상 될수도 있습니다. 서버 사양에 따라 다릅니다. 컴파일이 진행되다가 멈추는 경우도 가끔 있는데 이때는 원인을 찾아서 해결을 해주어야 합니다.

 

컴파일된 프로그램을 전체적으로 테스트를 합니다.

shell> make test
Running tests...
Test project /root/mysql-8.0.17/init
      Start  1: hp_test1
 1/19 Test  #1: hp_test1 .........................   Passed    0.01 sec
      Start  2: hp_test2
 2/19 Test  #2: hp_test2 .........................   Passed    0.14 sec
      Start  3: pfs_instr_class
 3/19 Test  #3: pfs_instr_class ..................   Passed    0.01 sec
      Start  4: pfs_instr_class-oom
 4/19 Test  #4: pfs_instr_class-oom ..............   Passed    0.02 sec
      Start  5: pfs_instr
 5/19 Test  #5: pfs_instr ........................   Passed    0.01 sec
      Start  6: pfs_instr-oom
 6/19 Test  #6: pfs_instr-oom ....................   Passed    0.03 sec
      Start  7: pfs_account-oom
 7/19 Test  #7: pfs_account-oom ..................   Passed    0.02 sec
      Start  8: pfs_host-oom
 8/19 Test  #8: pfs_host-oom .....................   Passed    0.13 sec
      Start  9: pfs_user-oom
 9/19 Test  #9: pfs_user-oom .....................   Passed    0.13 sec
      Start 10: pfs_noop
10/19 Test #10: pfs_noop .........................   Passed    0.01 sec
      Start 11: pfs
11/19 Test #11: pfs ..............................   Passed    0.98 sec
      Start 12: pfs_misc
12/19 Test #12: pfs_misc .........................   Passed    0.01 sec
      Start 13: pfs_connect_attr
13/19 Test #13: pfs_connect_attr .................   Passed    0.05 sec
      Start 14: simple
14/19 Test #14: simple ...........................   Passed    0.20 sec
      Start 15: skip
15/19 Test #15: skip .............................   Passed    0.01 sec
      Start 16: todo
16/19 Test #16: todo .............................   Passed    0.01 sec
      Start 17: skip_all
17/19 Test #17: skip_all .........................   Passed    0.00 sec
      Start 18: no_plan
18/19 Test #18: no_plan ..........................   Passed    0.00 sec
      Start 19: basic
19/19 Test #19: basic ............................   Passed    0.01 sec

100% tests passed, 0 tests failed out of 19

Total Test time (real) =   1.86 sec

 

 

위에 install prefix 지정된 디렉토리에 설치를 진행합니다.

shell> make install

 

 

 

!! 중요사항

위에서 소스 디렉토리로 들어간 디렉토리를 하나 만들어 위의 cmake 수행해야 합니다. cmake 방법이 강제적으로 바뀐것도 있지만 이게 편리한 방법이기 때문입니다. cmake 수행시 프로젝트 속성이나 여러가지 이유로 컴파일 환경이 서로 다르게 해야할 수도 있을 것입니다. 이때 압축파일을 따로따로 컴파일 환경마다 풀어서 만들면 용량낭비가 많이 심한것도 있습니다. 이때 소스파일은 하나만 풀고 안에 디렉토리만 여러개 만들어서 컴파일 환경을 관리하면 소스는 하나이지만 컴파일 환경을 여러개로 만들 있기 때문에 용량관리차원이나 소스관리 차원에서 좀더 유리한 방법이라 있습니다.

 

후속작업

설치가 끝났으니 후속작업을 진행해야 합니다.

먼저 mysql data들이 설치될 있는 디렉토리를 만들어주어야 합니다. 보통 설치경로 밑에 ‘data’ directory 만들고 여기다 설치를 합니다.

우리가 설치한 디렉토리는 /usr/local/mysql 입니다. 이곳으로 디렉토리를 옮겨서 data directory 생성합니다.

그리고 디렉토리의 권한을 바꾸어 줍니다.

shell> cd /usr/local/mysql
shell> mkdir data
shell> chown mysql:mysql data
shell> chmod 750 data

 

초기 MySQL 환경 설정

mysql install 완료하게 되면 /etc/my.cnf /etc/my.cnf.d 라는 파일들이 생깁니다.

my.cnf 몇가지 파라미터 설정이 필요한데 다음과 같이 파라미터를 초기화 해줍니다.

shell > vi /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

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

 

이제부터 2가지 관리방식으로 나뉘게 됩니다.위의 컴파일 옵션중 -DWITH_SYSTEMD 옵션에 따라 나뉘게 됩니다.

위에서 설명드렸듯이 -DWITH_SYSTEMD옵션을 1 주었다면 시스템에서 관리되는 방법(systemctl 이용하는) 이용하는것이고 옵션을 주지 않았다면 직접 관리하는 방법이 됩니다.

 

직접 관리하는 방법[systemctl 이용하지 않는 방법. -DWITH_SYSTEMD 옵션을 주지 않음]

암호를 초기화하는 방법은 다음 두가지 방법이 있는데 하나는 일반 초기화입니다. root password 자동으로 부여해 줍니다. 하나는 추후 root패스워드를 생성하는 방법입니다.

 

* 초기 root 암호 생성 초기화방법

shell > cd /usr/local/mysql
shell > bin/mysqld --initialize --user=mysql

 

* 초기 root암호 생성 초기화

shell > cd /usr/local/mysql
shell > bin/mysqld --initialize-insecure --user=mysql

 

우리는 root암호 생성 초기화 방법으로 수행합니다. 그런데 조금더 옵션을 붙여서 수행합니다.

shell> bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql

수행 마지막에 보면 root password 생성이 됩니다. 적어둡니다.

 

이렇게 하면 data디렉토리에 mysql 관련 파일들이 설치되어 있는걸 확인해 보실 있습니다.

shell > cd /usr/local/mysql/data
shell > ls -al

 

ssl 관련 환경도 구성합니다.

shell > bin/mysql_ssl_rsa_setup

 

이제 MySQL 실행해보겠습니다.

shell > bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
Starting MySQL. SUCCESS!

 

 

반드시 뒤에 & 붙입니다. 백그라운드로 실행하겠다는 옵션입니다.

엔진이 실행되었으니 mysql 접속해 보겠습니다.

shell> mysql -u root -p
password

암호를 입력합니다.

mysql > show databases;
performance_schema
mysql
tmp
information_schema
mysql>

mysql 접속 테스트가 이상없이 실행되었습니다.

 

로그인 반드시 root 암호를 변경해 줍니다. 처음에 제공된 암호는 만료가 되는 암호이므로 반드시 변경하셔야 합니다.

참고로 강력한 암호(숫자.영문.영문대문자.특수문자등이) 설정되지 않으면 다음과 같은 에러가 발생합니다. 

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY ‘admin1234'; 
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

 

mysql> alter user 'root'@'localhost' identified by '!MyNewPass4';

초기 암호 정책에 따라 대소문자,특수문자,숫자가 반드시 석여야 합니다.

이렇게 하면 root 암호가 변경됩니다. 

 

엔진의 종료 방법은 다음과 같습니다.

shell > bin/mysqladmin -uroot -p shutdown
Enter password:

암호를 입력하면 mysql server 종료됩니다.

 

* 시작 종료 스크립트 설정

위에 있는 mysql 서버 시작 방법으로 시작하면 명령를 기억하기도 까다롭고 수행하기도 어렵습니다. 그래서 mysql 서버 시작 스크립트를 제공하고 있습니다.

shell> cp support-files/mysql.server /etc/init.d/mysqld

 

이렇게 복사를 해주신다음 mysql서버를시작할때는 다음과 같이 해줍니다.

shell > /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

 

중지할때는 다음과 같이 해줍니다.

shell > /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!

 

시스템 관리를 통하여[systemctl 이용하는 방법. -DWITH_SYSTEMD 옵션을 1 지정]관리하는 방법.

옵션을 설정하였다면 위에 설명했던 mysqld_safe라는 시작 스크립트가 없습니다. 대신 별도의 스크립트를 만들어 수행해야 합니다.

다음의 위치에 다음 파일을 만듭니다.

위치 : /usr/lib/systemd/system/mysqld.service

mysqld.service 파일에 다음의 내용을 입력합니다.

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Needed to create system tables
ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd

# Start main service
ExecStart=/usr/local/mysql/bin/mysqld $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false

 

 

그리고 터미널에 다음과 같이 입력해 줍니다.

shell > systemctl enable mysqld.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.

위와 같은 결과가 나옵니다.

 

MySQL서버를 시작합니다.

shell > systemctl start mysqld.service

 

상태를 확인합니다.

shell > systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-12-31 21:39:21 KST; 10s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 1649 ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 1727 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/mysqld.service
           └─1727 /usr/local/mysql/bin/mysqld

Dec 31 21:39:20 my80src mysqld_pre_systemd[1649]: '.
Dec 31 21:39:20 my80src mysqld_pre_systemd[1649]: 2019-12-31T12:39:20.843083Z 0 [ERROR] [MY-013455] [Server] The newly created data directory /usr/local/mysql/data/ by --initialize is unusable. You can remove it.
Dec 31 21:39:20 my80src mysqld_pre_systemd[1649]: 2019-12-31T12:39:20.843113Z 0 [ERROR] [MY-010119] [Server] Aborting
Dec 31 21:39:21 my80src mysqld_pre_systemd[1649]: 2019-12-31T12:39:21.225808Z 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.17)  Source distribution.
Dec 31 21:39:21 my80src mysqld[1727]: 2019-12-31T12:39:21.477681Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is ... a future release.
Dec 31 21:39:21 my80src mysqld[1727]: 2019-12-31T12:39:21.477759Z 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.17) starting as process 1727
Dec 31 21:39:21 my80src systemd[1]: Started MySQL Server.
Dec 31 21:39:21 my80src mysqld[1727]: 2019-12-31T12:39:21.872366Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
Dec 31 21:39:21 my80src mysqld[1727]: 2019-12-31T12:39:21.901234Z 0 [System] [MY-010931] [Server] /usr/local/mysql/bin/mysqld: ready for connections. Version: '8.0.17'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution.
Dec 31 21:39:22 my80src mysqld[1727]: 2019-12-31T12:39:22.013422Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/tmp/mysqlx.sock' bind-address: '::' port: 33060
Hint: Some lines were ellipsized, use -l to show in full.

위와 같은 결과가 나옵니다.

 

mysql 에러로그(정보로그) 시스템과 통합되어 /var/log/message 쌓이게 됩니다. 파일을 열어보면 초기 root암호가 나옵니다. 아래와 같은 내용과 비슷하게 출력이 됩니다.

[Note] A temporary password is generated for root@localhost: ioPDPo%<8,;H

 

로그인을 시도합니다.

shell> mysql -u root -p
password

 

암호를 입력합니다.

 

로그인 반드시 root 암호를 변경해 줍니다. 처음에 제공된 암호는 만료가 되는 암호이므로 반드시 변경하셔야 합니다.

참고로 강력한 암호(숫자.영문.영문대문자.특수문자등이) 설정되지 않으면 다음과 같은 에러가 발생합니다. 

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY ‘admin1234'; 
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

 

mysql> alter user 'root'@'localhost' identified by '!MyNewPass4';

초기 암호 정책에 따라 대소문자,특수문자,숫자가 반드시 석여야 합니다.

이렇게 하면 root 암호가 변경됩니다. 

 

MySQL테스트를 해봅니다.

mysql > show databases;
performance_schema
mysql
tmp
information_schema
mysql>

 

MySQL 서버 중지방법은 다음과 같습니다.

shell > systemctl stop mysqld.service

 

원격 설정

centos, rhel 기본적으로 방화벽이 설정되어 있습니다. 그래서 Mysql 접속할 있도록 port 오픈해 주어야 접속이 가능합니다. 기본 포트는 3306입니다. 

 

다음과 같이 방화벽 포트를 오픈해 줍니다. 

 

* centos6 
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT  

* centos7 
firewall-cmd --permanent --zone=dmz --add-service=mysql
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --list-ports

이래야 원격에서 mysql 접속할 있습니다. 

 

Designed by JB FACTORY