MySQL 메이저 버전 업그레이드(MySQL 5 → MySQL 8) — 네이버 클라우드 플랫폼 Cloud DB for MySQL 실습

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM
11 min readDec 14, 2023

네이버클라우드에서 주요 고객 기술 지원을 담당하는 TAM (Technical Account Manager) 강철곤입니다.

업무 특성상 다양한 고객・파트너와 소통하며 업무를 진행합니다. 이런 제게 소프트웨어 업그레이드는 반가운 소식이면서도 어려움을 가져다 주기도 하는데요. 업그레이드 된 IT 서비스를 고객사에도 적시에 적용해 드려야 하기 때문입니다. 하지만 버전 업그레이드 중 발생할 수 있는 리스크도 있어서 쉬운 작업이 아닙니다.

MySQL은 세계적으로 많은 고객이 사용하는 DB 서비스입니다. 네이버 클라우드 플랫폼에서도 Cloud DB for MySQL으로 제공하고 있으며 사용 고객 또한 많습니다. 네이버 클라우드 플랫폼 환경에서 MySQL engine을 업그레이드하는 방법을 설명 드리겠습니다.

이런 분들께 추천합니다.

  • MySQL DB를 관리하지만 상세한 DB 설정은 잘 모르시는 분
  • MySQL 5.7과 8.0의 차이를 잘 모르시는 분
  • MySQL EOL(End Of Life)에 관심있는 분

MySQL 5.7 vs. 8.0 차이점

우선 MySQL의 5.7버전과 8.0 버전에 대해서는 큰 차이가 있는데요. 네이버의 생성형 AI 서비스 CLOVA X에 차이점을 물어보니 이렇게 설명합니다.

설명이 명쾌하네요. MySQL 사용자 대부분은 본인이 원하는 Default 설정을 가진 MySQL 버전을 사용하며, 구 버전인 경우가 많습니다.

많은 고객이 사용하는 MySQL 5.7가 2023년 10월 21일부로 지원이 종료(EOS) 되었습니다. 이후 많은 고객으로부터 버전 업그레이드 요청을 많이 받고 있는데요. 기존에는 Database Migration Service를 활용하여 버전 업그레이드를 지원해 드렸으나, 2023년 11월 23일부로 Cloud DB for MySQL 서비스에서 메이저 버전 업그레이드 기능을 공식 지원하게 되었습니다.

더 많은 분들이 새로운 기능을 사용해 보실 수 있도록 사용 방법을 소개해 드립니다.

시나리오

기존 Database Migration Service로 메이저 버전 업그레이드 과정에서 export/import 진행 시 몇 가지 고려사항이 있었습니다.

  • MySQL 5.7 잔재 버그로 sql_mode=NO_AUTO_CREATE_USER 잔재
  • Definer 계정에 대한 Source/Target DB 간 권한 문제
  • Source/Target DB 간 기본 Character Set 및 Collation의 불일치로 인한 오류
  • 마이그레이션 진행 후 데이터 불일치 현상 발생 등

이렇게 고려할 사항이 많다보니 고객이 마이그레이션 export/import를 기다리는 시간부터, 장시간 마이그레이션 진행 후에도 오류 발생 시 해결까지 추가 시간이 소요되는 어려움이 있었습니다.

반면 Cloud DB for MySQL의 메이저 업그레이드 기능을 활용하면 Cloud DB를 사용하며 문제될 수 있는 부분을 시스템적으로 점검하고, 보다 빠르고 편안하게 버전을 업그레이드 할 수 있습니다.

자세한 방법을 아래 실습을 통해 소개해 드립니다.

실습 환경

  • 환경 : 민간 VPC
  • MySQL 접근 VM : codetest-vm(공인 VM)
  • Cloud DB for MySQL : test-mysql-5–7
  • 기본 버전 : MYSQL5.7.37
  • 더미 데이터

MySQL에 추가할 dummy 데이터는 공식 홈페이지에서 제공하는 샘플 Database 중 Employees 데이터를 활용하였습니다.

위 데이터는 Github(링크)을 통해 제공됩니다.

데모

MySQL Engine Upgrade 기능 검증을 위해서는 몇 가지 사전 준비가 필요합니다.

• Cloud DB for MySQL 5.7 생성

• Dummy 파일 업로드

• 사용자 데이터 구성(View, Function, Definer 계정)

이후 MySQL Engine Upgrade 기능을 이용하여 업그레이드 데모를 진행했습니다. 사전 준비 과정부터 차근차근 설명해 드리겠습니다.

1. Cloud DB for MySQL 5.7 생성

  • Cloud DB for MySQL 메뉴에서 신규 DB Server를 생성합니다.
ncloud 콘솔 > VPC 선택 > Cloud CB for MySQL > DB 서버 생성 화면
  • 기본 데이터베이스는 employees로 설정합니다.

(만약 다른 기본 DB가 있을 경우 나중에 CREATE합니다.)

