PHP 실무

MySQL → MariaDB 전환 이슈

프리터코더 2026. 10. 2. 14:34

DB 엔진 차이로 서비스가 다운됐습니다. "MySQL이랑 똑같다며?"라고 생각했는데, 미묘한 차이 하나가 전체 쿼리를 멈췄죠. 작은 엔진 차이가 큰 장애를 유발합니다.

MariaDB는 MySQL의 포크(fork) 버전으로, MySQL 창시자가 Oracle 인수 후 만든 오픈소스 DB입니다. 대부분의 경우 MySQL과 호환되지만, 100% 동일하진 않습니다.
특히 특정 함수, 스토리지 엔진, 옵티마이저 동작에서 차이가 있어서, 무심코 전환했다가 쿼리 오류나 성능 저하를 겪는 경우가 많습니다.

실제로 어떤 쇼핑몰은 호스팅 업체가 MySQL 5.5에서 MariaDB 10.x로 일방적으로 전환하면서, GROUP BY 쿼리가 전부 에러를 일으켰습니다. MySQL 5.5는 느슨했지만, MariaDB는 ONLY_FULL_GROUP_BY 모드가 기본이라 SELECT 절에 집계 함수 없는 컬럼이 있으면 에러가 났죠. 주문 내역 조회, 통계 페이지가 전부 먹통이 됐습니다.

주요 차이점과 대응법

1. ONLY_FULL_GROUP_BY 모드

MariaDB/MySQL 5.7+는 GROUP BY 시 SELECT 절의 모든 컬럼이 집계 함수 또는 GROUP BY 절에 포함돼야 합니다.

-- 오류 발생
SELECT id, name, COUNT(*) FROM orders GROUP BY id;

-- 해결 (name도 GROUP BY에 추가)
SELECT id, name, COUNT(*) FROM orders GROUP BY id, name;

-- 또는 집계 함수 사용
SELECT id, MAX(name), COUNT(*) FROM orders GROUP BY id;

임시 해결 (권장하진 않음)

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

2. 날짜/시간 함수 차이

일부 날짜 함수의 동작이 다릅니다. STR_TO_DATE, DATE_FORMAT 등 테스트 필요.

3. 스토리지 엔진

MariaDB는 Aria, ColumnStore 같은 독자 엔진을 제공하지만, MySQL로 다시 돌아갈 때 호환 문제가 생길 수 있습니다. 레거시 코드라면 InnoDB를 유지하세요.

4. 시퀀스(Sequence) 지원

MariaDB 10.3+는 CREATE SEQUENCE를 지원하지만, MySQL은 미지원입니다. 호환성을 유지하려면 AUTO_INCREMENT를 쓰세요.

5. JSON 함수

MySQL 5.7+와 MariaDB 10.2+는 JSON 함수가 다릅니다. 특히 JSON_TABLE은 MariaDB 10.6+에서 추가됐습니다.

6. 성능 차이

옵티마이저가 다릅니다. 같은 쿼리라도 실행 계획이 달라질 수 있으니, EXPLAIN으로 확인하세요.

전환 전 체크리스트

  1. 버전 확인
SELECT VERSION();

MySQL 5.5 → MariaDB 10.x 전환 시 점프가 크니 주의.

  1. SQL 모드 확인
SELECT @@sql_mode;
  1. 전체 쿼리 테스트
  • 특히 GROUP BY, JOIN, 서브쿼리 중심으로 점검
  1. 스토리지 엔진 확인
SHOW TABLE STATUS;
  1. 백업 필수
mysqldump --all-databases > backup_before_switch.sql

전환 후 점검

  • 에러 로그 (/var/log/mysql/error.log 또는 MariaDB 로그)
  • Slow Query Log (느린 쿼리 찾기)
  • 주요 기능 수동 테스트 (회원가입, 로그인, 주문, 통계)

롤백 준비

만약 문제가 생기면 즉시 MySQL로 돌아갈 수 있도록, 백업본 유지 및 롤백 절차 문서화.

실무 팁

  • 테스트 서버 먼저: 로컬 또는 스테이징 서버에서 먼저 전환해서 문제를 미리 찾으세요.
  • 버전 점프 최소화: MySQL 5.5 → MariaDB 10.11 같은 큰 점프는 위험. 가능하면 단계적으로.
  • 호스팅 업체와 협의: 전환 시기, 롤백 정책 미리 확인.

작은 엔진 차이가 큰 장애를 유발합니다. "거의 같다"는 말에 속지 마세요. 미묘한 차이 하나가 서비스를 멈춥니다. 전환 전 철저한 테스트가 생명입니다. 유지보수는 사전 검증입니다.