Nuke Olaf - Log Store

Ubuntu 18.04 + Apache 2.4.41 + Mysql 8.0.19 수동설치하기 본문

Language/[PHP]

Ubuntu 18.04 + Apache 2.4.41 + Mysql 8.0.19 수동설치하기

NukeOlaf 2020. 1. 20. 23:12

Ubuntu 18.04 OS 위에 Apache 2.4.41 컴파일 설치를 완료했다. PHP 를 설치하기 전에 Mysql 데이터베이스 를 설치하려고 한다.

자세한 내용은 표준 소스 배포를 사용하여 MySQL 설치 링크 참조 : https://dev.mysql.com/doc/refman/8.0/en/installing-source-distribution.html

 

 

0. MySQL 어떤 버전을 깔아야할까 고민해보기

MySQL 은 1995년에 발표된 RDBMS 이다. 현재 시점으로는 2017년 즈음 릴리즈된 8.0이 최신버전이라고 한다. MySQL 5.6 이나 5.7 같은것을 보다가 갑자기 8.0??? 이라는 얘기가 나와서 당황했는데, MySQL 5.7 다음이 바로 8.0이라고 부르는 듯 하다. 5.8이 아니라 8.0으로 바로 넘어갔다는 것이 뭔가 내용이 많이 달라졌다는 것을 시사한다는 의견들을 보았다. 8.0버전이 5.7버전보다 3배 가까이 빠르다는 벤치마킹을 확인할 수 있었다.

처음배우는 입장이니, 나온지 오래돼서 자료가 더 많을것 같은 5.7버전을 설치하는게 더 좋을지 고민했다. 근데 그냥 최신버전으로 깔고 문제가 생기면 버전을 낮추면서 삽질하며 배우는것도 있겠지라는 생각이 들었다. 어차피 지금 최신 버전도 나중에는 구버전이 될테니... 현재 확인할 수 있는 가장 최신 버전인 MySQL Community Server 8.0.19 를 설치하기로 결정했다.

 

1. MySQL 컴파일 설치를 위한 패키지를 설치한다.

MySQL 컴파일 설치에 관한 가이드는 공식홈페이지에 잘 설명되어있다.

링크는 MySQL 8.0 Reference Manual 로, 다른 버전에 대한 문서를 원한다면 해당 버전 매뉴얼을 보면 된다.

공식 문서에서는 컴파일 설치를 위해 필요한 툴들을 명시해준다 : https://dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html

 

*** 툴들이 이미 설치되어있는지는 아래의 명령어로 확인해준다. (apt-get 으로 설치한것만 확인 가능)

$ dpkg -l | grep [이름]

 

<공식문서에서 설치하라고 말하는 의존성 패키지들>

(1) CMake 

(2) GNU make 3.75 이상 : apt-get 으로 make 를 이미 설치해두었음

(3) GCC 5.3 이상 : 확인해 본 결과, 7.4 버전이 설치되어있음

(4) C++ 또는 C99 컴파일러 : MySQL C API 가 필요하다고 하는데, GCC 와 G++ 이 이미 설치되어 있음

(5) SSL library : OpenSSL 을 사용한다고 하는데, 설치되어 있지않음, libssl-dev 로 다운받아야 함

(6) Boost C++ libraries : libboost-all-dev 로 다운받아야 함

(7) ncurses library : apt-get install libncurses5-dev libncursesw5-dev 로 다운받아야함

(8) Perl : 이미 설치되어있음

 

아래의 명령어로 필요한 패키지들을 설치한다. 설치하기 전에 apt-get 을 update 해주도록 한다.

$ apt-get update
$ apt-get install cmake
$ apt-get install libssl-dev
$ apt-get install libboost-all-dev
$ apt-get install libncurses5-dev libncursesw5-dev

 

 

2. MySQL Community Server 8.0.19 tar.gz 다운로드

MySQL 다운로드 링크는 여기에서 확인할 수 있다 : https://dev.mysql.com/downloads/mysql/

