centos 7 mariadb 설치

DB & SQL 2019. 1. 28. 15:25

centos 7 repository 설정

mariadb의 repository를 추가하여 설치
mariadb 버전별로 repository 설정이 다르나 repository 설정 파일은 동일하다.

repository 설정 파일 생성

sudo vi /etc/yum.repos.d/mariadb.repo

mariadb 버전은 5.5, 10.0, 10.1, 10.2, 10.3, 10.4버전이 있으며
본 글의 작성일 기준으로 10.4버전은 Beta 버전이고 그 외 버전은 Stable 버전이다.
설정 파일 설정값은 http://downloads.mariadb.org/mariadb/repositories/ 에서 확인 가능하다.

mariadb 10.1 버전으로 설치시 repository 설정값은 아래와 같이 한다.

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

mariadb 10.2 버전으로 설치시 repository 설정값은 아래와 같이 한다.

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

mariadb 10.3 버전으로 설치시 repository 설정값은 아래와 같이 한다.

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

버전별 설정은 설정값 중 baseurl의 중간에 버전 정보만 바꾸면 된다.

mariadb 설치

아래 명령을 실행한다. 패키지명의 대소문자에 주의해야한다.

sudo yum install MariaDB-server MariaDB-client

mariadb 설치 및 실행 후 최초 설정

아래 명령으로 mariadb를 실행 후 최초 설정을 한다.

sudo systemctl start mysql
sudo mysql_secure_installation

처음 물어보는 것은 root 계정의 패스워드 설정으로
현재 비밀번호(최초 이므로 엔터)를 입력 후 패스워드 설정 여부 "Y" 입력 후 패스워드를 입력한다.
그 다음은 익명 사용자의 삭제 여부로 "Y"를 입력한다.
그 다음은 root 계정의 외부 접속 여부로 상황에 맞게 입력한다. 외부 접속을 허용할 경우 "Y"를 입력한다.
그 다음은 기본적으로 생성되는 "test" 데이터베이스를 삭제할 것인지 물어보는 것으로 "Y"를 입력한다.
마지막으로 현재까지 설정한 것을 즉시 적용 할 것인지 물어보는 것으로 "Y"를 입력한다.
위의 여러 설정은 각자의 사용 환경에 맞게 설정하면 된다.

mariadb 자동 실행

부팅시 mariadb를 자동 실행 하려면 아래의 명령어를 실행한다.

sudo systemctl enable mariadb

자동 실행을 해제 하려면 아래의 명령어를 실행한다.

sudo systemctl disable mariadb

mariadb 설정

character set 및 collation

character set은 "utf8", "utf8mb4" 두 가지가 주로 많이 쓰이며
"utf8"은 최초 mysql 설계시 utf8 규격에 4byte에 할당된 문자가 없어 3byte로 설계되었으나
최근 4byte에 할당된 문자(이모티콘 문자)가 생기면서 4byte 확장을 위해 utf8mb4를 추가하였다.
utf8규격과 동일한 "utf8mb4"로 설정할 것을 권장하고 있다.

"utf8mb4" character set의 collation(정렬) 은

  • utf8mb4_general_ci
  • utf8mb4_unicode_ci
  • utf8mb4_bin
세가지가 있으며
일반적으로 "utf8mb4_unicode_ci"가 사용된다.
주의 할 점은 PK 컬럼이 문자일 경우인데 "utf8mb4_bin" 인 경우 대소문자를 구분하지만
"utf8mb4_general_ci", "utf8mb4_unicode_ci"인 경우 대소문자를 구분하지 않는다.
즉, "A", "a"는 동일한 값으로 취급되며 "Duplicate Primary Key" 에러를 발생한다.

sudo vi /etc/my.cnf.d/server.cnf

아래 내용을 추가 한다.

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin

그 외 dump 파일에도 utf8mb4를 적용하려면 아래 파일을 수정한다.

sudo vi /etc/my.cnf.d/mysql-clients.cnf

아래 내용을 추가 한다.

[mysql]
default-character-set=utf8mb4
[mysqldump]
default-character-set=utf8mb4

테이블명의 대소문자 구분

Windows, MacOS의 경우 MariaDB 에서 테이블명의 대소문자를 구분하지 않으나 Linux에 설치시에 테이블명의 대소문자를 구분한다.
예로 테이블 "test"와 "Test"는 Windows, MacOS에서는 같은 테이블이나 Linux에서는 다른 테이블이다.
Linux에서도 테이블명에 대소문자를 구분하지 않으려면 설정 값을 추가해 주어야 한다.

sudo vi /etc/my.cnf.d/server.cnf

아래 내용을 추가 한다.

[mysqld]
lower_case_table_names=1

auto commit

mariadb 의 autocommit 옵션은 기본적으로 ON(TRUE, 1) 상태이다.
INSERT, UPDATE, DELETE 구문을 실행하면 COMMIT 없이 바로 적용된다.
autocommit 옵션을 OFF(FALSE, 0) 하려면 아래 파일을 수정한다.

sudo vi /etc/my.cnf.d/server.cnf

아래 내용을 추가한다.

[mysqld]
autocommit=0

transaction isolation

mariadb에는 트랜잭션을 제어하는 네가지의 isolation level 이 있다.

READ UNCOMMITTED
다른 트랜잭션에서 commit 하지 않은 데이터까지 보임
READ COMMITTED
다른 트랜잭션에서 commit한 데이터까지 보임
REPEATABLE READ
mariadb 기본 설정값으로 다른 트랜잭션의 commit 여부와 상관없이 현재 트랜잭션이 접속한 시점의 데이터만 보임
SERIALIZABLE
현재 트랜잭션에서 작업중인 모든 데이터에 LOCK 발생, 다른 트랜잭션에서는 LOCK 데이터 접근 불가

isolation을 변경하려면 아래 파일을 수정한다.

sudo vi /etc/my.cnf.d/server.cnf

아래 내용에 변경하려는 isolation을 추가 한다.

[mysqld]
transaction-isolation=READ-COMMITTED

oracle과 유사하게 설정하려면 isolation 은 "READ COMMITTED", autocommit 은 "0" 으로 설정
DB 접속 GUI 툴의 접속 환경 설정에 따라 변경될 수 있으니 접속후 설정 값을 확인해 볼 필요가 있다.
DBeaver 툴의 경우 툴바에 모드 변경 메뉴가 있어 접속 후에 조정이 가능하다.
MySQL Workbench의 경우 접속시 서버 설정과 관계없이 기본으로 isolation은 "REPEATABLE READ", autocommit 은 "1" 로 설정하여 접속한다.

SELECT @@autocommit, @@tx_isolation;

현재 접속한 트랜잭션의 설정을 확인 한 후 변경이 필요하면 아래와 같이 한다.

SET autocommit = 0;
SET tx_isolation = 'READ-COMMITTED';


: