MariaDB는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다. MySQL과 동일한 소스 코드를 기반으로 하며, GPL v2 라이선스를 따른다. 오라클 소유의 현재 불확실한 MySQL의 라이선스 상태에 반발하여 만들어졌으며, 배포자는 몬티 프로그램 AB(Monty Program AB)와 저작권을 공유해야 한다.[1] 이것은 MySQL과 높은 호환성을 유지하기 위함이며, MySQL API와 명령에 정확히 매칭하여, 라이브러리 바이너리와 상응함을 제공하여 교체 가능성을 높이고자 함이다.[2] 마리아 DB에는 새로운 저장 엔진인 아리아(Aria)뿐만 아니라, InnoDB를 교체할 수 있는 XtraDB 저장 엔진을 포함하고 있다.[3] 이것은 트랜잭션과 비트랜잭션 엔진 그리고 미래에 나올 MySQL 판에 대응하고자 함일 것이다.[4] 마리아 DB의 주요 개발자는 MySQL과 몬티 프로그램 AB를 설립한 몬티 와이드니어스(Michael Monty Widenius)이다. 그는 이전에 자신의 회사, MySQL AB를 썬 마이크로시스템즈에 10억 달러에 판매를 한 적이 있으며, 마리아 DB는 그의 둘째 딸인 마리아의 이름을 딴 것이다.[5]
결론적으로 MariaDB는 데이터베이스 관리 시스템으로, Mysql과 비슷한 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS) 중 하나입니다.
복제
는 마스터 데이터베이스 또는 서버로 알려진 다양한 데이터베이스에서 여러 슬레이브 서버로 데이터를 복사하는 프로세스입니다. 마스터 서버는 복제용 데이터를 제공하기 때문에 그렇게 알려져 있습니다. 복제된 데이터는 완전한 데이터베이스 세트, 단일 데이터베이스 또는 원하는 데이터베이스에서 가져온 데이터 테이블일 수 있습니다.
마스터-슬레이브
구성에서 슬레이브 중 하나에 대한 모든 변경 사항은 몇 초 만에 마스터 레코드에 자동으로 반영되고, 그 후 모든 슬레이브는 마스터 서버에서 완전 자동화된 방식으로 데이터 업데이트를 수신합니다.
MariaDB를 사용하면 전체 데이터베이스를 전체적으로 복제하거나 데이터베이스에서 특정 양의 데이터를 선택할 수 있습니다. MariaDB의 복제는 마스터-슬레이브 구성
으로 사용되며 모든 데이터 업데이트가 수행되는 마스터 서버에서 binlog를 활성화합니다. 마스터 서버는 모든 트랜잭션에 대해 글로벌 트랜잭션 ID(GTID)를 사용하고 이를 바이너리 로그에 씁니다.
GTID(글로벌 트랜잭션 ID)를 사용하면 서로 복제하는 서로 다른 서버에서 동일한 binlog 이벤트를 쉽게 고유하게 식별할 수 있습니다. 이진 로그에는 데이터베이스에 대한 모든 변경 사항(데이터 및 구조 모두)과 각 명령문이 실행되는 데 걸린 시간이 포함됩니다. 슬레이브는 복제할 데이터에 접근하기 위해 각 마스터로부터 바이너리 로그(binlog)를 읽어온다. 슬레이브 서버에서는 바이너리 로그와 동일한 형식으로 릴레이 로그를 생성하여 복제를 수행합니다.
MariaDB를 사용하면 사용자가 다양한 방법을 사용하여 데이터를 복제할 수 있습니다.
이번 포스팅에서는 MariaDB를 docker로 Master-Slave 구조로 설정하는 방법을 알아보도록 하겠습니다.
## master DB용 디렉토리
mkdir master
## slave DB용 디렉토리
mkdir slave
master DB의 container를 띄우는 명령어는 아래와 같습니다.
## 실행 명렁어
docker container run -d -p 13306:3306 \
-e MYSQL_ROOT_PASSWORD=root비밀번호 \
-v .../master:/var/lib/mysql \
-v .../master:/etc/mysql/conf.d \
--name maria-master mariadb
## 실행 예시
docker container run -d -p 13306:3306 \
-e MYSQL_ROOT_PASSWORD=pwd123 \
-v /Users/Shared/data/maria/master:/var/lib/mysql \
-v /Users/Shared/data/maria/master:/etc/mysql/conf.d \
--name maria-master mariadb
옵션 설명
Slave DB의 container를 띄우는 명령어는 아래와 같습니다.
## 실행 명렁어
docker container run -d -p 23306:3306 \
-e MYSQL_ROOT_PASSWORD=root비밀번호 \
-v .../slave:/var/lib/mysql \
-v .../slave:/etc/mysql/conf.d \
--link maria-master \
--name maria-slave mariadb
## 실행 예시
docker container run -d -p 23306:3306 \
-e MYSQL_ROOT_PASSWORD=pwd123 \
-v /Users/Shared/data/maria/slave:/var/lib/mysql \
-v /Users/Shared/data/maria/slave:/etc/mysql/conf.d \
--link maria-master \
--name maria-slave mariadb
일단 master DB container에 접속합니다.
## master DB contianer 접속 (1)
mysql -u root -ppwd123 --port 13306 --host 127.0.0.1
## master DB contianer 접속 (2)
docker exec -it maria_master /bin/bash
>> mysql -u root -p
>>> pwd123
그 다음 database와 user를 생성하도록 하겠습니다.
## 복제할 데이터베이스 생성
create database repldb;
## user 생성
grant all privileges on repldb.* to repldb@'%' identified by 'replpw';
## slave 서버에서 master 서버에 접속할 수 있도록 권한 추가
grant replication slave on *.* to 'repldb'@'%';
## 적용하기
flush privileges;
이제 생성된 user를 확인 해보도록 하겠습니다.
## 생성된 user 확인
use mysql;
select user, host from user;
확인해보면 user가 repldb로 생성된 것을 확인할 수 있습니다.
일단 Slave DB container에 접속합니다.
## slave DB contianer 접속 (1)
mysql -u root -ppwd123 --port 23306 --host 127.0.0.1
## slave DB contianer 접속 (2)
docker exec -it maria_slave /bin/bash
>> mysql -u root -p
>>> pwd123
그 다음 user를 생성하도록 하겠습니다.
## user 생성
CREATE USER 'repldb'@'%' IDENTIFIED BY 'replpw';
## 권한 설정
grant all privileges on repldb.* to repldb@'%' identified by 'replpw';
## 적용하기
flush privileges;
일단 master DB의 File과 position를 확인해야 합니다. master의 DB에 접근하여 아래와 같은 명령어로 확인합니다.
## File, position 확인하기
SHOW MASTER STATUS\G
이제 slave DB에서 master DB를 설정하도록 하겠습니다.
## master DB 설정
CHANGE MASTER TO MASTER_HOST='maria-master', MASTER_USER='repldb', MASTER_PASSWORD='replpw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1223;
각 옵션의 설명은 아래와 같습니다.
그 다음 시작해보도록 하겠습니다. slave DB에서 아래와 같은 명령어를 사용합니다.
## 시작 명령어
start slave;
## 설정된지 확인하기
SHOW SLAVE STATUS\G
여기서 우리는 Last_Errno 는 0, Last_IO_Errnork 0이면 설정이 완료된것 입니다.
설정을 완료하게 되면 이제 Master container에서 복제설정한 DB에 데이터가 들어가거나 삭제되는경우 Slave DB에도 바로 적용되는 것을 확인 할 수 있습니다.
전체적 참조 https://lemontia.tistory.com/741
[1]. Contributing Code Archived 2013년 3월 16일 - 웨이백 머신, AskMonty Knowledgebase
[2]. MariaDB versus MySQL - Compatibility Archived 2013년 5월 26일 - 웨이백 머신, AskMonty KnowledgeBase
[3]. About XtraDB Archived 2013년 7월 8일 - 웨이백 머신, AskMonty KnowledgeBase
[4]. Aria FAQ Archived 2013년 6월 16일 - 웨이백 머신, AskMonty KnowledgeBase
[5]. Why is the project called MariaDB? Archived 2013년 6월 4일 - 웨이백 머신, AskMonty KnowledgeBase
[6]. https://hevodata.com/learn/mariadb-replication-easy-steps/