Select Operating System : Source Code

Select OS Version : Generic Linux (Architecture Independent)

를 선택하면 MySQL 의 tar.gz 파일을 다운로드할 수 있는 링크를 볼 수 있다.

다운로드 링크 : https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19.tar.gz

wget 명령어로 mysql 을 다운로드 받고, tar xvfz 로 압축을 풀어준다.

$ cd /usr/local
$ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19.tar.gz
$ tar xvfz mysql-8.0.19.tar.gz

 

ls -l 명령어로 /usr/local 의 파일들을 확인해본 결과, 잘 설치되고 압축이 풀린것을 확인할 수 있다.

ls 는 list 의 약어로, 현재 디렉토리내에 있는 파일/디렉토리들을 볼 수 있는 명령어이다.
-l 옵션을 붙이면 파일/디렉토리에 관한 자세한 내용들을 볼 수 있다.

$ ls -l

 

 

3. MySQL 설치 (cmake, make, make install)

공식문서에서 Cmake option 을 확인할 수 있다. 링크

cmake 명령어를 통해 설치 옵션을 부여하고, make 명령어로 빌드한 뒤, make install 로 설치를 진행한다.

$ cd /usr/local/mysql-8.0.19
$ cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DSYSCONFDIR=/etc \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/mysql/boost 
$ make
$ make test
$ make install

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql : 설치 디렉토리 설정
-DMYSQL_DATADIR=/usr/local/mysql/data : MySQL data directory 설정
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock : Unix socket file 경로 설정, 서버가 소켓연결을 listen 할때 사용
-DMYSQL_TCP_PORT=3306 : 서버가 TCP/IP 연결을 청취하는 포트 번호. default 는 3306
-DMYSQL_USER=mysql  
-DDEFAULT_CHARSET=utf8 : 서버 문자 세트. MySQL 은 기본적으로 utf8mb4 문자세트를 사용한다.
-DDEFAULT_COLLATION=utf8_general_ci : 서버 데이터 정렬
-DSYSCONFDIR=/etc : my.cnf 옵션 파일의 디렉토리 설정
-DWITH_EXTRA_CHARSETS=all : 추가로 지원할 언어 설정
이 아래로는 데이터베이스에서 데이터를 작성, 읽기, 업데이트하는데 사용하는 소프트웨어 모듈. 
-DWITH_INNOBASE_STORAGE_ENGINE=1 :
-DWITH_MYISAM_STORAGE_ENGINE=1 : 
-DWITH_ARCHIVE_STORAGE_ENGINE=1 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1  
-DWITH_MEMORY_STORAGE_ENGINE=1 
-DWITH_READLINE=1 : readline 지원여부 
-DWITH_BOOST=/usr/local/mysql/boost : boost 위치 경로
-DENABLED_LOCAL_INFILE=1 : SQL 파일을 로드하게 해주는 기능을 켠다. (활성화1, 비활성화 0 또는 명령을 주지 않음) 
-DENABLE_DOWNLOADS=1 
-DDOWNLOAD_BOOST=1 

 

error : CMake Error at CMakeLists.txt:352 (MESSAGE): Please do not build in-source

cmake 를 하려고 하는데 이런 에러메시지가 출력되었다.

소스 디렉토리 내에 build 를 위한 디렉토리를 추가 생성하고
(옵션에서 생성하는 디렉토리(olafmysql01) – “디렉토리 이름은 자유롭게 가능”)
그 하단에서 작업을 진행하도록 권고하기 때문에 이런 오류가 뜬것이라고 한다.

참고 : https://jirak.net/wp/cmake-error-for-mysql-8-0-15-please-do-not-build-in-source/

cd mysql-8.0.19
cmake \
-DCMAKE_INSTALL_PREFIX…. (이하 생략)

