MySQL

MySQL 설계 · 이중화 · 튜닝 · 업그레이드

웹·커머스·사내 시스템의 표준 RDBMS인 MySQL. InnoDB Cluster·ProxySQL 기반 고가용성, binlog 기반 시점 복구, 슬로 쿼리 튜닝, 8.0 지원 종료에 따른 8.4 LTS 전환까지 함께합니다.

Architecture

권장 HA 아키텍처

MySQL 공식 구성인 InnoDB Cluster(Group Replication + MySQL Router + MySQL Shell) 또는 비동기 복제 + ProxySQL 조합 중 요구사항에 맞게 선택합니다.

InnoDB Cluster는 Group Replication으로 멤버 간 트랜잭션을 합의(정족수) 기반으로 복제하고, 프라이머리 장애 시 자동으로 새 프라이머리를 선출합니다. MySQL Router가 애플리케이션 연결을 현재 프라이머리·보조 멤버로 라우팅합니다.

ProxySQL은 쿼리 규칙 기반 읽기/쓰기 분리, 커넥션 멀티플렉싱, 쿼리 캐시·차단 규칙을 제공해 대규모 트래픽 환경에서 많이 쓰입니다.

  • Group Replication은 최소 3개 멤버(홀수) 권장
  • 단일 프라이머리 모드를 기본으로, 다중 프라이머리는 충돌 특성 검토 후 적용
  • DR은 InnoDB ClusterSet 또는 비동기 복제로 원격지 구성
  • Aurora 등 관리형 서비스는 제공 기능 범위 내에서 설계
그림. MySQL InnoDB Cluster 참조 구성 (Router와 ProxySQL은 요구사항에 따라 택일 또는 병행)

Scope

MySQL 서비스 범위

설치·설계

LTS/Innovation 릴리스 선택, 문자셋·콜레이션 표준, InnoDB 파일·로그 구성, 계정 표준.

HA·복제

GTID 기반 비동기·반동기 복제, Group Replication, InnoDB Cluster/ClusterSet, ProxySQL.

백업·PITR

Percona XtraBackup 물리 백업, MySQL Shell 덤프 유틸리티, binlog 기반 시점 복구.

튜닝

innodb_buffer_pool·redo log·flush 설정, 슬로 쿼리·실행 계획, 인덱스·파티셔닝.

모니터링

PMM, Performance Schema·sys 스키마, 복제 지연·락 대기, Grafana 알림.

업그레이드

MySQL Shell Upgrade Checker로 사전 점검, 8.0 → 8.4 LTS 롤링 업그레이드.

보안

caching_sha2_password, 역할(Role) 기반 권한, TLS, 감사 로그, 비밀번호 정책.

이관

Oracle·Tibero·타 MySQL 계열 → MySQL, 온프레미스 ↔ 클라우드(Aurora/RDS 등) 전환.

Replication

이중화 방식 비교

MySQL 복제·HA 선택지
방식특징적합한 용도유의 사항
비동기 복제(GTID)소스의 binlog를 레플리카가 적용읽기 분산, DR, 단순 구성장애 시 데이터 유실 가능성 → 반동기 검토
반동기 복제최소 1개 레플리카 수신 확인 후 커밋 응답RPO 개선네트워크 지연이 쓰기 응답에 영향
Group Replication / InnoDB Cluster합의 기반 복제 + 자동 장애조치 + Router운영 HA 표준대형 트랜잭션·쓰기 충돌 특성 검토
ProxySQL쿼리 라우팅·R/W 분리·커넥션 멀티플렉싱대규모 트래픽, 읽기 분산라우팅 규칙·헬스체크 설계 필요

Backup & PITR

백업·시점 복구

물리 백업으로 빠르게 복원하고, binlog를 적용해 원하는 시점까지 되돌립니다.

XtraBackup 전체 백업 · 복원 준비
# 백업 (운영 중 비차단 물리 백업)
xtrabackup --backup --target-dir=/backup/full_20261020 \
           --user=bkuser --password='***'
# 복원 전 준비(prepare)
xtrabackup --prepare --target-dir=/backup/full_20261020
# 빈 데이터 디렉터리로 복사 후 소유권 설정
xtrabackup --copy-back --target-dir=/backup/full_20261020
chown -R mysql:mysql /var/lib/mysql
binlog로 목표 시점까지 적용
# xtrabackup_binlog_info 의 위치부터 사고 직전까지 재적용
mysqlbinlog --start-position=157 \
            --stop-datetime="2026-10-20 13:55:00" \
            binlog.000123 binlog.000124 | mysql -u root -p