ncloud 콘솔 > VPC 선택 > Cloud CB for MySQL > DB 설정 화면

DB 서버 생성이 완료되면 생성된 Cloud DB for MySQL에 특정 VM을 통해 접근할 수 있도록 ACG inbound rule을 추가합니다.

ACG 인바운드 룰 추가

2. Dummy 파일 업로드

Cloud DB for MySQL에 접속할 VM에 먼저 접근 후 MySQL 접근을 위한 Client를 설치합니다.

# apt install -y mysql-client

github에 있는 데이터를 Cloud DB에 연결할 VM에 다운로드 합니다.

# git clone https://github.com/datacharmer/test_db

git을 이용하여 다운로드 받은 파일에 대하여 *.sql이 있는 경로로 이동한 후 Cloud DB for MySQL에 접속합니다.

employees 데이터베이스 유무를 확인합니다.

만약 기본 데이터베이스를 다른 DB로 생성한 경우, employees data를 업로드하기 위하여 데이터베이스를 생성합니다.

Create하는 방법은 다음과 같습니다.
1) [DB Server 상세보기]-[Database 관리]메뉴에서 DB 추가
2) 사용자 제공 Stored Procedure를 통한 DB 추가 (참고 : 가이드 문서)

employees 데이터베이스로 접근하여 데이터 유무를 확인합니다.

source 명령을 이용하여 SQL 파일을 import 합니다.

> source employees.sql

정상적으로 데이터가 업로드 되었는지 추가로 확인합니다.

기본적인 SQL 데이터 외에도 사용자가 추가한 View, Function(Procedure), Definer 계정에도 함께 이관되는지 확인하기 위해 추가합니다.

  • 기능 확인을 위해 간단하게 추가해본 내용입니다.
  • View : employee_gender_view(직원 성비 확인)
CREATE VIEW employee_gender_view AS
SELECT emp_no, first_name, last_name, gender
FROM employees;
  • Function : string 입력을 위한 간단 Function
delimiter $$
DROP FUNCTION IF EXISTS employees.string_print$$
CREATE FUNCTION employees.string_print( str VARCHAR(20) ) RETURNS VARCHAR(20)
BEGIN
DECLARE copy_str VARCHAR(20);
SET copy_str = str;
RETURN copy_str;
END $$
delimiter ;

Function이 정상적으로 생성되었는지 확인합니다.

  • Definer Account : 임직원 관리를 위한 HR 계정
CREATE USER 'hr'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON employees.* TO 'hr'@'localhost';

Definer 계정이 정상적으로 생성되었는지 확인합니다.

3. Cloud DB for MySQL에서 엔진 버전 업그레이드 작업 순서를 고려하기 위하여 별도 Slave / Recovery를 추가합니다.

  • Slave는 [DB Server]-[DB 관리]-[Slave 추가]로 추가할 수 있습니다.
DB 관리 > Slave 추가 화면
  • Recovery는 [Backup]-선택한 DB의 [상세내역]-[시점복원] 또는 [Backup 파일 복원] 기능을 통해 추가 가능합니다.

4. 본격적으로 MySQL engine 메이저 버전 업그레이드를 수행합니다.

  • [DB Server]-[DB 관리]-[MySQL Engine Upgrade]를 클릭합니다.
DB 관리 > MySQL Engine Upgrade 화면
  • 주의 사항을 상세히 확인 후 [Major 버전 업그레이드]에 체크하여 업그레이드가 원활하게 진행될지 점검합니다.

[업그레이드 점검] 버튼을 누르면 점검이 진행됩니다.

업그레이드 점검 이후 다시 한번 주의사항 확인 및 사전 애플리케이션 등을 점검한 이후 업그레이드를 시작합니다.

업그레이드가 진행 중입니다.

업그레이드 완료 후 동일한 mysql에 접근해보면, 정상적으로 업그레이드가 진행 되었음을 확인할 수 있습니다.

실습을 마치며

MySQL 메이저 버전 업그레이드는 분명 어느정도 리스크가 따르는 작업입니다. 다만 최신 기능을 이용하고 추후 원활한 기술 지원을 위해서 버전 업그레이드는 꼭 진행해야 하는 필수 작업입니다.

기존에 Cloud DB for MySQL에 메이저 버전 업그레이드 기능이 없을 때에는mysqldump나 다른 도구를 이용하여 버전 업그레이드를 진행해야 하는 번거로움이 있었는데, MySQL Engine Upgrade를 통해 많은 부분을 해소할 수 있을 것으로 기대됩니다.

다만 중요 데이터를 담고 있는 DB의 특성상 사전에 테스트를 정밀하게 하여 기능을 검증하고, 애플리케이션과의 호환성도 상세히 검토하여 MySQL 8 버전으로 성공적인 업그레이드를 진행해 보시기 바랍니다.😊

참고 자료

문의하기

--

--

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM

We provide cloud-based information technology services for industry leaders from startups to enterprises.