Rocky Linux 8.6 에서 MariaDB 10.9.2 소스 설치하기 (with InnoDB 이노디비 설정)

리눅스/MySQL|2022. 9. 13. 10:25
반응형

1. 필수 패키지 설치

 

# dnf -y update
# dnf -y install cmake ncurses-devel openssl openssl-devel

 

작업이 잘 수행 되도록 아래 명령 실행 하고, 서버 부팅시에도 selinux 비활성화를 위해 설정을 수정해 줍니다.

# setenforce 0

# vi /etc/selinux/config

SELINUX=disabled

 

 

2. MariaDB 계정 추가

 

# groupadd -g 400 mysql
# useradd -u 400 -g 400 -d /usr/local/mysql -s /bin/false mysql

 


3. MariaDB 설치

 

# cd /usr/local/src
# wget https://mirror-mariadb.nzbilisim.net/mariadb/pub/mariadb/mariadb-10.9.2/source/mariadb-10.9.2.tar.gz
# tar xvfz mariadb-10.9.2.tar.gz
# cd mariadb-10.9.2
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1
# make
# make install

 

 

4. MariaDB 환경 설정

 

환경 설정 파일이 없어도 아래 '5번 항목' 에서 기본 DB 생성 후 MariaDB 구동은 가능하지만

my.cnf 파일을 생성하면 서버 사양 및 운영 방식에 알맞게 환경을 조정할 수 있습니다.

아래는 InnoDB 구성을 위한 예 입니다.


# vi /etc/my.cnf

[client]
default-character-set = utf8


[mysqld]
#################### 일반 서버 설정 ####################
# 서버 순번
server-id = 1
# 기본 엔진 설정
default-storage-engine = InnoDB
# 역 DNS 검색 비활성
skip-name-resolve
# 최대 클라이언트 연결 개수
max_connections = 1024
# 다쓴 쓰레드를 스레드풀에 저장할 갯수
thread_cache_size = 50
# 커넥션 최대 대기시간(초)
wait_timeout = 28800
# 정렬에 필요한 버퍼의 크기 ORDER BY 또는 GROUP BY 연산 속도와 관련
sort_buffer_size = 512K
# 캐릭터셋
collation-server = utf8_unicode_ci
character-set-server = utf8
skip-character-set-client-handshake

############# InnoDB 설정 (메모리 8G 기준) #############
# 테이블 단위로 테이블스페이스 할당, 활성시 확장자 .ibd 파일이 생성됨
innodb_file_per_table = 1
# innodb 홈디렉터리 경로
innodb_data_home_dir = /usr/local/mysql/data
# 파일명 : 초기용량 : 자동증가 : 최대사이즈 (파일 재생성 할때 사용)
#innodb_data_file_path = ibdata1:1024M:autoextend
# 테이블 스페이스 자동 확장시 크기
innodb_autoextend_increment = 100
innodb_log_group_home_dir = /usr/local/mysql/data
# 데이터와 인덱스를 캐시하기 위해 사용하는 메모리 버퍼크기
# 서버에 MySQL만 실행한다면, 물리메모리의 50~80%를 지정
innodb_buffer_pool_size = 5G
# Redo 로그 버퍼크기
innodb_log_buffer_size = 16M

# 로그 파일 한 개의 크기로 보통 buffer_pool 사이즈의 10%를 지정
# 크기가 클 수록 체크포인트가 덜 발생해 디스크 I/O를 줄이지만,
# 디비가 크래시 났을 경우 복구 타임이 길어진다.
innodb_log_file_size = 512M

# 커밋 로그 옵션으로 성능 최적화에 사용
# 1 : 트랜젝션 실행할때마다 redo 로그 파일에 기록되고 디스크 플러시가 실행 (default 값)
# 2 : 트랜젝션의 양은 상관없이 flush 가 1초에 한번씩만 수행되기 때문에 매번 flush 되는 기본값보다 IO 성능이 월등히 좋아지지만
#     단점은 데이터를 유실할 가능성이 있다는 점 (예: flush 되기 전 1초 이내 셧다운)
# 0 : 2와 동일하나 OS buffer 를 거치는 부분이 제외되어 더 빠름. 데이터 유실 가능성은 동일.
# 설명 : 서버가 죽었을때 1~2초 정도의 데이터를 버릴수 있을 정도의 상황이라면 0 또는 2 를 선택
#        커밋된 데이터는 무조건 살려야만 한다면 반드시 1 을 선택
innodb_flush_log_at_trx_commit = 1