XtraBackup은 지원하는 MySQL 버전과 맞춰 사용해야 합니다(예: 8.4용 XtraBackup 8.4). 파일명·위치 값은 예시입니다.

Tuning

성능 튜닝 포인트

InnoDB·서버

  • innodb_buffer_pool_size·인스턴스 수와 작업 세트 비교
  • redo log 용량(innodb_redo_log_capacity), flush 방식
  • max_connections와 스레드·커넥션 풀 전략
  • 임시 테이블·정렬 버퍼 과다 할당 방지
  • 복제 병렬 적용(replica_parallel_workers) 설정

쿼리·스키마

  • slow query log + pt-query-digest / PMM Query Analytics로 상위 쿼리 선정
  • EXPLAIN ANALYZE로 실제 실행 경로 확인
  • 복합 인덱스 컬럼 순서·커버링 인덱스
  • 대용량 로그성 테이블의 파티셔닝과 보관 정책
  • 락 대기·데드락 분석(performance_schema, sys 스키마)

Upgrade

MySQL 8.0 → 8.4 LTS 업그레이드

Oracle은 MySQL 8.0을 2026년 4월 EOL(Sustaining Support 전환)로 공지했습니다. 8.4 LTS(또는 9.7 LTS)로의 계획적 전환을 권장합니다.

  1. 사전 점검

    MySQL Shell util.checkForServerUpgrade(), mysqlcheck --check-upgrade

  2. 호환성 정리

    mysql_native_password 계정, 신규 예약어, 제거된 변수·옵션 정리

  3. 스테이징 검증

    운영 사본으로 업그레이드·회귀 테스트·성능 비교

  4. 롤링 전환

    레플리카부터 업그레이드 → 스위치오버 → 기존 프라이머리 업그레이드

8.0에서 9.x로 직접 업그레이드할 수 없으며 8.4 LTS를 거쳐야 합니다. 다운그레이드는 지원되지 않으므로 업그레이드 전 백업이 필수입니다. (출처: MySQL 8.4 Reference Manual, MySQL EOL 공지 — 적용 전 최신 문서 확인)

Migration

Oracle · Tibero → MySQL 이관

  • 데이터 타입·문자셋(utf8mb4)·콜레이션 매핑
  • 시퀀스 → AUTO_INCREMENT 또는 시퀀스 테이블 설계
  • PL/SQL 패키지 → 저장 프로시저 또는 애플리케이션 로직 이전
  • 전체 적재 + 변경분 동기화 방안 결정
  • 건수·체크섬·업무 쿼리 결과 비교 검증
  • 컷오버 리허설과 롤백 계획
클라우드 이관 시에는 대상 서비스가 제공하는 이관 도구(예: AWS DMS 등)의 지원 범위를 함께 검토합니다.

FAQ

자주 묻는 질문

MySQL 8.0을 계속 써도 되나요?

2026년 4월 이후 8.0은 신규 패치가 제공되지 않는 Sustaining Support 단계입니다. 보안·버그 수정을 받으려면 8.4 LTS 등 지원 버전으로의 전환 계획을 세우는 것이 좋습니다.

InnoDB Cluster와 ProxySQL 중 무엇을 써야 하나요?

자동 장애조치가 핵심이면 InnoDB Cluster(+Router)가 표준입니다. 세밀한 쿼리 라우팅·멀티플렉싱이 필요하면 ProxySQL을 함께 쓰거나 단독으로 사용합니다.

Aurora MySQL도 지원하나요?

네. 관리형 서비스 특성(파라미터 그룹, 스토리지 구조, 제공 기능)을 고려한 튜닝·모니터링·이관을 지원합니다.

슬로 쿼리 튜닝은 얼마나 걸리나요?

대상 쿼리 수와 변경 가능 범위(인덱스만/SQL 수정/스키마 변경)에 따라 다릅니다. 진단 후 우선순위와 예상 범위를 제안드립니다.

클라우드와 데이터베이스, 지금 상태부터 함께 점검해 보시겠어요?

사용 중인 클라우드·DB 버전·구성과 고민을 알려주시면 진단 범위와 진행 방식을 제안드립니다.