cd mysql-8.0.19
rm -f CMakeCache.txt
mkdir olafmysql01
cd choilha01
cmake \
.. \
-DCMAKE_INSTALL_PREFIX…. (이하 생략)

위에서 아래 방식으로 바꾸면 해결된다고 한다.
cmake 뒤에 ".." 을 꼭 붙여줘야 하는게 포인트.

camke 로 빌드가 완료되면 아래와 같은 메시지가 출력된다. 

make 와 make install 명령어를 입력하면 설치가 완료된다. make 는 끝나는데 시간이 한참걸린다...

 

 

4. MySQL 데이터베이스 초기화 

공식문서 링크(데이터 디렉토리 초기화 절차) : https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization.html

공식문서에 의하면, MySQL 을 설치한 후, mysql 시스템 데이터베이스의 테이블을 포함하여 데이터 디렉토리를 초기화해야한다.

MySQL 설치 후 수행해야 할 자세한 작업에 대해서는 공식 사이트에 설명되어 있다 링크

(1) mysql 그룹과 유저를 생성해준다.

시스템에 mysqld 실행에 필요한 사용자 그룹과 유저가 없는경우 만들어주어야 한다.

$ groupadd mysql
$ useradd -r -g mysql -s /bin/false mysql

groupadd mysql 은 mysql 이라는 그룹을 만들어서 관리하겠다는 뜻이다.
useradd 는 새로운 사용자를 추가하겠다는 뜻이다. -r 옵션은 system account를 만들겠다는 소리.
-g 옵션은 어떤 그룹에 넣어놓고 관리할것인지, -s 옵션은 유저의 로그인 shell 을 지정하는 것.
마지막에 기술한 mysql 이라는 이름으로 새로운 사용자를 추가하겠다는 뜻이다.

groups 명령을 통해 만들어진 그룹들을 확인할 수 있고,
cat /etc/passwd 를 통해 유저 전체목록을 확인할 수 있다.

 

(2) /usr/local/mysql 디렉토리로 이동한다음, mysql-files 디렉토리를 만들어준다.
/usr/local/mysql 디렉토리는 위에서 MySQL 을 cmake 로 설치할때 만들어진 디렉토리이다.

$ cd /usr/local/mysql
$ mkdir mysql-files

 

(3) 디렉토리 사용자 및 그룹 소유권을 mysql 사용자 및 mysql 그룹에 부여하고 디렉토리 권한을 적절하게 설정한다.

mysql-files 의 권한을 수정해주고, MySQL 을 설치한 디렉토리도 mysql 계정으로 권한을 수정해준다.

$ chown -R mysql:mysql /usr/local/mysql
$ chown mysql:mysql mysql-files
$ chmod 750 mysql-files

chown 명령어는 change own 의 축약어로, 파일의 소유권자를 변경하는 명령어이다
chown {소유권자}:{그룹식별자} {소유권을 변경하고 싶은 파일명} 형태로 명령어를 실행한다.
즉, mysql-files 라는 디렉토리의 소유권을 mysql 이라는 그룹의 mysql 이라는 유저에게 할당하겠다는 뜻.
chown 뒤에 -R 옵션을 붙여 하위 디렉토리까지 모든 소유권을 할당할 수 있다.
ls -al 명령어로 소유권을 확인할 수 있다.

chmod 명령어는 change mode 의 축약어로, 대상 파일과 디렉토리의 사용권한을 변경할 때 사용한다.
chmod [옵션] [모드] [파일] 형태로 명령어를 실행한다. 750이라는 뜻은
- 소유자권한 : 읽기, 쓰기, 실행
- 그룹권한 : 읽기, 실행
- 전체권한 : 없음
라는 의미로 해석된다. 

chown 으로 mysql 디렉토리의 소유권을 mysql 에게 주었다.

 

chmod 로 mysql-files 의 사용권한을 변경하였다.

 

(4) 기본 데이터베이스를 생성한다. (Data Directory Initialization)

