article thumbnail image
Published 2021. 6. 25. 13:50

1. MySQL 컴파일에 필요한 패키지 설치

$ apt-get upgrade
$ 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

 

공식 홈페이지 참조

https://dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html

 


2. MySQL community server download

$ 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 설치 (cmake, make, make install)

cmake 명령어를 통해 설치 옵션을 부여하고,

make 명령어로 빌드한 뒤,

make install 로 설치를 진행한다.

 

$ cd /usr/local/mysql-8.0.19
$ rm -f CMakeCache.txt
$ mkdir RCmysql
$ cd RCmysql
$ 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-8.0.19/RCmysql/boost_1_70_0
# -DWITH_BOOST=/usr/local/mysql/boost 

# -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 

 

 

소스 디렉토리에서 build 하지 말라는 내용으로 보인다.

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

 

 

CMakeBoost 오류

 

 

cmake/boost 과정에서 에러가 난다.

 

에러 설명에서 안내한대로 boost를 새로 다운받고

 

cmake 커맨드 중

-DWITH_BOOST=/usr/local/mysql-8.0.19/RCmysql/boost_1_76_0

변경 후 진행

 

-> 버전 에러

 

1.70.0 버전 다운로드

$ wget http://downloads.sourceforge.net/project/boost/boost/1.70.0/boost_1_70_0.tar.gz
$ tar xvfz boost_1_70_0.tar.gz 

 

후 진행


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

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


4.1 MySQL 그룹, 유저 생성

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

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

 

groupadd mysql 은 mysql 이라는 그룹을 만들어서 관리하겠다는 뜻이다.


useradd 는 새로운 사용자를 추가하겠다는 뜻이다.

-r 옵션 : system account를 만들겠다는 소리.
-g 옵션 : 어떤 그룹에 넣어놓고 관리할 것인지

-s 옵션 : 유저의 로그인 shell 을 지정하는 것.
마지막에 기술한 mysql 이라는 이름으로 새로운 사용자를 추가하겠다는 뜻이다.

 

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


4.2 /usr/local/mysql 디렉토리로 이동한다음, mysql-files 디렉토리를 만들어준다. 

/usr/local/mysql 디렉토리는 위에서 MySQL 을 cmake 로 설치할때 만들어진 디렉토리이다.

 

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

4.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.4 기본 데이터베이스를 생성 (Data Directory Initialization)

 

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

 

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

 

Data Directory Initialization 이 실행되는 동안 Server 의 동작

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

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

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

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

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

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

(7) 서버가 종료된다.

 

 

A temporary password is generated for root@localhost: *p0bq<2Zoswh

temporary password 는 임시비밀번호이다. mysql 서버에 연결할 때 필요하므로 기억해두자. (서버에 연결하고 나서 바꿀것이다.)


5. root 암호 초기화

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

 

Connect to the server

$ mysql -u root -p

 

mysql -u user01 -p user_db

mysql : MYSQL 데이터베이스 클라이언트 프로그램

-u : MYSQL 사용자명을 지정하기 위한 옵션

-p : 지정한 사용자의 MYSQL 패스워드를 입력하기 위한 옵션

user_db : 지정한 사용자가 사용할 MYSQL 데이터베이스명

 

$ ./mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/usr/local/mysql/mysql.sock' (2)

위와 같은 에러가 뜬다.

 

[원인-1]

mysqld 가 시작되지 않은 상황에 발생할 수 있다.

아래의 명령어를 통해 나의 mysqld 작동 상태를 확인 할 수 있다.

$ service mysqld status
MySQL is stopped

 

[해결-1]

만약 위와 같이 나왔다면 MySQL 이 실행중이지 않다고 하면

아래의 명령어로 sqld 를 실행시켜주면 된다.

$ service mysqld start

 

sqld 가 정상 실행중이라면?

$ service mysqld status
MySQL running (20094)

 

[원인-2]

/var/lib/mysql 경로에 mysql.sock 이 존재하지 않아서 발생할 수 있다.

아래 명령어를 통해 mysql.sock 파일이 어디에 위치하고 있는지 확인할 수 있다.

$ find / -name mysql.sock

 

[해결-2]

이를 해결하기 위해서 심볼릭링크 (Symbolic Link) 를 이용하여 해결할 수 있다.

 

심볼릭 링크 (Symbolic Link) 란?

원본 파일에 링크를 연결시켜둔 것으로 윈도우 (Windows) 에서 바로가기와 비슷한 개념이다.

 

심볼릭 링크 (Symbolic Link) 설정 명령어

$ ln -s [원본 파일명] [새로운 파일명]

 

디렉토리가 없다면 아래의 명령어를 통해 

디렉토리를 생성해준 후, 심볼릭링크 (Symbolic Link) 를 걸어주자.

 

$ ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

 

 

아래 명령어를 통해 심볼릭링크 (Symbolic Link) 여부를 확인할 수 있다.

$ ll /var/lib/mysql/

 

 

Then, at the password prompt, enter the random password that the server generated during the initialization sequence:

$ Enter password: (enter the random root password here)

 

 

If you used --initialize-insecure to initialize the data directory, connect to the server as root without a password:

$ mysql -u root --skip-password

 


 

백그라운드에서 서버 실행하고 MySQL이 실행되고 있는지 확인할 수 있다.

$ cd /usr/local/mysql/bin
$ ./mysqld_safe --user=mysql &
$ ps -ef | grep mysqld

 

 

 

$ cd /usr/local/mysql/bin
$ ./mysqld_safe --user=mysql &
$ ./mysql -u root -p

*p0bq<2Zoswh

 

Segmentation fault 에러

 

 

'🚦 Server > AWS' 카테고리의 다른 글

Bitnami local 서버 구축, 포트포워딩  (0) 2021.07.07
nginx  (0) 2021.07.02
APM 자동 설치  (0) 2021.06.28
PHP 수동 설치  (0) 2021.06.27
Docker로 Apache 수동 설치  (0) 2021.06.24
복사했습니다!