주로 DB를 사용하고자 할때 요즘은 SQL Lite등을 사용하지만 개발을 진행하다가 보면 보안적인 측면 그리고 성능적인 측면에서 수십, 수백만건의 데이터가 넘어 갈 경우에는 파일 DB로는 불가능한 경우를 종종 만나게 된다. 그럴때 사용할 만한 RDBMS로 MySQL을 사용하는데 매번 설정을 찾아 보는게 귀찮아 한번에 정리한 버전을 만들어 본다.

 

환경

OS : CentOS 7.X (amd64)

설치 방법 : yum을 이용한 설치

설치 대상 : MariaDB 10.5.2-1.el7.centos

 

yum repository에 등록

yum으로 최신 버전의 MariaDB를 설치하고자 한다면 먼저 /etc/yum.repos.d/ 하위에 신규 파일을 생성하고 아래와 같이 넣어 준다.

 

maria.repo

 

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

 

간략 설명

: 위의 yum.mariadb.org 에 접속하면 버전과 OS까지 선택할수 있게 되어 있다. 

설치하고자 하는 버전별로 OS를 선택해서 위의 baseurl을 업데이트 하기 바란다.

 

설치

이제는 설치를 진행해 보자.

아래의 명령어만으로 관련된 모든 패키지를 설치 할수 있다.

yum install MariaDB*

 

(2/435): MariaDB-common-10.5.2-1.el7.centos.x86_64.rpm                 |  81 kB  00:00:07     
(3/435): MariaDB-compat-10.5.2-1.el7.centos.x86_64.rpm                 | 2.2 MB  00:00:17     
(4/435): MariaDB-devel-10.5.2-1.el7.centos.x86_64.rpm                  | 8.1 MB  00:00:43     
(5/435): MariaDB-client-10.5.2-1.el7.centos.x86_64.rpm                 |  12 MB  00:01:16     
(6/435): MariaDB-shared-10.5.2-1.el7.centos.x86_64.rpm                 | 113 kB  00:00:02     

 

만약 구버전을 사용하다가 위의 yum을 업데이트 한다면 관련된 많은 패키지가 업데이트 된다.

 

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:

'/usr//bin/mysqladmin' -u root password 'new-password'
'/usr//bin/mysqladmin' -u root -h sokoban.co.kr password 'new-password'

Alternatively you can run:
'/usr//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 '/usr/' ; /usr//bin/mysqld_safe --datadir='/data/mysql/'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr//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/

 

잘 설치 되었다면 위의 메시지가 뜨면서 MariaDB가 실행된것을 PS로 확인할 수 있다.

 

후속 작업

먼저 접속을 위해서 아래의 명령어를 통해서 root 패스워드를 설정 한다.

 

/usr/sbin/mysqladmin -u root password 'new-password'

 

 

설정 변경

DB의 캐릭터 설정과 메모리 사용량 등을 설정한다.

my.cnf 파일의 변경

 

 

[client-server]

[mysqld]
datadir=/data/mysql
general_log_file=/data/mysql/log/general.log
socket=/var/lib/mysql/mysql.sock
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
#default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
#
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size =1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 16M
query_cache_limit = 32M
thread_concurrency = 4
max_connections = 100 #200

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[client]
default-character-set = utf8

[mysqldump]
default-character-set = utf8
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

 

 

 

시작 할때 datadir을 변경하고자 한다면 아래와 같이 /etc/init.d/mysql 스크립트내의 datadir에 명시해준다.


# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MariaDB configuration files.

basedir=
datadir=/data/mysql

# Default value, in seconds, afterwhich the script should timeout waiting
# for server start. 
# Value here is overriden by value in my.cnf. 
# 0 means don't wait at all
# Negative numbers mean to wait indefinitely

 

 

예외상황 처리

 

설치 이후 초기 DB 파일이 설치 되지 않았을 경우 대처

sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/data/mysql/

 

서비스 포트 변경

보안성 향상을 위해 Port를 변경해 주어야 할 필요가 있을때 아래의 방법으로 변경한다.

 

SE Linux가 활성화 되어 있다면

아래의 명령어를 이용하여 SE Linux에 포트를 추가해야 한다.

semanage port -a -t mysqld_port_t -p tcp 13306

 

그리고 방화벽의 포트를 열어 준다.

firewall-cmd --permanent --zone=public --add-port=13306/tcp

firewall-cmd --reload

 

마지막으로 서비스에서 포트를 변경한다.

vim /etc/my.cnf.d/server.cnf

 

[mariadb]

port=13306

 

서비스 접속 IP 허용

최초 설치하게 되면 자기 자신의 IP만 허용되어 있고 root 계정만 존재하는 상태이다. 

계정을 생성한 다음 본인이 접근하고자 하는 외부 IP를 설정하여 외부 IP에서 접근할 수 있도록 설정해 주어야 한다.

 

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'teddy'@'10.0.0.%' IDENTIFIED BY 'Password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

+ Recent posts