본문 바로가기
프로그래밍/데이터베이스

[database] mysql과 mariaDB 중 어떤 DB가 나에게 맞을까?

by 사바라다 2021. 5. 26.

안녕하세요. 오늘은 mysql과 mariaDB에 대한 차이점을 알아보고 어떤것을 사용하면 개인에게 그리고 팀에게 적합할지 알아보는 시간을 가져보도록 하겠습니다.

히스토리

mariaDB는 mysql의 개발자가 나와서 만들었다는 사실은 다들 익히 알고 계실껍니다. 저도 여기까지는 어디선가 들어가 이미 알고 있던 정보입니다. 그렇습니다. mariaDB의 개발자인 Monty는 회사를 나와 MontyProgram AB라는 회사를 차리면서 mariaDB를 만들게 된것입니다.

mysql을 기반으로 fork하여 자체적으로 개발하는 서비스로 mariaDB 뿐만이 아니라 PerconaServer도 있다고 합니다. 이들간의 관계를 한번 보도록 하겠습니다.

그렇습니다. mariaDB는 mysql의 엔진에 PerconaServer의 엔진을 함께 사용하고 있다는 것을 알 수 있었습니다.

그렇다면 mysql을 하나도 공부하지 않아도 되지 않을까요 ? 아쉽지만 mariaDB에서 제공하는 메뉴얼 만으로는 그렇게 할 수 없습니다. 왜냐하면 mariaDB에서 제공하는 문서는 mysql과의 차이점 뿐입니다. 공통된 부분은 mariaDB에서 메뉴얼로 별도로 제공하고 있지 않기때문에 mysql을 참고할 수 밖에 없습니다.

공통점

mariaDB는 MySQL 서버에서 사용되던 데이터 파일들이 서로 호환될 수 있도록 합니다. 공통점은 아래와 같다고 합니다.

  • MariaDB의 실행 프로그램들과 유틸리티는 모두 MySQL과 이름이 동일하며 호환됩니다.
  • MySQL 5.x의 데이터 파일과 테이블 정의 파일(.FRM)은 MariaDB 5.x와 호환합니다.
  • 모든 클라이언트 API와 통신 프로토콜은 서로 호환합니다.
  • MySQL Connector(Java 및 C 클라이언트 라이브러러 등)는 모두 MariaDB에서 변경없이 사용 가능합니다.
  • MySQL 클라이언트 프로그램은 그대로 MariaDB 서버의 연결에 사용할 수 있습니다.

특히 MariaDB의 실행 프로그램들은 MySQL과 이름까지 모두 mysqlxxx로 동일합니다. 이는 기존 MySQL 서버와 호환성을 최대한 유지해서 쉽게 MariaDB로 MySQL서버의 사용자가 전환할 수 있게 하기위함이라고 합니다.

차이점

MariaDB와 MySQL은 기능이나 성능에서 큰 차이점을 보이지는 않습니다. MySQL은 오라클이 MariaDB는 Monty Program AB가 이끌고 있으므로 앞으로 점점 차이점이 두드러질 것으로 보여집니다.

그럼에도 현재까지 드러나있는 차이점만 한번 비교해보도록 하겠습니다.

아래의 구체적인 차이점은 Real MariaDB 서적에서 발췌한 내용이며 그 일부를 가져왔습니다.

스토리지 엔진(Storage Engine) 비교

용도 MariaDB MySQL
메모리 스토리지
엔진
MySQL 코드 베이스에 포함된 MEMORY 스토리지 엔진을 기본으로 사용합니다. MariaDB의 메모리 스토리지 엔진과 거의 동일합니다.
디스크 기반 내비
임시 테이블 스토리지 엔진
엔진
기본적으로 Aria 스토리지 엔진을 사용합니다. 이것은 InnoDB와 비슷하게 인덱스하며 레코드 데이터까지 모두 메모리 캐시를 이용할 수 있기 때문에 MySAM에 비해서는 빠른 처리를 보장합니다. MySAM 스토리지 엔진을 사용하는 테이블을 생성하여 작업을 처리합니다.
트랜잭션 지원
스토리지 엔진
PerconaServer에서 나온 XtraDB가 사용되었습니다만 10.0.7 버전 부터는 InnoDB가 기본이 되었다고 합니다. InnoDB 스토리지 엔진을 사용합니다.
NoSQL 지원
엔진
Cassandra의 데이터를 MariaDB 서버를 통해 접근할 수 있습니다. Memcached 플러그인을 제공합니다.

기능

