본문 바로가기

Database/Mariadb

CentOS 7.9에 mariadb 10.3.27를 바이너리 tar.gz 파일로 설치하기

728x90
반응형

## mariadb 에 대한 설명은 위키를 참고

https://ko.wikipedia.org/wiki/MariaDB

 

MariaDB - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. MariaDB는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다. MySQL과 동일한 소스 코드를 기반으로 하며, GPL v2 라이선스를 따른다. 오라클 소유의 현재 불

ko.wikipedia.org

 

## 10.3.x 변경 및 개선사항

mariadb.com/kb/en/changes-improvements-in-mariadb-103/

 

Changes & Improvements in MariaDB 10.3

Current Version: 10.3.27 | Status: Stable (GA) | Release Date: 11 Nov 2020

mariadb.com

 

## mariadb 10.3.27 장점

  • innodb 스토리지 엔진을 이용한 트랜잭션 어플리케이션 개발 가능(당연한 얘기..)
  • 파티셔닝 테이블 기능을 이용하여 대용량 데이터를 관리할 수 있다. (일파티션으로 설정된 테이블이 1TB가 넘는 경우도 무리없이 사용가능)
  • JSON Column DataType 및 function 을 지원
  • SEQUENCE 사용가능(auto_increment 가 있긴 하지만 있으면 좋을듯...)
  • 다양한 sql tool 을 사용할 수 있다.(heidiSQL, sqlyog 등등등...)
  • 경험 : 웹어플리케이션을 개발하고 운영할때 mariadb 를 적용하였는데 문제없이 사용가능이 가능하였다.(일일 최소 5백만건 Row 생성)

 

## rpm이 아닌 바이너리방식(tar.gz 파일)로 설치하는 이유

  • rpm 보다 설치하는 방법이 어렵지만 엔진/데이터/설정파일경로를 지정할 수 있다.
  • mariadb 구성정보를 파악할 수 있다.
  • 삭제가 쉽다.

## mariadb 설치하기

0. OS설정

# 호스트명 develop로 변경

hostnamectl set-hostname develop

서버환경에 맞는 호스트명을 지정하면된다.

 

# 방화벽 해제

# systemctl stop firewalld
# systemctl disable firewalld
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

/etc/selinux/config 파일의 SELINUX 속성을 변경하면 재부팅하여도 방화벽해제가 영구적용된다.

사이트 환경에 맞는 방화벽 설정을 적용하여야 보안에 안전한 DB 환경을 구성할 수가 있다.

 

# 프로세스 개수제한 및 파일오픈 개수제한 조정

vi /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

:wq

리눅스 OS는 자원관리를 위해 프로세스 제한개수, 파일오픈 제한개수를 설정하고 있어 운영환경에서는 기본수치값 보다 높은 수치값을 적용해야 추후 장애요소를 줄일 수 있다.

 

# OS 재기동

reboot

재기동을 하여 설정을 영구 적용하도록 하자.

 

1. 사전준비

mysql user 생성 및 data 및 로그를 저장할 폴더/파일를 생성한다.

[root@develop ~]# useradd mysql
[root@develop ~]# id mysql
uid=1001(mysql) gid=1001(mysql) groups=1001(mysql)
[root@develop ~]#
[root@develop ~]# mkdir /home/mysql/log
[root@develop ~]# chown -R mysql.mysql /home/mysql/log
[root@develop ~]#
[root@develop ~]# mkdir -p /data/mariadb/master
[root@develop ~]# mkdir -p /data/mariadb/ibdata
[root@develop ~]# mkdir -p /data/mariadb/iblog
[root@develop ~]# mkdir -p /data/mariadb/log-bin
[root@develop ~]# chown -R mysql.mysql /data/mariadb
[root@develop ~]#
[root@develop /]# ls -al /data/mariadb/
total 0
drwxr-xr-x. 6 mysql mysql 62 Dec 15 20:40 .
drwxr-xr-x. 3 root  root  21 Dec 15 20:39 ..
drwxr-xr-x. 2 mysql mysql  6 Dec 15 20:39 ibdata
drwxr-xr-x. 2 mysql mysql  6 Dec 15 20:40 iblog
drwxr-xr-x. 2 mysql mysql  6 Dec 15 20:39 log-bin
drwxr-xr-x. 2 mysql mysql  6 Dec 15 20:39 master
[root@develop local]#
[root@develop local]# touch /var/log/mysqld.log
[root@develop local]# chmod 644 /var/log/mysqld.log
[root@develop local]# chown mysql:mysql /var/log/mysqld.log
[root@develop local]#
[root@develop local]# ls -al /var/log/mysqld.log
-rw-r--r--. 1 mysql mysql 0 Dec 15 20:56 /var/log/mysqld.log
[root@develop local]#

 

