[DBMS] MariaDB cnf 파일 설정
DBMS인 MariaDB를 설치하면 MariaDB cnf 파일 설정을 하게 되는데 MySQL MariaDB 환경설정 파일 mycnf는 /etc/my.cnf 경로에 있으며, /etc/my.cnf.d/ 디렉토리를 포함하는 설정이 기본으로 잡혀 있습니다. 11.3 버전 설치 시 화면입니다.
#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client-server]
#
# include *.cnf from the config directory
#
!includedir /etc/my.cnf.d
✅ MariaDB cnf 파일 구성: /etc/my.cnf.d 디렉토리
/etc/my.cnf.d 디렉토리 내의 구성은 다음과 같습니다.
├── client.cnf
├── client.cnf_ori
├── enable_encryption.preset
├── mysql-clients.cnf
├── server.cnf
└── spider.cnf
✅ MariaDB Client와 Server의 차이
일반적으로 서버는 중앙 데이터 저장소가 있는 곳이고 클라이언트는 해당 저장소에 액세스하는 데 사용하는 것입니다. MySQL 및 MariaDB에서 Client와 Server의 차이는 다음과 같습니다.
MariaDB(&MySQL) 서버 패키지를 설치하면, MariaDB 데이터베이스 서버에 상호 작용 할 수 있는 MariaDB 클라이언트가 함께 설치됩니다. MariaDB 서버는 데이터를 유지하고 SQL 쿼리 인터페이스를 제공하는 데 사용됩니다. mysql 클라이언트의 목적은 해당 쿼리 인터페이스를 사용할 수 있게 하는 것입니다.
간단히 정의하자면 다음과 같습니다.
1. MariaDB Server
MariaDB Server(또는 MySQL-Server) 패키지를 사용하면 여러 데이터베이스를 호스팅하고 해당 데이터베이스에 대한 쿼리를 처리할 수 있는 MariaDB Server를 실행할 수 있습니다. MariaDB Server에서 [mariadb] 또는 [mysqld]는 데이터베이스 서버 프로그램입니다. 디스크나 메모리에 있는 실제 데이터베이스에 대한 액세스를 관리합니다.
2. MySQL MariaDB Client
MariaDB Client(MySQL-Client) 패키지를 사용하면 MariaDB Server에 연결할 수 있습니다. 그러면 MariaDB(MySQL) 명령줄 프로그램이 제공됩니다. MariaDB Client를 사용하여 모든 MariaDB Server에 명령을 전송할 수 있습니다.
✅ MariaDB cnf 파일 설정하기
MariaDB cnf 파일은 10.2 버전부터 etc/my.cnf.d/ 폴더 안에 client.cnf 및 server.cnf 파일로 나뉘게 되었습니다.
옵션 파일 구문
MariaDB 옵션 파일의 구문은 다음과 같습니다.
MariaDB 파일 구성 참조
- #으로 시작하는 줄은 주석입니다.
- 빈 줄은 무시됩니다.
- 옵션 그룹은 구문을 사용합니다
[group-name]
. 사용 가능한 옵션 그룹에 대한 자세한 내용은 아래 옵션 그룹 섹션을 참조하세요 .- 동일한 옵션 그룹이 여러 번 나타날 수 있습니다.
- 지시문
!include
을 사용하여 다른 옵션 파일을 포함할 수 있습니다. 이 구문에 대한 자세한 내용은 아래의 옵션 파일 포함 섹션을 참조하세요 .- 지시어 는 주어진 디렉토리의 모든 파일(및 잠재적인 파일)을
!includedir
포함하는 데 사용될 수 있습니다 . 디렉토리 내의 옵션 파일은 알파벳순으로 읽혀집니다. 이 구문에 대한 자세한 내용은 아래의 옵션 파일 디렉터리 포함 섹션을 참조하세요 ..cnf
.ini
- 옵션의 대시(
-
)와 밑줄( )은 서로 바꿔 사용할 수 있습니다._
- 값을 인용하는 데 큰따옴표를 사용할 수 있습니다.
\n
,\r
,\t
,\b
,\s
,\"
,\'
및 는\\
각각 새 줄, 캐리지 리턴, 탭, 백스페이스, 공백, 큰따옴표, 작은따옴표 및 백슬래시에 대한 문자 이스케이프로 인식됩니다.- 특정 옵션 접두사가 지원됩니다. 사용 가능한 옵션 접두사에 대한 자세한 내용은 아래 옵션 접두사 섹션을 참조하세요 .
- 사용 가능한 옵션에 대한 자세한 내용은 아래 옵션 섹션을 참조하세요 .
서버 옵션 그룹 | 설명 |
---|---|
[client-server] | 모든 MariaDB 클라이언트 프로그램 과 MariaDB 서버가 읽는 옵션입니다 . 이는 서버와 클라이언트 간에 공통되는 소켓 및 포트와 같은 옵션에 유용합니다. |
[server] | MariaDB 서버가 읽는 옵션입니다. |
[mysqld] | mysqld MariaDB 서버와 MySQL 서버를 모두 포함하는 에서 읽는 옵션입니다 . |
[mysqld-X.Y] | mysqld MariaDB 서버와 MySQL 서버를 모두 포함하는 특정 버전의 에서 읽는 옵션입니다 . 예를 들어, [mysqld-10.4] . |
| MariaDB 서버가 읽는 옵션입니다. |
[mariadb-X.Y] | 특정 버전의 MariaDB 서버에서 읽는 옵션입니다. 예를 들어, [mariadb-10.4] . |
[mariadbd] | MariaDB 서버가 읽는 옵션입니다. MariaDB 10.4.6 부터 사용 가능합니다 . |
[mariadbd-X.Y] | 특정 버전의 MariaDB 서버에서 읽는 옵션입니다. 예를 들어, [mariadbd-10.4] . MariaDB 10.4.6 부터 사용 가능합니다 . |
[galera] | MariaDB 서버에서 읽은 옵션이지만 Galera Cluster 지원 으로 컴파일된 경우에만 해당됩니다 . MariaDB 10.1 이상 에서는 Linux의 모든 빌드가 Galera Cluster 지원으로 컴파일됩니다. 이러한 빌드 중 하나를 사용하면 Galera Cluster 기능이 활성화되지 않은 경우에도 이 옵션 그룹의 옵션을 읽습니다 . |
클라이언트 옵션 그룹 | 설명 |
---|---|
[client] | MariaDB 및 MySQL 클라이언트를 모두 포함하는 모든 MariaDB 및 MySQL 클라이언트 프로그램 에서 읽는 옵션입니다 . 예를 들어, mariadb-dump . |
[client-server] | 모든 MariaDB 클라이언트 프로그램과 MariaDB 서버가 읽는 옵션입니다 . 이는 서버와 클라이언트 간에 공통되는 소켓 및 포트와 같은 옵션에 유용합니다. |
[client-mariadb] | 모든 MariaDB 클라이언트 프로그램이 읽는 옵션입니다 . |
1. server.cnf 파일 설정
설정은 /etc/my.cnf 파일을 통합으로 사용하거나 위 두 개의 파일에 나눠서 설정할 수 있습니다.
/etc/my.cnf.d/server.cnf 파일은 서버 설정을 위한 실질적인 cnf 파일입니다. cnf 파일의 옵션 파일 구문과 서버&클라이언트 옵션 그룹을 참조하면 어떤 구성으로 설정해야 하는지 간단하게 이해할 수 있습니다.
server.cnf 파일에서 [server], [mariadb], [mysqld] 파일 등의 서버 설정을 할 수 있으며, [mysqld]는 MariaDB와 MySQL 공통 설정을, [mariadb]는 MariaDB 설정만 할 수 있습니다. 초기 세팅 시 server.cnf 파일의 안내 내용을 참조할 수 있습니다.
[mariadb] or [myslqd] 둘 중에 하나에 설정해도 개인적으로 크게 문제는 되지 않는 것으로 확인됩니다. 이유는 MariaDB가 MySQL에서 나온 것이기 때문으로 생각되며 추가 구글링은 하지 않았습니다. mysql의 이름으로 된 파일이나 디렉토리를 사용해도 설정 시 파일 명만 상황에 맞게 설정하는 것으로 진행 했습니다.
[mysqld]
## 기본 세팅(필수) ##
port = 3306
socket = /var/lib/mysql/mysql.sock # 기본 설치 폴더에 소캣 설정
basedir = /usr # 기본 설정값임.
datadir = /var/lib/mysql/ # 기본 데이터 설치 폴더
user = mysql
max_allowed_packet = 256M
max_connect_errors = 100000 # 10만으로 설정
pid_file = /var/lib/mysql/mysqld.pid # 기본 데이터 폴더에 설정함.
bind_address = 127.0.0.1 # 원격 접속 허용 시 0.0.0.0 으로 변경
tmpdir = /tmp
skip_external_locking # 외부 잠금 해제
skip_name_resolve # 이름 확인 건너뛰기
default_authentication_plugin = mysql_native_password
# ▲ MySQL 8.0 및 MariaDB 10.6 버전 이후부터 비밀번호 해시 알고리즘인
# SHA-256을 구현하는 두가지 인증 플러그인을 지원.
# mysql_native_password에서 caching_sha2_password로 변경되면서
# ① 기본적인 SHA-256 인증을 구현한 플러그인: sha256_password
# ② sha256_password 방식에서 성능 향샹을 위해 서버 캐싱을 이용하는 플러그인 : caching_sha2_password
# CMS와의 하위 호환성을 위해 default_authentication_plugin 설정을 사용
## 캐릭터셋 ##
# mb4가 이모티콘까지 지원하기 때문에 mb4가 필수(최소)라고 할 수 있음.
skip-character-set-client-handshake
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init-connect= 'SET NAMES utf8mb4'
## 연결 설정 ##
# thread MySQL 및 MariaDB는 하나의 클라이언트가 서버 접속을 할 떄 마다 종속적인 스레드를 생성함.
# 이후 커넥션에서의 스레드 역할(쿼리 작업)이 끝나면 스레드를 제거함.
max_connections = 150 #
back_log = 512
thread_cache_size = 100 #
thread_stack = 192K
interactive_timeout = 180 # 상효 작용 시간
wait_timeout = 180
## InnoDB 설정 ##
default_storage_engine =InnoDB
innodb_buffer_pool_instances = 4 # InnoDB 풀 크기 1GB당 인스턴스 1개 사용 - 최대값은 64
innodb_buffer_pool_size = 4G # RAM의 최대 70-80%를 사용합니다.
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_buffer_size = 16M
innodb_log_file_size = 1G
innodb_sort_buffer_size = 4M
# UPD - 디스크에 쓰기 전에 정렬 작업을 위해 메모리로 읽어들이는 데이터의 양을 정의합니다
# (기본값은 1M / 최대값은 64M)
innodb_stats_on_metadata = 0
# innodb_use_fdatasync = 1 # MySQL v8.0.26+에만 (!)
# innodb_temp_data_file_path = ibtmp1:64M:autoextend:max:20G # ibtmp1 파일의 최대 크기를 제어합니다.
# innodb_thread_concurrency = 4
# 선택 사항: 시스템의 CPU 수(1 또는 2 빼기)를 더 좋게 설정합니다.
# CPU 사용량을 포함합니다. 예를 들어 시스템에 8개의 CPU가 있는 경우 6개 또는 7개를 시도하고 확인하십시오.
# MySQL/MariaDB에 의해 생성된 전체 로드.
innodb_read_io_threads = 64
innodb_write_io_threads = 64
# innodb_io_capacity = 2000 # 스토리지 기술에 따라 다릅니다.
# SSD에는 2000을 사용하고 NVMe에는 더 많은 것을 사용합니다.
# innodb_io_capacity_max = 4000 # 일반적으로 innodb_io_capacity 값의 두 배
참조: 깃허브 my.cnf 구성# server.cnf의 기본 값
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# this is read by the standalone daemon and embedded servers
[server]
# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
# This group is read by both MariaDB and MySQL servers
[mysqld]
#
# * Galera-related settings
#
[galera]
# Mandatory settings
#wsrep_on=ON
#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
#bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0
# this is only for embedded server
[embedded]
# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
# This group is only read by MariaDB-10.11 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.11]
기본 캐릭터셋은 다음과 같습니다.
MariaDB [(none)]> status;
--------------
mysql from 11.3.2-MariaDB, client 15.2 for Linux (x86_64) using EditLine wrapper
Connection id: 3
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 11.3.2-MariaDB MariaDB Server
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8mb3
Conn. characterset: utf8mb3
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 1 min 58 sec
Threads: 1 Questions: 5 Slow queries: 0 Opens: 17 Open tables: 10 Queries per second avg: 0.042
[myslqd]와 [client]에 캐릭터셋을 설정한 후에 재시작 후 확인한 캐릭터셋입니다.
MariaDB [(none)]> status;
--------------
mariadb from 11.3.2-MariaDB, client 15.2 for Linux (x86_64) using EditLine wrapper
Connection id: 3
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 11.3.2-MariaDB MariaDB Server
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 11 sec
Threads: 1 Questions: 4 Slow queries: 0 Opens: 17 Open tables: 10 Queries per second avg: 0.363
--------------
설정된 스토리지 엔진을 확인합니다.
2. client.cnf 파일 설정
[client]
default-character-set= utf8mb4
port= 3306
#
# These two groups are read by the client library
# Use it for options that affect all clients, but not the server
#
[client]
# This group is not read by mysql client library,
# If you use the same .cnf file for MySQL and MariaDB,
# use it for MariaDB-only client options
[client-mariadb]
server.cnf와 client.cnf 파일은 Mariadb cnf 파일 하나에 설정을 묶어서 사용할 수 있으며 설정하는 관리자가 원하는 방향으로 설정하면 되겠습니다.
✅ MariaDB Storage Engines
MariaDB는 MySQL의 소스 코드에서 파생된 것으로, 따라서 그 역사는 MySQL에서 시작되었습니다. MySQL은은 테이블 생성 또는 채우기, 테이블 읽기, 적절한 인덱스 및 캐시 구축과 같은 작업을 플러그인에 위임했으며 대표적인 스토리지 엔진은 다음과 같습니다.
InnoDB와 MyISAM은 MySQL과 MariaDB의 주요 스토리지 엔진입니다. InnoDB 엔진은 대용량 데이터와 트랜잭션 처리에 효율적이며, MyISAM 엔진은 트랜잭션 없이 Read only 기능이 많은 서비스에 효율적입니다.
워드프레스 사용 시 스토리지 엔진 선택 사항
대부분의 사람들은 MyISAM이 읽기 속도가 더 빠르다고 자랑하지만, 대부분의 사람들은 키 캐시(key_buffer_size로 설정)라고 불리는 MyISAM의 많은 캐시가 .MYI 파일의 인덱스 페이지만 캐시한다는 사실을 잊어버립니다. 데이터 페이지를 캐시하지 않습니다. 32비트 시스템의 공식 최대 용량은 4GB입니다. 64비트에서는 8GB가 가장 좋습니다.
InnoDB 버퍼 풀은 데이터 및 인덱스 페이지를 캐시합니다. 보유하고 있는 서버에 따라 RAM에 전체 데이터세트까지 캐시할 수 있습니다. InnoDB를 RAM 최대 80%, DB 연결용 10%로 조정하고 OS용으로 10%를 남겨둘 수 있습니다. 이는 다른 운영 체제에서도 마찬가지입니다 .
출처: WordPress(MyISAM) 데이터베이스가 느린데 InnoDB로 전환해야 합니까?
데이터베이스 트랜잭션은 데이터베이스 상태를 변경하는 작업의 단위를 의미합니다. SQL 질의어(SELECT, INSERT, DELETE, UPDATE 등)를 사용하여 데이터베이스에 접근하며, 웹사이트 게시판에서는 글 작성, 등록 및 업데이트를 위해 Insert 문을 사용하고, SELECT 문을 통해 게시판 데이터를 유지합니다. 이 작업이 insert문과 select문이 합쳐져 있는 트랜잭션의 단위입니다.