Skip to content

레거시 Linux/MySQL 서버의 단계별 마이그레이션 및 버전 점프 전략

1줄 요약

MySQL 5.1과 같은 극단적 레거시 환경을 최신 MariaDB 11.x로 직접 덤프/복원하면 내부 데이터 딕셔너리 및 인덱스 호환성 파괴가 발생하므로, **5단계 순차 바이너리 업그레이드(5.1 ➔ 5.5 ➔ 5.7 ➔ 8.0 ➔ MariaDB)**와 스테이징 임시 서버 기반 IP 스위칭 SOP를 준수해야 한다.

1. 레거시 마이그레이션의 2대 기술적 장벽

  1. PHP 런타임 호환성 (PHP 5.2/5.3 ➔ PHP 8.x): mysql_* 비권장 확장 모듈 폐지, 타입 체크 강화로 인해 구형 웹 소스는 애플리케이션 레벨 코드 리팩토링이 필수 선행 과제.
  2. 데이터베이스 엔진 점프(Version Jump) 불가: 스토리지 엔진 포맷, 시스템 테이블 구조(mysql.*), 캐릭터셋 기본값 차이로 인해 직접 마이그레이션 시 데이터 손상 위험.
[MySQL 레거시 버전 점프 로드맵]
MySQL 5.1 ──> MySQL 5.5 ──> MySQL 5.7 ──> MariaDB 10.11(LTS) ──> MariaDB 11.4
   │             │             │                  │
 (MyISAM)     (InnoDB)    (JSON/utf8mb4)     (신규 옵티마이저)

2. 4단계 무중단/최소다운타임 마이그레이션 절차 (SOP)

1단계: 신규 타겟 임시 서버(Staging) 프로비저닝

최신 OS(Rocky Linux 9.x / Ubuntu 24.04 LTS) 기반으로 타겟 스택(PHP-FPM, MariaDB 11.4, Nginx/Apache)을 사전 구성.

2단계: 1차 데이터 동기화 및 로컬 호스트(hosts) 검증

  • 원본 서버의 웹 루트(/var/www/html) 및 DB 덤프를 스테이징 서버로 1차 이관.
  • 클라이언트 PC의 hosts 파일에 임시 서버 IP를 등록하여 결제 모듈, 관리자 페이지, 쿼리 에러(sql_mode)를 완벽히 사전 검증.

3단계: 순차적 DB 스키마 및 데이터 업그레이드

각 버전별 mysql_upgrade 유틸리티를 실행하여 시스템 카탈로그를 단계적으로 갱신.

bash
# 단계별 업그레이드 실행
mysql_upgrade -u root -p --force

4단계: 최종 컷오버 (Cutover) 및 IP 스위칭

  1. 유지보수 진입: 원본 서버의 Apache/Nginx 및 MySQL 데몬 정지 (신규 쓰기 완전 차단).
  2. 최종 델타 덤프 & 임포트: 중단 상태에서 변경된 잔여 데이터만 덤프 후 타겟 DB에 주입 (소요 시간 5~10분).
  3. 네트워크 IP 스위칭 (IP Swap):
    • 원본 서버의 공인 IP를 임시 서버의 보조 IP/주 IP로 전환하거나 라우터 NAT 룰을 변경하여 즉시 트래픽 인입.
    • DNS 전파 지연(TTL) 없이 1분 내외로 서비스 정상 재개.

3. 핵심 체크포인트 (Gotchas)

  1. 캐릭터셋 불일치 (latin1 vs euckr vs utf8mb4): MySQL 5.1 시절 latin1 테이블에 euckr을 바이너리로 밀어넣던 레거시 패턴이 흔하므로, 덤프 시 --default-character-set=latin1 옵션과 인코딩 변환 스크립트(iconv) 검증이 필수적이다.
  2. sql_mode 호환성: 최신 MariaDB/MySQL의 ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_DATE 설정으로 인해 구형 쿼리가 에러를 뱉을 수 있으므로 마이그레이션 초기에는 sql_mode=""로 완화 후 점진적 대응을 권장한다.
  3. 패스워드 해싱 알고리즘 (old_passwords): MySQL 5.1의 16바이트 구형 패스워드 해시는 최신 DB에서 인증이 불가능하므로, 마이그레이션 전 모든 DB 유저의 패스워드를 표준 SHA256/Native Password 방식으로 재설정해야 한다.

게시된 시간: 2026-05-17 23:17:13수정한 시간: 2026-08-15 13:57:00

Built with VitePress. | 📡 RSS Feed