2. 설치파일을 다운로드 받는다.

mariadb.com/downloads/ 접속하여 'Show All Files' 를 클릭한다.

mariadb-10.3.27 > bintar-linux-x86_64 > mariadb-10.3.27-linux-x86_64.tar.gz 클릭하여 다운로드한다.

 

3. 설치할 CentOS 에 mariadb 설치파일을 /root 폴더에 업로드한다.

[root@develop ~]# ll
total 949188
-rw-------. 1 root root      1670 Dec 13 10:31 anaconda-ks.cfg
-rw-r--r--. 1 root root      1684 Dec 13 01:34 initial-setup-ks.cfg
-rw-r--r--. 1 root root 971958128 Dec 15 20:25 mariadb-10.3.27-linux-x86_64.tar.gz
[root@develop ~]#

 

4. tar zxvf 명령어를 이용하여 파일을 압축해제 한다.

[root@develop ~]# tar zxvf mariadb-10.3.27-linux-x86_64.tar.gz
mariadb-10.3.27-linux-x86_64/
mariadb-10.3.27-linux-x86_64/support-files/
mariadb-10.3.27-linux-x86_64/support-files/mysql.server
mariadb-10.3.27-linux-x86_64/support-files/policy/
.
.
.
mariadb-10.3.27-linux-x86_64/CREDITS
mariadb-10.3.27-linux-x86_64/README.md
[root@develop ~]#

 

5. 폴더를 /usr/local/ 로 이동한 뒤 심볼릭링크를 생성한다.

[root@develop ~]# mv mariadb-10.3.27-linux-x86_64 /usr/local/
[root@develop ~]# cd /usr/local/
[root@develop local]# ln -s mariadb-10.3.27-linux-x86_64/ mysql

 

6. 설정파일 복사 및 변경

[root@develop local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@develop local]# vi /etc/init.d/mysqld

# basedir, datadir 경로 변경
basedir=/usr/local/mysql
datadir=/data/mariadb/master

:wq
[root@develop local]#
[root@develop local]# vi ~/.bash_profile

export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts

:wq
[root@develop local]# source ~/.bash_profile
[root@develop local]# 
[root@develop local]# cd /etc
[root@develop etc]# mv my.cnf my.cnf.bak
[root@develop etc]# vi my.cnf
# Mariadb
[server]

# mysqld standalone daemon
[mysqld]
port                            = 3306
datadir                         = /data/mariadb/master
socket                          = /tmp/mysql.sock

# Character set (utf8mb4)
character_set-client-handshake  = FALSE
character-set-server            = utf8mb4
collation_server                = utf8mb4_general_ci
init_connect                    = set collation_connection=utf8mb4_general_ci
init_connect                    = set names utf8mb4

# Common
table_open_cache                = 2048
max_allowed_packet              = 32M
binlog_cache_size               = 1M
max_heap_table_size             = 64M
read_buffer_size                = 64M
read_rnd_buffer_size            = 16M
sort_buffer_size                = 8M
join_buffer_size                = 8M
ft_min_word_len                 = 4
lower_case_table_names          = 1
default-storage-engine          = innodb
thread_stack                    = 240K
transaction_isolation           = READ-COMMITTED
tmp_table_size                  = 32M

# Connection
max_connections                 = 200
max_connect_errors              = 50
back_log                        = 100
thread_cache_size               = 100

# Query Cache
query_cache_size                = 32M
query_cache_limit               = 2M

