본문 바로가기
Project/StyleLab

StyleLab의 두 번째 노트: MySQL DB 서버 구축

by 규난 2023. 12. 16.
728x90

프로젝트의 ERD와, API 명세서 그리고 일정에 대한 간트 차트가 어느 정도 나왔기 때문에 개발 환경 셋팅을 해보도록 하겠습니다.

이번 블로깅에서는 MySQL 8 설치 및 환경 설정을 해보도록 하겠습니다.

 

목차

  1. MySQL 8 설치
  2. MySQL 시작 및 원격 접속
  3. MySQL 서버 설정
  4. reference

 

MySQL 8 설치

MySQL을 설치하는 서버의 환경은 Oracle-Linux-8.8-aarch64에서 진행하였습니다.

yum 인스톨러를 이용하려면 먼저 MySQL software repository를 등록해야 하는데, 이를 위해서는 운영체제와 버전을 확인하여 MySQL 다운로드 페이제어서 RPM 설치 파일을 직접 받으셔야 합니다.

 

밑의 명령어로 운영체제와 버전을 확인해 주신 다음

linux의 운영체제와 버전 확인 방법

 

이 링크를 통해서 운영체제와 버전에 맞는 MySQL RPM 파일을 다운 받으시면 됩니다.

 

MySQL :: Download MySQL Yum Repository

Support EOL for Fedora 37 Per the MySQL Support Lifecycle policy regarding ending support for OS versions that have reached end of life, we plan to discontinue building all MySQL binaries for the Fedora 37 platform as of Dec 5, 2023. See Fedora 37 End of L

dev.mysql.com

 

저는 다운로드 받은 RPM 파일을 파일 질라를 사용하여 mac(Local) -> OCI(Remote)로 옮긴 후 밑의 명령어를 통해 linux 서버 yum repository에 MySQL software repository를 등록해 주었습니다.

$ sudo rpm -Uvh mysql80-community-release-el8-9.noarch.rpm

 

yum repository에 밑의 명령어로 MySQL의 repository가 잘 등록되었는지 확인할 수 있습니다.

$ /etc/yum.repos.d
$ ls -alh *mysql*

 

Oracle-Linux-8.8과 같은 EL8 기반 시스템에서는 기본적으로 활성화되어 있는 MySQL 모듈이 포함되어 있습니다.

이를 비활성화하지 않으면 sudo yum install mysql-community-server 명령어로 MySQL을 설치 시 오류가 나게 됩니다.

 

이러한 오류 발생 시 밑의 명령어를 통해 기본적으로 활성화되어 있는 MySQL 모듈을 비활성화 시켜주셔야 합니다.

 $ sudo yum module disable mysql

 

그 후 다시  sudo yum install mysql-community-server 명령어를 사용하면 MySQL의 설치가 성공적으로 진행됩니다.

MySQL 설치 진행

 

2. MySQL 시작 및 원격 접속

밑의 명령어를 사용해 MySQL을 실행시켜 줍니다.

$ systemctl start mysqld.service

// 실행이 잘 됐다면 Active: active(running)이 출력
$ systemctl status mysqld.service

 

실행이 잘 됐다면 my.conf 파일을 열어 MySQL의 log가 어느 디렉토리에 존재하는지 확인합니다.

mysql log 경로

 

경로를 확인 후 밑의 명령어를 사용해 log 파일을 열어 root의 비밀번호를 확인합니다. (/password로 검색하면 더 빠르게 찾으실 수 있습니다.)

$ vim mysqld.log

mysql의 root 비밀번호

 

비밀번호를 확인하였다면 밑의 명령어를 사용해 MySQL 서버에 접속합니다. 

$ mysql -u root -p

MySQL 서버 접속

 

MySQL 서버에 접속한 후 root 계정의 비밀번호를 바꾸지 않고 query를 사용하게 되면

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 의 에러를 만나게 됩니다. 그렇기 때문에 밑의 명령어를 통해 root의 비밀번호를 재설정 해주도록 하겠습니다.

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '변경할 비밀번호';

 

