번개애비의 라이프스톼일

MariaDB(MySQL) 최적셋팅값 본문

IT

MariaDB(MySQL) 최적셋팅값

번개애비 2019. 5. 26. 21:16

[구성1]

CPU : 4Core

RAM : 32GB

(relication setting을 제외하고 셋팅해주면 된다. 물론 양방향 리플리케이션은 강추)

[mysqld]
log-bin=mysql-bin	#replication setting
server-id=2	#replication setting
binlog_format = 'MIXED'	#replication setting


datadir=C:/DB/data
port=3306

character-set-server=utf8

innodb_buffer_pool_size=20G
innodb_buffer_pool_instances = 20
innodb_write_io_threads = 8
innodb_read_io_threads = 8
max_heap_table_size=24m
tmp_table_size=24m
innodb_sort_buffer_size=64m
#innodb_force_recovery = 4

slave-skip-errors=all
skip-name-resolve
read_only=0

key_buffer_size = 768M 
max_allowed_packet = 1M 
table_open_cache = 512 
sort_buffer_size = 64M 
read_buffer_size = 24M 
read_rnd_buffer_size = 8M 
myisam_sort_buffer_size = 128M 
thread_cache_size = 20

# Try number of CPU's*2 for thread_concurrency 
thread_concurrency = 8
max_connections = 2048 
table_cache = 512

# Query Cache 
query_cache_limit=16M 
query_cache_size=1024M 
query_cache_type=1 

[client]
port=3306
plugin-dir=C:/DB/lib/plugin



 

[구성2]

CPU : 8Core

RAM : 16GB

(relication setting을 제외하고 셋팅해주면 된다. 물론 서버가 다수 있다면 양방향 리플리케이션은 강추)

[mysqld]
log-bin=mysql-bin	#replication setting
server-id=1	#replication setting
binlog_format = 'MIXED'	#replication setting


datadir=C:/DB/data
port=3306

character-set-server=utf8

innodb_buffer_pool_size=10G
innodb_buffer_pool_instances = 10
innodb_write_io_threads = 8
innodb_read_io_threads = 8

max_heap_table_size=24m
tmp_table_size=24m
innodb_sort_buffer_size=64m
#innodb_force_recovery = 4

read_only=0
slave-skip-errors=all
skip-name-resolve

key_buffer_size = 768M 
max_allowed_packet = 1M 
table_open_cache = 512 
sort_buffer_size = 64M 
read_buffer_size = 24M 
read_rnd_buffer_size = 8M 
myisam_sort_buffer_size = 128M 
thread_cache_size = 20

# Try number of CPU's*2 for thread_concurrency 
thread_concurrency = 16
max_connections = 2048 
table_cache = 512


# Query Cache 
query_cache_limit=16M 
query_cache_size=512M 
query_cache_type=1 

[client]
port=3306
plugin-dir=C:/DB/lib/plugin

 

보통 서버 증설을 할때 웹서버와 DB서버 분리를 많이들 사용하지만, 웹서버와 DB서버를 분리하지 않고

웹데이터는 rsync, DB데이터는 Replication 을 시켜서 DNS Roundrobin 하는것을 권장한다.

 

필자는 2개의 윈도우서버 위에 IIS10+PHP 웹서버와 MariaDB 10.5 DB서버를 운영하고

윈도우 특성상 rsync대신 Robocopy를, MariaDB는 양방향 Replication을 사용하고 있다.

 

2개의 윈도우서버는 같은 NAT단위안에 있는 환경이 아니기 때문에 각각의 서버 앞단의 DHCP에서 openVPN을 통해 터널링을 하여 데이터의 싱크를 맞추고 있다. 

 

확실히 단순히 웹, DB분리보다는 성능차이가 확연하고, 비록 완벽한 로드밸러싱은 아니지만, DNS 라운드로빈으로 서버다운 타임을 확실하게 줄일 수 있었다.

그리고 무엇보다 데이터의 완벽한 이중화 구성으로 하나의 서버에 문제가 발생할경우 발빠르게 대응이 가능하다는점!

 

현재 MySQL상태정보이다.

phpMyAdmin을 통해 주기적으로 MySQL상태를 점검해주는것이 중요하다.

실패한 시도가의 값이 1%미만으로 구성되어야 한다.

 

다음에는 MariaDB의 양방향 리플리케이션에 대해 다뤄보겠음 ㅎㅎ

Comments