/etc/my.cnf
# 아래 내용 추가
[server]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
transaction-isolation=READ-COMMITTED
symbolic-links=0
# 공통 버퍼/스레드
key_buffer_size=32M
max_allowed_packet=32M
thread_stack=256K
thread_cache_size=128
max_connections=500
read_buffer_size=2M
read_rnd_buffer_size=16M
sort_buffer_size=8M
join_buffer_size=8M
# 문자셋 (이모지·4-byte 지원하는 utf8mb4 권장)
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# InnoDB
innodb_file_per_table=1
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=64M
innodb_buffer_pool_size=4G # 물리 메모리의 50~70%
innodb_thread_concurrency=8
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_io_capacity=2000 # SSD 기준
innodb_read_io_threads=8
innodb_write_io_threads=8
# RMS (function, trigger 생성에 대한 제약)
log_bin_trust_function_creators=1
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
⚠️ 10.2+ 부터 Deprecated된 항목:
innodb_file_format = barracuda(제거됨, Barracuda 고정)innodb_large_prefix = ON(기본값)query_cache_type / query_cache_size / query_cache_limit(10.1+ 권장 안함, 대부분 병목 원인)
/etc/my.cnf
[server]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
transaction-isolation=READ-COMMITTED
symbolic-links=0
key_buffer_size=32M
max_allowed_packet=32M
thread_stack=256K
thread_cache_size=128
max_connections=500
read_buffer_size=2M
read_rnd_buffer_size=16M
sort_buffer_size=8M
join_buffer_size=8M
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# InnoDB
innodb_file_per_table=1
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=64M
innodb_buffer_pool_size=4G
innodb_thread_concurrency=8
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
# Galera 필수: Row 기반 복제 + InnoDB
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
log_bin_trust_function_creators=1
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[mysqld]
#
# * Galera-related settings
#
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://cdpm01.haedongg.net,cdpm02.haedongg.net,cdpm03.haedongg.net"
#wsrep_sst_method=mariabackup # 10.5+ 권장 (rsync 대비 빠름)
wsrep_sst_method=rsync
wsrep_node_address="cdpm01.haedongg.net"
wsrep_node_name="cdpm01.haedongg.net"
# Allow server to accept connections on all interfaces.
#bind-address=0.0.0.0
# Optional setting
#wsrep_slave_threads=4
#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.
[mariadb]
# Version-specific group (예: 10.6 기준)
[mariadb-10.6]
mkdir /var/run/mariadb
chown -R mysql:mysql /var/run/mariadb
# 첫 번째 마스터 노드에서 부트스트랩
galera_new_cluster
# 나머지 노드에서
systemctl start mariadb
mysql -uroot -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
mysql -uroot -p -e "SHOW STATUS LIKE 'wsrep_ready';"
mysql -uroot -p -e "SHOW STATUS LIKE 'wsrep_local_state_comment';"
mariadb 서비스가 enable 일 경우 서버가 실행되면서 자동으로 cluster에 연결된다.
클러스터 전체가 비정상 종료된 경우, 가장 최신 seqno 값을 가진 노드에서 다음 작업을 수행한다.
# 1. 각 노드의 /var/lib/mysql/grastate.dat 파일에서 seqno 확인
cat /var/lib/mysql/grastate.dat
# 2. 가장 큰 seqno 값의 노드에서 safe_to_bootstrap 을 1로 변경
sed -i 's/safe_to_bootstrap: 0/safe_to_bootstrap: 1/' /var/lib/mysql/grastate.dat
# 3. 해당 노드에서 galera_new_cluster 로 부트스트랩
galera_new_cluster
# 4. 나머지 노드들은 systemctl start mariadb
또는 실행 중에 런타임으로 강제 부트스트랩:
SET GLOBAL wsrep_provider_options='pc.bootstrap=YES';