MariaDB는 MySQL에서 포크된 오픈소스 관계형 데이터베이스로, MySQL과 높은 호환성을 유지하면서 추가 기능과 성능 개선을 제공한다. Oracle의 MySQL 인수 이후 원 개발자들이 만든 커뮤니티 중심 프로젝트다.
MySQL vs MariaDB 주요 차이점
| 항목 | MySQL | MariaDB |
|---|
| 라이선스 | GPL + 상용 이중 라이선스 | GPL (완전 오픈소스) |
| 기본 스토리지 엔진 | InnoDB | InnoDB (+ Aria, ColumnStore) |
| JSON 지원 | 네이티브 JSON 타입 | 동적 컬럼 + JSON 함수 |
| 윈도우 함수 | 8.0+ | 10.2+ |
| 임시 테이블 | 디스크 기반 | Aria 엔진 (메모리 효율) |
| GTID 복제 | 있음 | 향상된 GTID |
주요 고유 기능
sql
-- 동적 컬럼 (스키마리스 데이터)
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
data BLOB -- 동적 컬럼 저장
);
INSERT INTO orders(user_id, data)
VALUES (1, COLUMN_CREATE('color', 'red', 'size', 'L', 'price', 29900));
SELECT COLUMN_GET(data, 'color' AS CHAR) AS color,
COLUMN_GET(data, 'price' AS INT) AS price
FROM orders WHERE id = 1;
-- 시스템 버전 테이블 (임시 테이블 / 이력 관리)
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10,2)
) WITH SYSTEM VERSIONING;
-- 과거 시점 데이터 조회
SELECT * FROM employees
FOR SYSTEM_TIME AS OF '2024-01-01 00:00:00';
-- 변경 이력 전체 조회
SELECT * FROM employees
FOR SYSTEM_TIME ALL
WHERE id = 42;
Aria 스토리지 엔진
sql
-- Aria: 충돌 복구 가능한 MyISAM 대체 엔진
CREATE TABLE logs (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
message TEXT,
created DATETIME DEFAULT NOW()
) ENGINE=Aria
TRANSACTIONAL=1 -- 트랜잭션 지원
PAGE_CHECKSUM=1; -- 데이터 무결성 검사
-- ColumnStore: 분석용 컬럼형 스토리지
CREATE TABLE sales_facts (
date_id INT,
product_id INT,
amount DECIMAL(12,2)
) ENGINE=ColumnStore; -- OLAP 쿼리에 최적화
복제 설정
ini
# /etc/mysql/mariadb.conf.d/50-server.cnf (마스터)
[mariadb]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
gtid_strict_mode = ON
# 슬레이브
[mariadb]
server_id = 2
relay_log = /var/log/mysql/relay-bin.log
gtid_strict_mode = ON
read_only = ON
관련 문서