# 롤백이 진행되기 전에 LOCK을 대기하는 시간(초)
innodb_lock_wait_timeout = 20
# 크래시 복구 모드 설정
innodb_force_recovery = 0
# 성능을 위해 메모리에서 직접 액세스 하도록 설정
innodb_flush_method = O_DSYNC

# O_DIRECT=운영체제의 버퍼를 사용 않고 IO 실행, RAID 컨트롤러(캐시메모리 장착된)가 없거나 SAN 사용시 O_DIRECT를 사용 하지 않음
# 이중 쓰기 버퍼 비활성
innodb_doublewrite = 0
# 쓰레드가 지연되기 전에 (suspended) 풀어 주기 위해 InnoDB 뮤텍스 (mutex) 를 기다리는 쓰레드의 대기 시간
innodb_sync_spin_loops = 20
# LOCK TABLES 은 AUTOCOMMIT=0 경우에, InnoDB로 하여금 내부적으로 테이블을 잠금
innodb_table_locks = 1
# 퍼지 연산 (purge operation)이 래깅 (lagging) 될 때 INSERT, UPDATE 및 DELETE 연산을 지연 시키는 방법을 제어
# 디폴트값 0 일시 지연 없음
innodb_max_purge_lag = 0
# innodb 에 만들 수 없는 데이블이나 들어갈 수 없는 길이의 데이터를 허용
#innodb_strict_mode = 0

#################### 바이너리 로그 #####################
# 바이너리 로그 파일 (binlog.xxxx 형태의 파일 생성. 경로 추가 가능)
#skip-log-bin
log-bin = binlog
# 파일당 최대 사이즈
max_binlog_size = 1G

##################### 제네럴 로그 ######################
# 제네럴 로그 사용 여부 (0: 비활성, 1: 활성)
general_log = 1
# 제네럴 로그 파일
general_log_file = /usr/local/mysql/data/general_query.log


################### 슬로우 쿼리 로그 ###################
# 슬로우 로그 사용 여부 (0: 비활성, 1: 활성)
slow-query-log = 1
# 슬로우 쿼리를 구분하는 소요 시간 (초)
long_query_time = 10
# 슬로우 로그 파일
slow_query_log_file = /usr/local/mysql/data/slow_query.log


[mysqldump]
default-character-set = utf8


[mysql]
default-character-set = utf8

* 옵션 설명은 아래 URL 참고

https://yakolla.tistory.com/61

https://bae9086.tistory.com/175 

https://systemv.tistory.com/48

 

 

5. MariaDB 초기 데이터 베이스 생성

 

생성해두었던 my.cnf 파일을 읽어 환경에 맞게 기본 DB 를 생성합니다.

MariaDB 는 10.4 버전부터 새로운 암호화 방식이 추가 되었습니다. (MySQL 5.7 이후 버전과 동일)

그 이전 버전과 같은 암호화 방식을 사용하려는 경우 --auth-root-authentication-method=normal 옵션을 추가하여 data 디렉토리를 생성하면 됩니다.

(예 : 계정 패스워드 변경시)

- 구버전 : update user set...

- 신버전 : alter user...

# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql

 

DB 생성시 아래와 같은 메세지가 출력된 경우

 

chown: cannot access '/auth_pam_tool_dir': 그런 파일이나 디렉터리가 없습니다
Cannot change ownership of the '/auth_pam_tool_dir' directory
to the 'mysql' user. Check that you have the necessary permissions and try again.

 

다음과 같이 조치하고, data 디렉토리 삭제 및 mysql_install_db 명령을 다시 실행합니다.

# mkdir /auth_pam_tool_dir
# touch /auth_pam_tool_dir/auth_pam_tool
# chown mysql.mysql /auth_pam_tool_dir -R
# chmod 770 /auth_pam_tool_dir -R

 

 

6. MariaDB 구동

 

데몬 구동을 쉽게 하기 위해 명령어를 복사하고, 서버 부팅시 자동으로 데몬이 구동 되도록 설정합니다.

# cp -arp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on

# /etc/init.d/mysqld start

 

 

* 이후 작업 (필요에 따라 설정)

 

1) mysql 명령을 경로에 상관없이 사용하도록 설정 추가

# vi /etc/profile

PATH="$PATH:/usr/local/mysql/bin"

# source /etc/profile

 

2) firewalld 방화벽 설정 (서버 외부에서 DB 바로 접근 필요시)

# firewall-cmd --zone=public --add-port=3306/tcp

 

3) MySQL root 패스워드 업데이트

mysql> use mysql;

mysql> alter user root@localhost identified by 'NEWPASSWD';

mysql> flush privileges;

 

 

반응형

댓글()