이번에는 MySQL 소스설치를 해보자!
가상머신, 우분투 설치 및 소스설치에 대한 개념은 이전 포스팅을 참고하면 된다.
MYSQL 소스설치
1 ) MySQL 컴파일 설치를 위한 패키지 설치
$ sudo su
$ cd /usr/local
$ 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 압축파일 설치 및 압축 해제(8.0.19 버전 설치)
경로 : /usr/local
$ 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
3 ) MySQL 설치
$ cd 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
[ Issue 1 ]
위와 같이 cmake를 하던 와중 다음과 같은 에러를 마주치게 된다.
또 다시 구글링 .. 을 해보았더니 소스 디렉토리 내에 build를 위한 디렉터리를 추가 생성하고 그 하단에서 작업을 진행하도록 권고(강제) 하기 때문에 이런 오류가 뜬 것이라고 한다. 그래서 디렉토리를 만들어주고 그 안에서 cmake 명령어를 사용하였다
$ mkdir [아무디렉토리이름]
$ cd [아무디렉토리이름]
https://jirak.net/wp/cmake-error-for-mysql-8-0-15-please-do-not-build-in-source/
[ Issue 2 ]
디렉토리를 만들어주고 cmake를 해주었는데 또 에러를 마주친다.
잠시 살펴보면 ,, 5번째줄에 MySQL currently requires boost_1_70_0 라는 문구를 볼 수 있었다.
이는 MySQL 설치 시 boost 라이브러리를 참조하기 때문에 이부분을 컴파일 과정에서 추가해주어야 한다고 한다!
그래서 다음과 같이 boost_1_70_0 압축파일을 설치하고 해제해주었고
$ sudo wget https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.tar.gz
$ sudo tar xvfz boost_1_70_0.tar.gz
cmake의 옵션에 다음과 같이 추가해주었다
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/boost_1_70_0
[ issue 3 ] 산넘어 산
하지만 또 마주친 에러..
Make Error at CMakeLists.txt:283 (MESSAGE):
Please do not build in-source. Out-of source builds are highly
recommended: you can have multiple builds for the same source, and there is
an easy way to do cleanup, simply remove the build directory (note that
‘make clean’ or ‘make distclean’ does not work)
You can force in-source build by invoking cmake with
- DFORCE_INSOURCE_BUILD=1 *— Configuring incomplete, errors occurred!*
살펴보니 CmakeCache.txt를 지워주면 된다고 하였다.
$ cd mysql-8.0.19
$ rm -f CMakeCache.txt # 삭제
$ cd [아까 만들어준 아무 디렉토리 이름]
$ cmake \
.. \
-DCMAKE_INSTALL_PREFIX…. (이하 생략)
이후에 설치를 해주었다.
$ make
$ make install
~~~~ 설치 진행 중 ~~~~
일 줄 알았지만 ,, ?
[ Issue 4 ]
30% 쯤 왔을 때 c++: internal compiler error가 발생하였다..
구글링을 해보니 코드 에러가 아닌 메모리 에러라고 나와있었다.
https://m.blog.naver.com/jungspeedy/222036268371
1. Swap 프로세스들을 다 종료
$ sudo swapoff -a
2. Swap 크기 생성
$ sudo dd if=/dev/zero of=/swapfile bs=1G count=8
(이때, DD: Memory Exhausted by Input Buffer of Size Bytes 와 같은 에러가 뜨면
sudo dd if=/dev/zero of=/swapfile bs=1M count=2000 로 대신하면 된다)
① if = 초기화할 때 사용하는 장치 파일명
② of = 생성할 파일명
③ bs = 블록크기 지정 (단위가 없을경우 바이트로 처리)
④ count = bs에 설정한 블록의 개수
3. 사용가능한 파일을 swap으로 만듦
$ sudo mkswap /swapfile
4. 해당 Swap 파일을 활성화
$ sudo swapon /swapfile
5. 마지막으로 이용가능한 swap의 정도를 보는 코드
$ grep SwapTotal /proc/meminfo
여기서 잠깐 👋👋
swap이 뭘까?
사전적인 의미로 스왑은 교환한다라는 의미이다. 리눅스는 가상메모리라는 것을 지원하는데,
결론부터 말하자면 스왑 메모리란, 하드디스크의 일부를 RAM처럼 사용할 수 있게 만드는 기술이다.
스왑은 만약 프로그램 용량이 커서 RAM에 수용할 수 있는 용량을 초과하는 경우를 대비해서 예비공간의 역할을 수행한다고 한다.
RAM 안에 있는 데이터들에는 우선순위가 존재하는데, 메모리 용량이 초과하면 당장 쓰이지 않는 데이터들은 스왑공간에 저장되어 처리된다. ( 스왑메모리는 사용할 수 있는 메모리영역을 확장하는데에 도움을 주지만 데이터가 처리되는 속도는 RAM을 따라가진 못한다. )
그래서 정리하자면,
mkswap 명령어로 swapfile에 새로 만든 파티션을 스왑영역으로 지정할 수 있고,
swapon 명령를 통해 만들어진 스왑영역을 사용하기 위해 별도로 활성화(on)할 수 있다!
해당 내용은 이 블로그에 더 자세하게 나와있다 : )
https://wiseworld.tistory.com/62
[ Issue 5]
70% 정도쯤 왔을 때 또 에러가 발생했다 ^^ 해당 에러는 다음과 같다 ...
collect2 : ld terminated with signal 9
구글링을 하던와중 swapon을 다시 활성화 해주면 된다고 하였다!
아까 용량을 늘리기 위해서 swap을 비활성화 해주었었는데, 다시 활성화를 해주지 않아 발생한 에러였다.
sudo swapon /swapfile 명령어를 입력해주었다.
이제 진짜 여기까지만 하면 끝이다 ㅎㅎ
$ make
$ make test
$ make install
4 ) mysql 그룹 및 유저 생성
$ groupadd mysql
$ useradd -r -g mysql -s /bin/false mysql
-r : system account
-g : 그룹 지정
-s : user의 로그인 shell
5 ) mysql-files 디렉토리 생성
'cmake ~' 명령어 실행 시 만들어진 디렉토리로 이동 후 새 디렉토리 생성
$ cd /usr/local/mysql
$ mkdir mysql-files //아무이름이나 상관없다
6 ) 권한부여
$ chown -R mysql:mysql /usr/local/mysql
$ chown mysql:mysql mysql-files
$ chmod 750 mysql-files
chown: 파일의 소유자를 변경
-R : 하위 디렉토리까지 소유권 할당
chmod : 사용권한을 변경
7 ) 기본 DB 생성
$ bin/mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
위의 명령어를 입력하면 password가 뜨게 되는데 임시 비밀번호이니 기록해두자!!!!
8 ) mysqld_safe : mysql 실행
& 명령어를 통해 백그라운드에서 프로세스를 실행시켜준다.
$ bin/mysqld_safe --user=mysql &
다음 명령어를 입력하면 password를 입력하라는 문구가 뜨는데 아까 나왔던 임시 비밀번호를 입력한다.
$ bin/mysql -u root -p
임시비밀 번호를 입력해주면 mysql > 이렇게 변한다! 성공!
9 ) 비밀번호 변경
아까는 임시 비밀번호였으니, 설정하고 싶은 비밀번호로 변경해주자!
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '변경하고픈 비밀번호';
10 ) 서버 종료
$ bin/mysqladmin -u root -p shutdown
'Server' 카테고리의 다른 글
[Server] AWS 서버 구축하기 Linux + Nginx PHP MySQL (0) | 2022.08.16 |
---|---|
[Server] 포트포워딩을 통해 외부에서 phpinfo 접속하기 (0) | 2022.08.08 |
[Server] Bitnami 설치 후 APM 실행하기 (0) | 2022.08.08 |
[Server] Ubuntu에서 PHP 소스 설치하기/컴파일 설치/수동설치 (0) | 2022.08.02 |
[Server] Ubuntu에서 Apache 소스 설치하기/컴파일설치/수동설치 (0) | 2022.07.31 |
댓글