서버를 사용하여 사용자가 서버에 연결하는 방법을 결정하는 초기 MySQL 권한 부여 테이블이 포함된 mysql schema 를 포함하여 데이터 디렉토리를 초기화한다. mysql schema 는 시스템 스키마로서, MySQL 서버가 실행될 때 필요한 정보를 저장하는 테이블이 포함되어 있다. mysql_install_db 라는 명령어로 초기화 할 수 있지만, 해당 명령어는 deprecated 되었으므로, mysqld --initialize 명령어를 사용하는 것이 좋다.

$ bin/mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

 

Data Directory Initialization 이 실행되는 동안 Server 의 동작
링크 : https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html#data-directory-initialization-server-actions

(1) data 디렉토리가 있는지 확인한다.

(2) data 디렉토리에 mysql 시스템 스키마를 생성한다.

(3) InnoDB 테이블을 관리하는데 필요한 system tablespace 와 관련 데이터 구조를 초기화 한다.

(4) superuser 계정 및 reserved 계정을 만든다.

(5) HELP 문에 사용된 server-side help table 을 채운다.

(6) init-file 시스템 변수가 SQL statements 의 파일 이름을 지정하도록 제공된 경우, 서버는 파일의 명령문을 실행한다.

(7) 서버가 종료된다.

 

*** 만약 보안 연결을 자동으로 지원하려면 mysql_ssl_rsa_setup 유틸리티를 사용하여 SSL 및 RSA 파일을 작성할 수 있다. (나는 안함)

If you want to deploy the server with automatic support for secure connections, use the mysql_ssl_rsa_setup utility to create default SSL and RSA files:

$ bin/mysql_ssl_rsa_setup

 

데이터 디렉토리를 초기화했더니 이런 문구가 출력되었다. 맨 아래의 temporary password 는 임시비밀번호이다. mysql 서버에 연결할 때 필요하므로 기억해두자. (서버에 연결하고 나서 바꿀것이다.)

hmR8h>1wBzYq

 

 

5. root 암호 초기화

이제 서버를 시작하고, 'root'@'localhost' 계정에 새로운 비밀번호를 설정해줘야 한다.

* 초기화 후 루트 비밀번호 할당 : https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html#data-directory-initialization-password-assignment

* 서버를 시작하는 방법 : https://dev.mysql.com/doc/refman/8.0/en/starting-server.html

 

(1) mysqld_safe --user=mysql & 명령어로 mysql 서버를 실행해준다

bin/mysqld_safe --user=mysql & 명령어를 실행 (&는 백그라운드에서 프로세스를 실행하겠다는 뜻)
mysqld_safe 는 mysql 을 실행하는 명령이다. https://dev.mysql.com/doc/refman/8.0/en/mysqld-safe.html

$ bin/mysqld_safe --user=mysql &

" mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data " 라는 문구가 출력된다.

 

ps -ef | grep mysqld 명령어로 MySQL 이 실행되고 있는지 확인할 수 있다.

$ ps -ef | grep mysqld

 

mysql.server 파일을 /etc/init.d 디렉토리에 복사해준다.

공홈에서는 이 과정은 선택적이라고 한다. 일단은 하지 않았음

cp support-files/mysql.server /etc/init.d/mysql.server

 

(2) mysql -u root -p 명령어로 서버에 연결해준다

$ bin/mysql -u root -p

그런데, 나의 경우 아래와 같은 메시지가 출력되었다.

mysql 앞에 bin/ 을 붙여야 제대로 실행되는 모양이다. 환경변수를 설정하면 꼭 /bin 디렉토리를 붙이지 않고 이름만으로 실행할 수 있다고 하는데, 거기에 대해서는 좀더 찾아보아야겠다.

data directory 를 bin/mysqld --initialize 로 초기화할때 생성되었던 임시 비밀번호를 입력하자.
비밀번호를 제대로 입력하면 아래와 같은 화면이 출력된다.

 

그다음, ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password'; 명령어로 root 비밀번호를 새로 할당한다.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

 

