Mysql은 binary 방식으로만 설치를 진행했어가지고 Source Complie방식으로 설치하는 방법은 아에 모르고 있었다... 하지만 실무에서는 회사 내 정책, 서비스에 맞게 DB를 운영해야하기 때문에 Source Compile방식을 채택하는 경우가 많다..
지금 작성하는 부분은 다른 뛰어나신 분들이 작성한 내용을 바탕으로 어떻게 설치하는지를 따라하면서 공부했을 뿐이니 더 자세한 내용을 원하는 분들은 바로 아래 링크를 통해 보시면 좋겠다.
https://hoing.io/archives/359
https://shine-yeolmae.tistory.com/39
Source Compile 설치
- 소스 패키지는 여러 파일이 포함되어 패키지 및 압축(tar.gz)
- RPM파일 없이 소스 코드로 직접 설치하여 세밀한 설정이 가능하며 기능을 자유롭게 선택 가능
- 시스템에 보다 적합하고 안정적이며 효율적
- 초보자가 해결하기 어려운 문제가 많음
Binary (rpm, yum) 설치
- 프로그램 설치와 관리가 용이하게 되어 있어 소스 패키지가 성공적으로 컴파일 된 후에 생성된 패키지
- YUM으로 설치 시 RPM의 의존성 문제를 repository에서 가져와서 해결 가능
- 컴파일 후에는 소스 코드를 볼 수 없으며 소스패키지만큼 자유롭지 않음
apt install build-essential bison
apt install gcc g++ libncurses5-dev libxml2-dev openssl
apt install libssl-dev curl libcurl4-openssl-dev libjpeg-dev
apt install libpng-dev libfreetype6-dev libsasl2-dev
apt install autoconf libncurses5 libtirpc-dev
apt install ncurses* cmake-gui cmake
build-essential
: C/C++ 소소코드를 빌드하는데 필요한 기본도구, gcc, g++ 등의 컴파일러와 make 등이 포함
bison
: 파서 생성 도구로 mysql sql 문법 파싱하는데 필요한 파서 기능
libncurses5-dev, libncurses5, ncurses*
: CLI인터페이스 지원 라이브러리, mysql-client에서 사용
openssl, libssl-dev
: 보안 및 암호화 기능을 제공하기 위한 라이브러리, mysql에서는 SSL/TLS연결을 지원하고, 이를 위한 openssl라이브러리를 사용
curl, libcurl4-openssl-dev
: 원격 URL에 대한 데이터 전송에 사용되는 라이브러리로 원격 데이터를 통신할 떄 사용되는 라이브러리
libjpeg-dev, libpng-dev, libfreetype6-dev
: 이미지 처리 관련 라이브러리
libsasl2-dev
: 클라이언트와 서버간의 인증에 사용되는 라이브러리
autoconf
: 소프트웨어를 빌드하기 위해 소스코드 빌드 과정 자동화
libtirpc-dev
: RPC(원격 프로시저 호출)을 지원하기 위한 라이브러리
cmake-gui, cmake
: C/C++언어의 소스코드 빌드 시스템 라이브러리
groupadd mysql
useradd -g mysql mysql
/mnt/d
에 폴더를 만들어서 진행하도록 하겠습니다.mkdir /mnt/d/dbbox && cd /mnt/d/dbbox
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.31.tar.gz
tar zxvf mysql-boost-5.7.31.tar.gz
cd mysql-5.7.31
cmake \
'-DCMAKE_INSTALL_PREFIX=/mnt/d/dbbox' \ # mysql 설치경로 prefix
'-DINSTALL_SBINDIR=/mnt/d/dbbox/bin' \ # 실행파일 설치 경로
'-DINSTALL_BINDIR=/mnt/d/dbbox/bin' \
'-DMYSQL_DATADIR=/mnt/d/dbbox/data' \ # mysql 데이터 디렉토리 경로
'-DINSTALL_SCRIPTDIR=/mnt/d/dbbox/bin' \ # mysql 스크립트 파일 설치 경로
'-DWITH_INNOBASE_STORAGE_ENGINE=1' \ #innodb엔진 사용 영부
'-DWITH_PARTITION_STORAGE_ENGINE=1' \ # 파티션 엔진 사용여부
'-DSYSCONFDIR=/mnt/d/dbbox/etc' \ # # 시스템 구성 파일 디렉토리 설정
'-DDEFAULT_CHARSET=utf8mb4' \ # # 기본 문자집합
'-DDEFAULT_COLLATION=utf8mb4_general_ci' \ # 기본 콜레이션 utf8mb4설정
'-DWITH_EXTRA_CHARSETS=all' \ # 추가 문자집합 설정
'-DENABLED_LOCAL_INFILE=1' \ # 로컬 읽기 설정
'-DMYSQL_TCP_PORT=3306' \ # tcp 포트 번호 설정
'-DMYSQL_UNIX_ADDR=/tmp/mysql.sock' \ # mysql unix 소켓 파일 위치
'-DCURSES_LIBRARY=/usr/lib/x86_64-linux-gnu/libncurses.so' \ # curses 라이브러 위치 설정
'-DCURSES_INCLUDE_PATH=/usr/include' \ # curses 헤더 파일 위치
'-DDOWNLOAD_BOOST=1' \ # boost라이러리 사용여부
'-DWITH_BOOST=./boost' \ # boost라이브러리 위치
'-DWITH_ARCHIVE_STORAGE_ENGINE=1' \ # Archive 스토리지 엔진
'-DWITH_BLACKHOLE_STORAGE_ENGINE=1' \ # Blackhole 스토리지 엔진
'-DWITH_PERFSCHEMA_STORAGE_ENGINE=1' \ # performance schema 엔진
'-DWITH_FEDERATED_STORAGE_ENGINE=1' # federated 엔진
openssl version
한 결과 설치가 되있더 것도 확인했었습니다.1.1.1
버전을 사용하고 있어 삭제 후 다시 설치하였습니다.# 기존 openssl 삭제
apt-get --purge autoremove openssl
# 1.1.1버전 설치 후 빌드
cd /usr/local/src
wget https://www.openssl.org/source/old/1.1.1/index.html --no-check-certificate
tar -xvzf openssl-1.0.1f.tar.gz
cd openssl-1.0.1f
./config
make
make install
openssl의 버전을 바꾼 후 다시 위에 cmake파일을 적용하였더니 오류 없이 진행된 것을 확인할 수 있었습니다.
이후 make를 하면 꽤나 오랜시간동안 빌드가 이루어집니다.
make install
을 하면 됩니다.cd /mnt/d/dbbox/
mkdir logs tmp data
touch ./logs/mysqld_safe.err # mysql서버 에러로그 파일 생성
cd /mnt/d
chown -R mysql:mysql ./dbbox
vi /etc/ld.so.conf
# 아래 내용 추가
/mnt/d/dbbox/lib
[client]
port = 3306
socket = /tmp/mysql.sock
[mysql]
no-auto-rehash
show-warnings
[mysqld]
server-id=1
port = 3306
bind-address = 127.0.0.1
basedir = /mnt/d/dbbox/mysql
datadir= /mnt/d/dbbox/data
tmpdir=/mnt/d/dbbox/data
socket=/tmp/mysql.sock
user=mysql
skip_name_resolve
######## MyISAM Spectific options ############
key_buffer_size = 100M
### INNODB Spectific options
default-storage-engine = InnoDB
innodb_buffer_pool_size = 384M
######## DATAFILE #########
innodb_data_home_dir = /mnt/d/dbbox/data/
innodb_data_file_path = ib_system:100M:autoextend
innodb_file_per_table=ON
innodb_log_buffer_size = 8M
innodb_log_files_in_group = 3
innodb_log_file_size=200M
innodb_log_files_in_group=4
#innodb_log_group_home_dir = /mnt/d/dbbox/data/redologs
#innodb_undo_directory = /mnt/d/dbbox/data/undologs
innodb_undo_tablespaces = 1
############## Connection ##################
max_connections = 1000
wait_timeout= 60
############## log ####################
# Error Log
log_error=/mnt/d/dbbox/logs/mysqld.err
log-output=FILE
general_log=0
slow-query-log=0
long_query_time = 5
slow_query_log_file = /mnt/d/dbbox/logs/slow_query.log
pid-file=/mnt/d/dbbox/tmp/mysqld.pid
################## chracterset ##################
character-set-client-handshake=OFF
skip-character-set-client-handshake
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
[mysqld_safe]
log_error=/mnt/d/dbbox/logs/mysqld.err
pid-file=/mnt/d/dbbox/tmp/mysqld.pid
# cpu core개수 확인
cat /proc/cpuinfo | grep "cpu cores" | head -1 | awk '{print$4}'
./mysqld --initialize --user=mysql \
--basedir=/mnt/d/dbbox \
--datadir=/mnt/d/dbbox/data
# 파일 생성 확인
ls -l /mnt/d/dbbox/data/
/mnt/d/dbbox/bin/mysqld_safe --defaults-file=/etc/my.cnf &
ps -ef | grep mysql
cat /mnt/d/dbbox/logs/mysqld.err | grep password
--> wktfOto(0h*z
# mysql 접속
/mnt/d/dbbox/bin/mysql -uroot -p
--> 임시비밀번호 입력
# 비밀번호 변경
ALTER USER root@'localhost' identified by '비밀번호';
COMMIT;
FLUSH PRIVILEGES;
EXIT
- mysql source compile은 몇번 해봤지만 해도해도 헷갈리고, WSL환경에서 실행하다 보니 안되는게 이만저만이 아니었습니다.
- 혹시라도 하게 되신다면 미리 포트, 마운트 환경, 경로 설정 등을 유의해주세요.
- 밑에 저도 보고 따라한 내용이니 저분의 내용을 많이 참고하세요.