log-bin                         = /data/mariadb/log-bin/mysql-bin
binlog_format                   = mixed
max_binlog_size                 = 128M
expire_logs_days                = 7

slow_query_log                  = 1
long_query_time                 = 5
log_output                      = FILE,TABLE
log_error                       = /var/log/mysqld.log
slow_query_log_file             = /home/mysql/log/mysql_slow_query.log
general_log_file                = /home/mysql/log/mysql_general.log

key_buffer_size                 = 32M
bulk_insert_buffer_size         = 32M
myisam_sort_buffer_size         = 64M
myisam_max_sort_file_size       = 256M
myisam_repair_threads           = 1

# Innodb
innodb_buffer_pool_size         = 1G   # 현재 서버 사양의 70~80%를 설정한다.
innodb_file_per_table           = 1
innodb_data_home_dir            = /data/mariadb/ibdata
innodb_data_file_path           = ibdata1:1000M;ibdata2:1000M;ibdata3:1000M;ibdata4:1000M:autoextend:max:2000M
innodb_write_io_threads         = 8
innodb_read_io_threads          = 8
innodb_thread_concurrency       = 16
innodb_flush_log_at_trx_commit  = 1
innodb_log_group_home_dir       = /data/mariadb/iblog
innodb_log_buffer_size          = 32M
innodb_log_file_size            = 128M
innodb_log_files_in_group       = 10
innodb_max_dirty_pages_pct      = 90
innodb_lock_wait_timeout        = 120

:wq
[root@develop etc]#

 

my.cnf 설정은 jojoldu.tistory.com 블로그를 참고하였다. (아주 좋은 블로그)

jojoldu.tistory.com/461

 

MariaDB 설치 및 설정

AWS 를 쓸 수 있다면 Aurora가 정답이지만, IDC를 쓰고 있다면 MariaDB 혹은 MySQL을 직접 설치해서 사용할 필요가 있습니다. 여기선 IDC 환경에서 MariaDB 운영을 위해 필요한 기본 설정들과 설치를 진행해

jojoldu.tistory.com

 

7. DB install 및 mariadb 서비스 기동

[root@develop etc]# mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mariadb/master --defaults-file=/etc/my.cnf
Installing MariaDB/MySQL system tables in '/data/mariadb/master' ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
.
. 생략
.
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 strong and vibrant community:
https://mariadb.org/get-involved/

[root@develop etc]#
[root@develop etc]#
[root@develop etc]# service mysqld start
Reloading systemd:                                         [  OK  ]
Starting mysqld (via systemctl):                           [  OK  ]
[root@develop etc]#
[root@develop etc]# systemctl status mysqld
● mysqld.service - LSB: start and stop MariaDB
   Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
   Active: active (running) since Tue 2020-12-15 21:31:57 KST; 2min 14s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 7532 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
    Tasks: 45
   CGroup: /system.slice/mysqld.service
           ├─7722 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mariadb/master --pid-file=/data/mariadb/master/develop.pid
           └─7982 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mariadb/master --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log...

Dec 15 21:31:55 develop systemd[1]: Starting LSB: start and stop MariaDB...
Dec 15 21:31:56 develop mysqld[7532]: Starting MariaDB.201215 21:31:56 mysqld_safe Logging to '/var/log/mysqld.log'.
Dec 15 21:31:56 develop mysqld[7532]: 201215 21:31:56 mysqld_safe Starting mysqld daemon with databases from /data/mariadb/master
Dec 15 21:31:57 develop mysqld[7532]: SUCCESS!
Dec 15 21:31:57 develop systemd[1]: Started LSB: start and stop MariaDB.
[root@develop etc]#

!!! service mysqld start 를 꼭 해주어야 systemctl 명령어가 문제없이 실행된다. !!!

 

8. 접속하여 mariadb 버전확인

[root@develop etc]# mysql -D mysql -e 'select version();'
+---------------------+
| version()           |
+---------------------+
| 10.3.27-MariaDB-log |
+---------------------+
[root@develop etc]#

버전이 정상적으로 출력이 되면 mariadb 는 정상적으로 설치가 완료되었다.

이제 강력한 RDBMS 인 mariadb 를 사용할 수 있게 되었다!!!

728x90
반응형