Rocky Linux 8.6 에서 MariaDB 10.9.2 소스 설치하기 (with InnoDB 이노디비 설정)
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;
'리눅스 > MySQL' 카테고리의 다른 글
MySQL (MariaDB) 로그들 logrotate 설정하기 (0) | 2022.10.07 |
---|---|
mariabackup 을 이용한 MariaDB 10.6.9 Replication 구성하기 (0) | 2022.09.19 |
sysbench 1.0.20 를 이용한 MySQL 성능 (performance) 테스트 (0) | 2022.09.01 |
Rocky Linux 8.6 에서 MySQL 8.0.30 소스 설치하기 (with InnoDB 이노디비 설정) (0) | 2022.08.11 |
MySQL 테이블별 용량 및 레코드 수 조회하기 (0) | 2022.08.09 |