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이라는 뜻은
- 소유자권한 : 읽기, 쓰기, 실행
- 그룹권한 : 읽기, 실행
- 전체권한 : 없음
라는 의미로 해석된다.
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 |