⚠️ 2021.02.12에 작성된 글입니다 ⚠️
(tip)
- MySQL 컴파일 설치는 MySQL 홈페이지에 상세히 나와있다.
- MySQL을 컴파일 및 설치하는 단계에서 시간이 매우 많이 걸린다. 대략 3시간이 걸렸다. 컴퓨터 스펙과 가상머신의 설정에 따라 차이가 있겠지만, 적어도 컴파일에만 1시간 이상 걸린다고 생각해야 한다.
- MySQL 컴파일 중 HDD(하드디스크) 또는 메모리 용량이 부족해 작업이 중단될 수 있다. 가상머신의 설정이 우분투의 권장 세팅인 HDD 20GB 및 RAM(memory) 2GB라면 넉넉하게 HDD 30GB 및 RAM 4GB로 수정한 뒤 진행하는 것을 추천한다.
작업 흐름
의존성 패키지 설치
↓
MySQL 설치
설치환경 : Ubuntu 20.04 OS
필수 패키지 설치하기
필수 패키지
필수로 설치해야 할 것은 다음과 같다. 관련 MySQL 페이지
1. CMmake : 플랫폼에서 프레임워크 생성
2. make : GNU make 3.75 이상
3. GCC : MySQL8.0 소스코드가 허용하는 C++14를 사용하기 위한 컴파일러. 최소 GCC 5.3.1.
4. C++ or C99 compiler : MySQL C API가 필요로 함
5. SSL library : 암호화 관련 작업을 위해 필요.
6. Boost C++ libraries : MySQL 구축을 위해 필요. 특정 소스 배포에 다른 버전이 필요한 경우가 있음. 이때는 필요한 Boost 버전을 알리는 메시지가 출력됨.
7. ncurses library
8. Perl : test script를 실행하기 위해 필요. 유닉스 계열 OS 대부분에 포함되어있음
설치된 패키지 목록 확인
패키지 설치 전 이미 존재한 패키지가 있는지 확인한다.
// 전체 목록 보기
dpkg --get-selections // 패키지 목록 확인하기
// 버전 확인하기
// 패키지명 --version
gcc --version
perl --version
...
패키지를 설치한다.
$ apt-get update // apt 패키지 업데이트
// 권한 관련 에러 발생시 앞에 sudo 붙여 해결
$ apt-get install cmake // CMmake
$ apt-get install make // GNU make
$ apt-get install gcc // GCC
$ apt-get install g++ // C++ complie
$ apt-get install libssl-dev // SSL library
$ apt-get install libboost-all-dev // Boost C++ libraries
$ apt-get install libncurses6-dev libncursesw6-dev // ncurses library
// apt-get install gcc g++ 처럼 여러 패키지를 한번에 설치하는 명령어를 할 수 있다.
// perl
$ sudo su
# wget http://www.cpan.org/src/5.0/perl-5.32.1.tar.gz // 다운로드
# tar xvfz perl-5.32.1.tar.gz // 압축 풀기
# cd perl-5.32.1 // perl-5.32.1 폴더로 이동
# ./configure --perfix=/usr/local/perl
# make && make install // 컴파일 및 설치
MySQL 설치하기
원하는 버전을 선택한다. 최신 버전 확인하기 (21.02.12 기준 MySQL 8.0.23)
$ sudo su // root 계정으로 변경
# cd /usr/local // 설치할 파일로 이동
# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.23.tar.gz // MySQL 압축파일 다운로드
# tar xvfz mysql-8.0.23.tar.gz // 압축 해제
# cd mysql-8.0.23 // 압축 해제된 파일로 이동
# mkdir build001 // 빌드 파일 생성하기
# cd build001 // 빌드 파일로 이동
// 설치 설정 (configure≒cmake)
# 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 // build001 파일에서 MySQL 컴파일. 시간이 상당히 걸린다.
# make test && make install // 컴파일 결과 테스트 & 설치파일 실행
오류 : line 03
아무 이상 없던 wget 명령어가 다음과 같이 갑자기 오류 발생한 적이 있다.
wget: unable to resolve host address 'dev.mysql.com'
우선 네트워크 연결 여부를 확인하는게 좋다.
여러 설정파일을 변경하면서 삽질하느라 시간을 허비하는 불상사가 생길 수도 있다.
오류 : line 10
Could NOT find Git (missing: GIT_EXECUTABLE)
git을 설치하면 해결된다.
# apt install git
오류 : line 23
collect2: fatal error: Id terminated with signal 9 [Killed] compilation terminated.
구글링 해보아도 해당 오류 메시지의 의미를 정확하게 찾진 못했다.
다만 한 사이트의 글을 보고 가상 머신의 시스템 설정에서 메모리를 2GB에서 3GB로 올려해결하였다. (4GB로 올리려 했지만 노트북의 한계로 3GB로 설정)
메모리 용량을 수정한 뒤 가상머신을 재부팅하면 수정된 메모리 용량이 적용되고 make를 하면 해당 부분에 에러가 발생하지 않는다.
MySQL 기본 설정하기
// mysql 그룹·유저 생성
$ sudo su
# groupadd mysql
# useradd -r -g mysql -s /bin/false mysql
// mysql-files 디렉토리 생성
# cd /usr/local/mysql
# mkdir mysql-files
// 권한 설정 (chown(change owner): 파일 소유권자 변경 / chmod(change mode): 파일·디렉토리 사용권한 변경)
# chown -R mysql:mysql /usr/local/mysql/data
# chown mysql:mysql mysql-files
# chmod 750 mysql-files
// 기본 DB 설정
# bin/mysqld --initialize --user=mysql /
--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
line 16~17 : 기본 DB 설정
노란 부분에 보이는 것처럼 임시 비밀번호가 발급된다. 서버 연결할 때마다 입력해주어야 한다.
따라서 비밀번호를 따로 설정해주자.
비밀번호 초기화하기
작업 흐름
MySQL 실행
↓
서버 연결
↓
비밀번호 변경
↓
서버 종료
MySQL 실행
// mysql 실행
# bin/mysqld_safe --user=mysql &
서버 연결
// mysql 서버 연결
# bin/mysql -u root -p
비밀번호를 입력하라고 한다. 이때 기본 DB설정 후 발급받은 임시 비밀번호를 입력한다.
올바른 비밀번호를 입력하면 다음과 같이 환영 문구가 나온다. 또한 #에서 mysql>로 바뀐다.
비밀번호 변경
코드의 '원하는 비밀번호'(캡처의 'rootpassword') 부분에 원하는 비밀번호를 입력하면 된다.
// 비밀번호 초기화하기
mysql> ALTER USER 'root'@'localhost' INDENTIFIED BY '원하는 비밀번호';
// MySQL monitor 끝내기
mysql> exit;
서버 종료
이후 서버를 종료하여 비밀번호 초기화하는 과정을 마무리한다.
Enter password에는 변경한 비밀번호를 입력하면 된다.
// 서버 종료하기
# bin/mysqladmin -u root -p shutdown
alias 설정하기
추가로 Apache 설치했을 때처럼 mysql의 경로를 alias로 설정해주면 편리하다.
// alias 설정 전
$ /usr/local/mysql/bin/mysql --version
//alias 설정 후
$ mysql --version
이런 식으로 간편하게 사용할 수 있다.
~/.bashrc 파일에 mysql이란 별명을 추가해 등록하면 된다.
$ vi ~/.bashrc // .bashrc 파일 열기
.bashrc란 파일창이 새로 열리고 알파벳 j(↓)와 l(→)키로 파일 맨 끝에 간 뒤 a를 눌러 아래처럼 alias를 추가한다.
alias mysql="/usr/local/mysql/bin/mysql"
그후 esc 키나 ctrl+C를 입력해 편집 중인 상태에서 빠져나가고 이후 :wq를 입력해 '저장 후 종료' 작업을 한다. 커멘드창으로 돌아오면, 아래의 명령을 통해 변경사항을 반영한다.
$ source ~/.bashrc
이후 아무 곳에서나 mysql을 입력하면 /usr/local/mysql/bin/mysql을 입력한 것과 같게 된다.
참고자료
MySQL :: MySQL 8.0 Reference Manual :: 2.9 Installing MySQL from Source
[Linux] 설치된 패키지 목록 확인하기 : 네이버 블로그 (naver.com)
정윤재의 정리노트 :: [ PERL ] Perl 소스 설치 (리눅스) (tistory.com)
[따라하기][17.4.9]리눅스에 펄 소스 설치하기 :: RACOONABLE (tistory.com)
linux - "In-source builds are not allowed" in cmake - Stack Overflow
Ubuntu 18.04 + Apache 2.4.41 + Mysql 8.0.19 수동설치하기 (tistory.com)
APM 컴파일 설치하기 - MySQL | sangminlog (sangm1n.github.io)
[MySQL]MySQL 우분투 20.04 설치 (velog.io)
VMware ubuntu APM소스설치 (velog.io)
MySQL 설치(리눅스) - 소스 컴파일 : 네이버 블로그 (naver.com)
5. MySQL 설치(리눅스) - 소스 컴파일 (tistory.com)
CentOS8 - MySQL8 설치 - Source 컴파일 - dnf 패키지 설치 - CMake 소스 컴파일 | Hoing
MySQL 디버깅을 위한 Docker 안에서 MySQL Source 설치하기 | MINSQL
공부하며 정리한 글입니다. 내용에 대한 피드백은 언제나 환영입니다.