root의 비밀번호를 변경하였으면 원격에서 접속할 계정을 생성하도록 하겠습니다.

MySQL 8 버전 이후부터는 계정 생성과 권한 부여를 한 번에 할 수 없기 때문에 다음과 같은 명령어를 통해 계정과 권한을 따로 설정해 주어야 합니다.

mysql>  create user '사용자'@'호스트' identified by '비밀번호';
mysql>  grant all privileges on *.* to '사용자'@'호스트';
mysql>  flush privileges;

 

계정을 생성 후 mac(Local)의 MySQL Workbench를 사용하여 원격으로 접속해 보도록 하겠습니다.

MySQL Workbench를 통한 원격 접속

 

3. MySQL 서버 설정

프로젝트에 들어가기 전 MySQL innodb 스토리지 엔진에서 사용하는 버퍼 풀과 리두 로그에 대해서 간단하게 알아보도록 하겠습니다.

MySQL innodb 스토리지 엔진에 버퍼 풀은 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시에 두는 공간입니다.

또한 insert, update, delete처럼 데이터를 변경하는 쿼리는 데이터 파일이 흩어져서 디스크에 존재하기 때문에 디스크에 대한 랜덤 엑세스가 발생하여 자주 발생하게 되면 데이터 변경에 대한 효율이 떨어지게 되는데 이를 보완하기 위해 데이터 변경(쓰기) 작업을 지연 시켜 일괄 적으로 처리할 수 있게 해주는 버퍼 역할을 합니다.

 

이러한 innodb의 버퍼 풀을 효율적으로 사용하려면 데이터 캐시를 위한 공간인 버퍼 풀 사이즈와 버퍼 풀에서 쓰기 작업을 위한 버퍼 기능 향상시키기 위해 리두 로그의 사이즈를 적절하게 설정해 주어야 합니다.

 

innodb의 버퍼 풀 사이즈와 리두 로그 사이즈를 확인해 보도록 하겠습니다. MySQL 서버에 접속 후 다음 명령어를 통해 innodb의 설정값들을 확인하실 수 있습니다.

mysql> show variables like '%inno%';

 

현재 저의 MySQL 서버에 설정되어 있는 innodb 스토리지 엔진의 기본 설정값입니다.

innodb 스토리지 엔진 기본 설정 값

 

innodb 버퍼 풀 사이즈 설정 시 주의점

innodb의 버퍼 풀 사이즈는 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instanaces 설정값을 곱한 값의 배수가 되게 끔 설정하셔야 합니다. 그렇지 않으면 자동으로 곱한 값의 배수로 설정되게 됩니다.

 

my.conf 파일에서 버퍼 풀과 관련된 설정값들을 세팅해 보도록 하겠습니다. 

vim 명령어를 통해 my.conf 파일을 오픈하여 맨 밑에 코드 블록에 있는 3 줄을 추가하면 됩니다.

참고로 저의 서버 스펙은 CPU 4 Core, 물리 메모리 24G입니다. 버퍼 풀 사이즈를 줄이는 작업은 서비스의 영향도가 굉장히 크기 때문에 초기에 적절한 사이즈를 설정하고 모니터링하면서 점차 늘려가는 방식으로 진행하는 것이 좋습니다.

$ vim /etc/my.conf

# InnoDB
innodb_buffer_pool_size=14G
innodb_buffer_pool_instances=8
innodb_redo_log_capacity=2G

// MySQL server 재시작
$ systemctl restart mysqld.service

 

 

MySQL에는 굉장히 많은 설정들이 있지만 저도 다 알지 못하는 관계로 아는 것에 대해서만 설정을 하였습니다.

앞으로 프로젝트를 진행하면서 추가적으로 설정한 것들에 대해서 이 블로그에 계속 업데이트하도록 하겠습니다.

이것으로 프로젝트에서 사용할 MySQL 설치와 설정들을 마치도록 하겠습니다.

 

4. reference

https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html

https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool-resize.html

RealMySQL 8.0 Vol.1

 

728x90