레거시 Linux/MySQL 서버의 단계별 마이그레이션 및 버전 점프 전략
1줄 요약
MySQL 5.1과 같은 극단적 레거시 환경을 최신 MariaDB 11.x로 직접 덤프/복원하면 내부 데이터 딕셔너리 및 인덱스 호환성 파괴가 발생하므로, **5단계 순차 바이너리 업그레이드(5.1 ➔ 5.5 ➔ 5.7 ➔ 8.0 ➔ MariaDB)**와 스테이징 임시 서버 기반 IP 스위칭 SOP를 준수해야 한다.
1. 레거시 마이그레이션의 2대 기술적 장벽
- PHP 런타임 호환성 (PHP 5.2/5.3 ➔ PHP 8.x):
mysql_*비권장 확장 모듈 폐지, 타입 체크 강화로 인해 구형 웹 소스는 애플리케이션 레벨 코드 리팩토링이 필수 선행 과제. - 데이터베이스 엔진 점프(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 --force4단계: 최종 컷오버 (Cutover) 및 IP 스위칭
- 유지보수 진입: 원본 서버의 Apache/Nginx 및 MySQL 데몬 정지 (신규 쓰기 완전 차단).
- 최종 델타 덤프 & 임포트: 중단 상태에서 변경된 잔여 데이터만 덤프 후 타겟 DB에 주입 (소요 시간 5~10분).
- 네트워크 IP 스위칭 (IP Swap):
- 원본 서버의 공인 IP를 임시 서버의 보조 IP/주 IP로 전환하거나 라우터 NAT 룰을 변경하여 즉시 트래픽 인입.
- DNS 전파 지연(TTL) 없이 1분 내외로 서비스 정상 재개.
3. 핵심 체크포인트 (Gotchas)
- 캐릭터셋 불일치 (latin1 vs euckr vs utf8mb4): MySQL 5.1 시절
latin1테이블에euckr을 바이너리로 밀어넣던 레거시 패턴이 흔하므로, 덤프 시--default-character-set=latin1옵션과 인코딩 변환 스크립트(iconv) 검증이 필수적이다. sql_mode호환성: 최신 MariaDB/MySQL의ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_DATE설정으로 인해 구형 쿼리가 에러를 뱉을 수 있으므로 마이그레이션 초기에는sql_mode=""로 완화 후 점진적 대응을 권장한다.- 패스워드 해싱 알고리즘 (
old_passwords): MySQL 5.1의 16바이트 구형 패스워드 해시는 최신 DB에서 인증이 불가능하므로, 마이그레이션 전 모든 DB 유저의 패스워드를 표준 SHA256/Native Password 방식으로 재설정해야 한다.
게시된 시간: 2026-05-17 23:17:13수정한 시간: 2026-08-15 13:57:00