기능은 조금씩 다른 부분이 많이 있습니다. 아래에 몇가지 차이점을 가져와 보았습니다.

용도 MariaDB MySQL
스레드 풀 MariaDB 5.1 버전부터 지원합니다. 엔터프라이즈 버전에서만 지원합니다.
버퍼풀 프리 로드 XtraDB에서 버퍼 풀의 내용을 덤프하고, 덤프된 버퍼 풀 정보를 MariaDB 재시작 후 다시 버퍼 풀로 로딩할 수 있는 기능을 제공합니다 MySQL 5.6 버전에서부터 InnoDB 버퍼풀의 덤프와 로딩 기능을 지원
SSD 지원 XtraDB에서는 SSD 기반의 디스크 IO를 위한 블록 플러시 알고리즘 지원 -
롤(ROLE) 기반의 권한 관리 오라클과 같이 특정 유저 그룹을 위한 롤 생성 가능 -
반 동기화 레플리케이션 - 플러그인 형태로 제공
가상 컬럼 1개 이상의 컬럼 값을 미리 별도의 컬럼에 저장하거나 퀄 ㅣ처리 시점에 가공하여 보여 주는 기능 -
동적 컬럼 NoSQL 처럼 사용할 수 있는 동적 컬럼 지원 가능 -

성능

아래 벤치 마크 그래프를 보면 어떤 사람이 벤치마킹 했느냐에 따라서 데이터가 달라지는것을 알 수 있습니다. 따라서 어떤 제품이 더 성능이 좋다라고 말하기에는 무리가 있습니다.

아래 이미지들은 모두 2013년도에 각각 벤치마킹을 한것입니다. 누가 벤치마킹 했냐에 따라서 결과가 다르게 나온것을 알 수 있습니다. 8년이라는 많은 시간이 흘러 지금은 많이 다르지 않느냐고 생각하실 수 있지만 아쉽게도 이 이후 제대로 된 벤치마킹들은 찾아보기 힘들었습니다.

https://mariadb.org/sysbench-oltp-mysql-5-6-vs-mariadb-10-0/

 

http://dimitrik.free.fr/blog/archives/2013/02/mysql-performance-mysql-56-vs-mysql-55-vs-mariadb-55.html

라이센스

저는 개인적으로 MariaDB와 MySQL의 가장 큰 차이점은 오픈소스 정책의 방향이나 소프트웨어의 라이선스 정책이라고 보여졌습니다.

MySQL은 커뮤니티 버전과 상용 버전으로 나뉘어 집니다. 커뮤니티 버전은 서버와 클라이언트 프로그램, 그리고 라이브러리모두 GPL 라이센스로 배포되어집니다. 따라서 오픈소스로써 사용할 수 있습니다. 하지만 상용 버전은 상용 라이센스를 따르기 때문에 비용을 지불하지 않으면 사용할 수 없습니다.

MariaDB는 MySQL 커뮤니티 버전을 포크(fork)하여 사용하고 있습니다. 따라서 서버는 GPL 라이센스로 배포되어집니다. 클라이언트와 라이브러리는 LGPL 라이센서를 따릅니다. MariaDB는 GNU GPLv2 라이센스로만 배포되며 상용버전이 따로 없으며 MySQL을 포크해서 사용하기 때문에 자체적으로 상용버전을 출시할 수 도 없습니다.

마무리

오늘은 이렇게 MySQL과 MariaDB에 대한 차이점을 알아보는 시간을 가져보았습니다. 결과적으로 일반적으로 사용할때는 사용함에 있어서 그렇게 큰 차이점을 체감하는 것은 어렵습니다. 내부로 들어가보면 돌아감에 있어서 차이점이 몇몇 존재한다는 것을 알 수 있었습니다.

저는 책을 보면서 둘을 선택할 때 mariaDB를 고른다면 라이센스 관련 문제, MySQL을 고른다면 지원 및 레퍼런스의 많음을 고려해서 선택할 것 같습니다. 상용 버전이 별도로 없다는 것이 mariaDB의 최대 장점으로 느껴졌고 MySQL은 역시 상대적으로 많은 레퍼런스들이 이점으로 다가왔습니다. 개인, 팀의 프로젝트에 따라 적절히 선택하시면 좋을 것 같습니다.

감사합니다.

참조

Real MariaDB

guru99_mariadb-vs-mysql

mariadb_sysbench-oltp-mysql-5-6-vs-mariadb-10-0

dimitrik_mysql-performance-mysql-56-vs-mysql-55-vs-mariadb-55

댓글