ALTER USER 명령어에 대한 자세한 설명 : https://dev.mysql.com/doc/refman/8.0/en/alter-user.html

 

mysql 서버를 종료하는 방법은 다음과 같다

$ bin/mysqladmin -u root -p shutdown

 

 

6. MySQL 서비스 등록

MySQL 서비스를 등록해놓으면 서버가 실행되었을 때, mysql 이 자동으로 실행된다.

mysqld 파일을 복사한다.

$ sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

mysqld 파일을 열어서 basedir 와 datadir 를 설정한다.

$ sudo vi /etc/init.d/mysqld

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

mysqld 서비스를 등록한다.

update-rc.d mysqld defaults

 

#reboot 후에 ps -ef | grep mysqld 명령어로 실행중인 프로세스를 확인하면 아래와 같이
mysql 이 실행되어있는 것을 확인할 수 있다.

 

7. 환경설정

MySQL 의 옵션파일은 프로그램을 실행할때마다 명령줄에 옵션을 입력할 필요가 없도록 일반적으로 사용되는 옵션을 지정하는 편리한 방법이다. 프로그램이 옵션파일을 읽는지 여부를 확인하기 위해서는 mysqld --verbose --help 를 사용할 수 있다. 옵션파일은 my.cnf 라는 이름의 텍스트파일로 되어있다. cnf 란 config 의 줄임말이다. 리눅스 운영체제에서 my.cnf 파일은 default 로 /etc/my.cnf 경로에서 읽어온다. CMake 로 MySQL 을 빌드할때, SYSCONFDIR 를 설정해주었다면 해당 경로에서 my.cnf 파일을 읽어온다. 

옵션파일에 대한 자세한 설명은 링크 참조 : https://dev.mysql.com/doc/refman/8.0/en/option-files.html

 

etc/my.cnf 경로로 my.cnf 파일을 만들어주고, 환경설정을 해줬다. 더 세세하게 옵션을 줄 수 있는데 일단은 간단하게 저렇게만 해뒀다.

vi /etc/my.cnf

[mysqld]
bind-address=0.0.0.0
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

환경설정을 완료한후, mysql 을 재시작해주면, 아래와 같이 port 옵션이 하나 더 생긴것을 알 수 있다.

 

 

/bin/mysqld --verbose --help 명령어를 사용하면 다음과 같이 optionfile 을 읽을 수 있다. (더보기 클릭)

더보기

root@ubuntu:/usr/local/mysql# bin/mysqld --verbose --help
mysqld  Ver 8.0.19 for Linux on x86_64 (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.

Starts the MySQL database server.

Usage: mysqld [OPTIONS]

Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 
The following groups are read: mysqld server mysqld-8.0
The following options may be given as the first argument:
--print-defaults        Print the program argument list and exit.
--no-defaults           Don't read default options from any option file,
                        except for login file.
--defaults-file=#       Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.
--defaults-group-suffix=#
                        Also read groups with concat(group, suffix)
--login-path=#          Read this path from the login file.

 

*** 아래의 명령어로 MySQL Server 를 시작하고 종료할 수 있다.

$ service mysql start
$ service mysql stop
$ service mysql restart //서버를 중지했다가 다시 시작하는거
$ service mysql status //서버 상태 확인. 나가려면 q 누르기

 

참고사이트>>>

https://hmjkor.tistory.com/325

https://idchowto.com/?p=47122

http://blog.naver.com/PostView.nhn?blogId=kkhkykkk2&logNo=220659787424

http://histlinux.egloos.com/v/1220825

https://bluexmas.tistory.com/869

https://bluexmas.tistory.com/631

https://victorydntmd.tistory.com/218

https://dev.mysql.com/doc/refman/8.0/en/installing-source-distribution.html

http://m.todayhumor.co.kr/view.php?table=total&no=7450281

MySQL 쓰면서 하지 말아야할 것 17가지

 

 

Comments