MariaDB 설치 메뉴얼

이기현·2021년 12월 9일
0

MariaDB

목록 보기
11/29
post-thumbnail

데이터 디렉토리 표준

운영 : 이중화 고려하여 /data 파티션안에 생성

[root@mbv-selfdb2 data]# pwd
/data
[root@mbv-selfdb2 data]# ll
total 4
drwxr-xr-x 5 maria dba 4096 Sep 17 09:38 MARIA_DATA
drwxr-xr-x 2 maria dba 25 Aug 13 11:12 MARIA_LOG

개발 : /box 파티션 안에 생성

[asmanager@mbv-devselfDB box]$ pwd
/box
[asmanager@mbv-devselfDB box]$ ll
total 4
drwxr-xr-x 4 maria dba 34 Dec 9 03:01 backup
drwxr-xr-x. 2 root root 6 Jun 11 15:06 DBA
drwxr-xr-x. 5 maria dba 4096 Sep 16 16:17 MARIA_DATA
drwxr-xr-x. 2 maria dba 25 Sep 16 09:57 MARIA_LOG

MariaDB 설치

1 계정 생성

1.1 시스템 계정 생성

  • user 및 group 생성
  • groupadd 로 dba 그룹생성 한다.
  • useradd 로 maria 계정생성 -g 옵션으로 group 을 dba로 설정 한다.
  • maria user의 HOME은 시스템 기본 설정을 따른다.(/MARIA)
  • MariaDB 관리 계정은 maria:dba 하나를 기본으로 한다.
[root@adb1 ~]# groupadd dba
[root@adb1 ~]# useradd -g dba maria
[root@adb1 ~]# cat /etc/group |grep dba
dba:x:500:
[root@adb1 ~]# cat /etc/passwd |grep maria
maria:x:500:500::/MARIA/:/bin/bash

1.2 maria 계정 환경변수 설정

[maria@jv0574 ~]$ vi ~/.bashrc

* 해당구문 추가 
export PATH=$PATH:/MARIA/mariadb/bin

* 수정내용 적용
source ~/.bashrc

2. 설치 디렉토리 생성 및 권한 설정

  • /box -> 개발
  • /data -> 운영
## 디렉토리 생성
#mkdir -p /MARIA/mariadb
#mkdir -p /box/MARIA_LOG/{general,relay,error,slow,binarylog}
#mkdir -p /box/{MARIA_DATA,MARIA_TEMP}


## 권한 설정
root@jv0574 [/box/MARIA_LOG]chown -R maria:dba /MARIA/ /box/MARIA_DATA/ /box/MARIA_LOG/ /box/MARIA_TEMP/

3. MariaDB 설치

3.1 설치파일 다운로드

https://mariadb.com/kb/en/postdownload/mariadb-server-10-2-14/
https://downloads.mariadb.org/mariadb

  • tar 압축파일을 통한 설치는 data directory 및 my.cnf 파일을 직접 생성해야 한다.

3.2 압축 풀기 및 경로 설정

## 압축풀기
root@jv0574 [/home/joinsiam]tar zxvf mariadb-10.2.14-linux-systemd-x86_64.tar.gz
## 경로 설정
root@jv0574 [/home/joinsiam]mv mariadb-10.2.14-linux-systemd-x86_64 /MARIA/mariadb_10.2.14
## 링크 생성
root@jv0574 [/MARIA]ln -s /MARIA/mariadb_10.2.14/ /MARIA/mariadb

4. MariaDB 설정

4.1 my.cnf 설정

MariaDB의 엔진 파라메터 설정은, default 값으로도 적정한 성능/안정성 수준을 가질 수 있으므로, 서버 물리 메모리 크기에 직접적으로 관계된 buffer pool size (일반적으로 물리메모리의 50% 설정)만 조정한 후 아래 권고 값들을 그대로 사용을 권장한다.

[client]
socket=/tmp/mysql.sock

[mysqld]
user=maria

sql-mode=STRICT_ALL_TABLES,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION # ANSI_QUOTES 의 경우 신규 프로젝트 생성시만 적용
lower_case_table_names=1   #데이터베이스 또는 테이블의 대소문자구분하지 않음으로 설정
basedir=/MARIA/mariadb
port=3306
socket=/tmp/mysql.sock

datadir=/box/MARIA_DATA
tmpdir=/box/MARIA_TEMP
#secure_file_priv=/tmp # LOAD_FILE()함수 설정

# Character set Config
character-set-client-handshake=FALSE # skip-character-set-client-handshake
character-set-server=utf8mb4
init_connect=SET collation_connection = utf8mb4_general_ci
init_connect=SET NAMES utf8mb4



