mysql 설치 링크 참조
https://dev.mysql.com/doc/refman/8.0/en/installing-source-distribution.html
설명이 자세히 나와있다
공식문서에서 설치하라고 말하는 의존성 패키지들
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
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
$ 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까지 성공했다.
(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
(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) 서버 종료
이때 비밀번호가 잘 변경됬는지 확인하면 된다.
서비스를 등록하면 서버가 실행되었을 때, 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
환경설정을 통해 옵션을 정해줄 수 있다.
$ 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