[Linux]Ubuntu20.04 + Mysql8.0.25 수동설치

sally·2021년 7월 5일
3

Linux랑 친해지기

목록 보기
2/3
post-thumbnail

mysql 설치 링크 참조

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

설명이 자세히 나와있다

0. 설치되어야 하는 패키지

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

1) CMake

2) GNU make 3.75 이상

3) GCC 7.1 이상

4) C++ 또는 C99 컴파일러

5) SSL library : libssl-dev 로 다운받아야 함

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

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

8) Perl

툴 들이 이미 설치되어 있는지는 아래 명령어로 확인 가능하다.

$ dpkg -l | grep [이름]

확인해본 후 없는것들만 install 해주었다.
설치하기 전에 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

1. MySQL 다운로드 (경로: /usr/local)

mysql 다운로드 링크

https://dev.mysql.com/downloads/mysql/

다운로드 링크를 볼수있다.
수동설치이기 때문에 소스코드를 눌러서 원하는 걸 찾으면 된다.
나는 가장 최신 버전인 8.0.25를 다운 받았다.

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

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

2.설치

$ cd /usr/local/mysql-8.0.25
$ 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

error (1)

에러발생!!

CMake Error at CMakeLists.txt:382 (MESSAGE) :
Please do not build in-source. Out-of source builds are highly recommended: ~~~

기존의 이 부분을

$ cd /usr/local/mysql-8.0.25
$ cmake \

아래와 같이 바꿔주어야 한다

$ cd mysql-8.0.25
$ rm -f CMakeCache.txt
$ mkdir dir_mysql(원하는 이름으로)
$ cd dir_mysql
$ cmake \
  .. \

소스 디렉토리 내에 build 를 위한 디렉토리를 추가 생성하고
(옵션에서 생성하는 디렉토리(dir_mysql) – “디렉토리 이름은 자유롭게 가능”)
그 하단에서 작업을 진행하도록 “(강제)권고” 되어 버렸다고 한다.

아래와 같이 명령어를 바꾸고 실행시켜 준다.
cmake \ 뒤에 .. \가 붙는게 중요!

$ cd /usr/local/mysql-8.0.25
$ rm -f CMakeCache.txt
$ mkdir dir_mysql(원하는 이름으로)
$ cd dir_mysql
$ 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

error (2)
이번엔 무슨 에러일까 👏

CMake Error at cmake/boost.cmake:232 (MESSAGE):
you can try downloading
~~

boost를 다운 받으라고 하니까.. 다운을 받자!

mysql 5.7.x 버전 설치 시 boost 라이브러리를 참조하기 때문에 컴파일 과정에서 설치를 해주어야 한다.

근데 나는 에러 메시지에서 출력된 링크로 다운을 시도했는데, 자꾸 forbidden 403 에러가 떠서 구글링해서 다른 링크로 다운을 받았다.

$ cd /usr/local/src/
$ sudo wget https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.tar.gz
$ sudo tar xvfz boost_1_73_0.tar.gz

설치 한 후에 DWITH_BOOST 경로를

-DWITH_BOOST=/usr/local/mysql/boost 

boost 라이브러리가 설치된 경로로 바꿔준 후에 실행하면 된다.

-DWITH_BOOST=/usr/local/src/boost_1_73_0

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

make는 시간이 정말 엄청나게 오래 걸린다.
밥먹고 왔는데도 설치중이였다... 💥

error (3)

c++: fatal error : 죽었음 signal terminated program cc1plus

메모리 부족으로 인해 발생하는 에러라고 하는데
ubuntu 용량 40기가로 설정했는데 이러한 에러가 발생했다
아 근데 저 죽었음 너무 얄밉다.. 한대 팰수도 없고..🔨

구글링 해보니 swap file 용량을 늘려보라는 조언?을보고
swap file 용량을 늘려보았다.
Ubuntu 20.04 버전은 default로 2GB의 swap이 잡혀있다.

먼저 swap을 비활성화 시킨다

$ sudo swapoff -v /swapfile

fallocate 명령어로 메모리 크기를 조정하고, 권한을 설정한 다음 mkswap 명령어로 swapfile을 만들고 swapon으로 활성화 시킨다.

swap을 8GB로 설정

$ sudo fallocate -l 8G /swapfile

권한 설정

$ sudo chmod 600 /swapfile

swap file 만들기

$ sudo mkswap /swapfile

swap file 활성화

$ sudo swapon /swapfile

용량 늘려서 install까지 성공했다.

3.MySQL DB 초기화

(1)그룹 지정

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

그룹과 유저를 만들어야 한다.

-r : system account

-g : 그룹 지정

-s: user의 로그인 shell

(2) 디렉토리 생성

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

편한 이름의 디렉토리를 만들어 준다.

(3)권한주기

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

chown: 파일의 소유자를 변경

-R : 하위 디렉토리까지 소유권 할당

chmod : 사용권한을 변경

(4)기본 DB 생성

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

error (4)

COLLATION 'utf8mb4_0900_ai_ci' is not valid for CHARACTER SET 'utf8'

왜 깨지는 걸까...?
cmake에서 chracterset을 다 설정해주었다고 생각했는데 알다가도 모르겠다.
그래서 my.cnf 파일에 다시 한번 설정해주었다.

MySQL 설정 파일인 my.cnf 파일을 연다.

$ vi /etc/mysql/my.cnf

파일의 마지막 부분에 다음 내용을 덧붙여 준다.

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

다시 실행해보면

임시비밀번호가 나온다.
이 비밀번호는 나중에 써야하니 잘 기억해두자!
root@localhost : hYyR#f#D1ZCb

4.서버 시작/ 사용해보기

(1) mysql서버 실행 및 확인

서버를 실행하고 아래 명령어로 실행이 잘 되는지 확인한다.

$ bin/mysqld_safe --user=mysql &
$ ps -ef | grep mysqld


잘된다!

아래 명령어로 mysql로 전환한다.

$ bin/mysql -u root -p

명령어를 치면 비밀번호를 입력하게 되는데 아까 받은 초기 비밀번호를 입력하면 된다.

(2) 비밀번호 할당하기

> alter user 'root'@'localhost' identified by '원하는 비밀번호';

ctrl+Z로 mysql 종료하기

(3) 서버 종료

이때 비밀번호가 잘 변경됬는지 확인하면 된다.

5.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로 다시 시작한 뒤 보면 서버시작 안 해도 서버 시작이 되어있음을 확인할 수 있다.

$ reboot 
$ ps -ef | grep mysqld

6.환경설정

환경설정을 통해 옵션을 정해줄 수 있다.

$ sudo su
$ vi /etc/my.cnf

my.cnf파일을 만들어주고

port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
tmpdir = /tmp

원하는 포트번호, address를 추가해준다.
나는 나중에 필요하면 해야겠다.

+mysql 명령어

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

참조블로그
https://happylulurara.tistory.com/139
https://salix97.tistory.com/141
https://jirak.net/wp/cmake-error-for-mysql-8-0-15-please-do-not-build-in-source/
https://kibua20.tistory.com/40
https://calvinjmkim.tistory.com/23

profile
Believe you can, then you will✨

0개의 댓글