# Common Config
interactive_timeout=1800 # 콘솔/터미널  timeout 시간, Default Value: 28800
#max_allowed_packet=128M
max_connections=1000 # 최대 커넥션 수 WAS의 커넥션풀보다 크게 설정
skip-name-resolve=1


# binlog_cache_size=1M  # 한 트랜잭션 동안 binary log 에 쓸 변경분 캐쉬 크기
# max_heap_table_size=2048M # MEMORY 스토리지 엔진 변수
# skip-external-locking #for MyISAM , Aria
# max_length_for_sort_data=1024 # default 1024
# tmp_table_size=2048M # default 16M
table_open_cache=10240 # Maximum number of open tables cached in one table cache instance default 2000
table_open_cache_instances=16 # default 8
transaction-isolation= READ-COMMITTED
open_files_limit = 21515

performance_schema=1 # 관련부분 추가 설정 필요

# Buffer_size Config
# 유지보수 업체 setting값
# read_buffer_size=2M # for MyISAM, Aria and MERGE tables
# join_buffer_size=2M # Default Value: 262144 (256kB) 최소 크기이므로 낮게 설정해도 됨
# read_rnd_buffer_size=8M # for MyISAM
# sort_buffer_size=1M # default 2M


# Query Cache Disable
# MySQL 8.0 에서는 사라진 기능
query_cache_type=0
query_cache_size=0

# Log Config
log-bin=/box/MARIA_LOG/binary/mysql-bin
relay-log=/box/MARIA_LOG/relay/relay-log # 슬레이브의 I/O 쓰레드가 마스터로부터 갱신로그(갱신관련 쿼리를 기록한 데이터)를 수신해서 슬레이브 측에 저장한 것
expire_logs_days=7 # binary log 저장기한
max_binlog_size=1G
sync_binlog=1 #bin log가 쓰일때마다 disk flush
binlog_format=mixed

log-error=/box/MARIA_LOG/error/mysql.err
slow_query_log_file=/box/MARIA_LOG/slow/mysql-slow-query.log
#slow_query_log=1 #slow쿼리 로그 활성화
#long_query_time=10 # 해당 초 이상의 슬로우 쿼리 기록

#general_log=1
#general_log_file=/box/MARIA_LOG/general/mysql_general.log

# Innodb config
innodb_data_home_dir=/box/MARIA_DATA
# innodb_log_group_home_dir=/box/MARIA_DATA
innodb_buffer_pool_size = 3G #전체 메모리의 50~80%
innodb_data_file_path=ibdata1:1024M;ibdata2:1024M;ibdata3:1024M:autoextend
innodb_file_per_table=1
innodb_flush_method= O_DIRECT
# innodb_lock_wait_timeout=50 # lock 대기하는 시간, default 50
# innodb_log_buffer_size=128M # redo log 버퍼 크기 , default 16M
# innodb_log_file_size= 512M # redo log 파일 크기, default 96M
# innodb_log_files_in_group=8
# innodb_thread_sleep_delay=0
# innodb_fast_shutdown
# innodb_autoinc_lock_mode=1
#innodb_thread_concurrency = 0 # 10.6 버전부터 삭제됨 동시 쓰레드 수 , default 0
innodb_read_io_threads = 4 # default 4
innodb_write_io_threads = 4 # default 4
# innodb_open_files = 8192 # 최대 열어놓을수 있는 .ibd파일 수

# MyISAM Config
# bulk_insert_buffer_size = 64M
# key_buffer_size =128M
# myisam_max_sort_file_size =10G
# myisam_recover_options
# myisam_repair_threads= 1
# myisam_sort_buffer_size =64M

# Replication related settings
# log_bin_trust_function_creators = 1 # replication환경에서는 이 설정을 해야만 routine 생성 가능

#server-id =1

[mysqldump]
# quick # buffer쓰지 않고 direct로dump받기
# max_allowed_packet=512M

설정 참고

* socket :
>mysql 서버프로세스(mysql)과 클라이언트 프로세스가 통신하기 위해 사용됨
기동중에만 생성되고 종료시 삭제
mysqld와 클라이언트 모두 사용가능한 위치에 있어야함
* performance_schema :
성능 지표 수집 관련 설정
> 참고
https://myinfrabox.tistory.com/194

* skip-name-resolve=1
>MySQL 서버는 외부로 부터 접속 요청을 받을 경우 인증을 위해 IP 주소를 호스트네임으로 바꾸는 과정을 수행하여 접속시에 불필요한 부하가 발생하게 됩니다. skip-name-resolve를 설정하시고 접속시에 IP 기반으로 접속을 하게 되면 hostname lookup 과정을 생략하게 되어 좀 더 빠르게 접속을 하실 수 있습니다.

# pid-file=/MARIA_DATA/mysql.pid -> 미 설정시 DATA_DIR/HOST_NAME.pid 라는 경로 및 파일명을 갖는다.

5. 설치

./scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=maria

설치로그

[maria@jv0574 mariadb]$ ./scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=maria
Installing MariaDB/MySQL system tables in '/box/MARIA_DATA' ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/MARIA/mariadb/bin/mysqladmin' -u root password 'new-password'
'/MARIA/mariadb/bin/mysqladmin' -u root -h jv0574 password 'new-password'

Alternatively you can run:
'/MARIA/mariadb/bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/MARIA/mariadb' ; /MARIA/mariadb/bin/mysqld_safe --datadir='/box/MARIA_DATA'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/MARIA/mariadb/mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

6. 서버 기동

6.1 systemctl에 등록 후 기동/중지

6.1.1

/etc/systemd/system 디렉토리에 maria.service 파일 생성

[Unit]

Description=MariaDB

#After=network.target
After=syslog.target



[Install]

WantedBy=multi-user.target

#Alias=maria



[Service]

Type = forking

# Start main service
#ExecStart=/MARIA/mariadb/bin/mysqld_safe --user=maria
#ExecStart=/etc/init.d/maria start
ExecStart=/MARIA/mariadb/support-files/mysql.server start
  • 오류해결
  • ExecStart=/MARIA/mariadb/support-files/mysql.server start 로 기동시 Type= forking 으로 설정해야한다.
  • ExecStart=/MARIA/mariadb/bin/mysqld_safe --user=maria 기동시 Type=forking 있으면 기동이 제대로 되지 않는다.

6.1.1 기동/중지 명령어

  • 기동
    systemctl start maria

  • 중지
    systemctl stop maria

  • 상태확인

  1. systemctl status maria
  • MariaDB 종료 이후 , 꼭 프로세스가 종료되었는지 확인하고, error로그도 확인

    ps -ef | grep mysql
    vi /box/MARIA_LOG/error/mysql.err

서버 재부팅시 DB 기동되도록 설정

  • systemd 에 등록하여, CentOS 재부팅시 DB 기동되도록 설정
root@jv0574 [/etc/systemd/system]systemctl enable maria
  • systemd 재기동 등록 확인
  1. systemctl is-enable maria
  2. cd /etc/systemd/system/multi-user.target.wants
    해당 디렉토리안에 maria.service 존재하면, OS 재부팅시 자동 DB 재기동
  • 오류해결
    • service 파일 변경시, systemctl daemon-reload 명령어를 통해 변경사항 반영
    • systemctl enable maria 로 등록시, Aliace 부분이 service 파일 이름과 같으면 오류 발생
      ex) service 파일이름이 maria.service 일경우 , alias=maria.service이면 오류 발생
  • 참고사항

    CentOS6 버전까지는 chkconfig 유틸을 사용하여 자동시작 등록하였으나,
    CentOS7 버전부터는 systemctl을 사용한 자동시작을 권장한다.

7. 추가 설정

7.1 mysql_secure_installation 설치

기본적인 보안을 위한 여러 설정을 모아놓은 스크립트이다.
root 비번변경 / testdb 및 익명 계정 삭제 등의 작업을 진행한다.

7.1.1 mysql_secure_installation 파일의 26 라인 수정

[maria@adb1 mariadb]#vi bin/mysql_secure_installation 
…
basedir=/MARIA/mariadb
…

7.1.2 mysql_secure_installation 실행

[maria@jv0574 bin]$ mysql_secure_installation

7.1 METADATA_LOCK_INFO 플러그인 설치

The METADATA_LOCK_INFO plugin creates the METADATA_LOCK_INFO table in the INFORMATION_SCHEMA database. This table shows active metadata locks. The table will be empty if there are no active metadata locks.

root@jv0574 [/MARIA/mariadb/bin]./mysql -uroot -p
MariaDB [(none)]> INSTALL SONAME 'metadata_lock_info'
MariaDB [(none)]> SELECT * FROM information_schema.metadata_lock_info;

7.2 simple_password_check 설정

  • 기본적인 PW 복잡성 설정을 위해 해당 플러그인 설치

-- plugin 확인
show plugins
show global variables like 'simple_password_check%'
-- 설치
INSTALL SONAME 'simple_password_check';
-- UNINSTALL SONAME 'simple_password_check';

  • my.cnf 설정

[mysqld]
simple_password_check = ON
simple_password_check_digits = 1 # 숫자포함
simple_password_check_letters_same_case = 0 # 대소문자 구분 안함
simple_password_check_minimal_length = 8
simple_password_check_other_characters = 1 # 특수문자 포함

profile
실력을 쌓아가는 하루하루

0개의 댓글