MySQL에서 SQLite로 마이그레이션 하기 with. Django

레일리·2024년 10월 16일
1
post-thumbnail
post-custom-banner

왜 필요할까?

데이터베이스 마이그레이션가 필요한 이유는 각자 다양합니다.

저는 기존에 전대알림 서비스의 서버를 위와 같이 운영하고 있었습니다.
AWS Lightsail은 정액제로 인스턴스와 데이터베이스 등을 이용할 수 있는 서비스 입니다. (Instance는 EC2, Databse는 RDS라고 생각하시면 됩니다)

인스턴스는 5 USD/월, 데이터베이스는 15 USD/월을 사용하고 있었습니다. 하지만 수익 목적이 없는 서비스에서 매달 20달러 이상의 유지 비용을 지불하는 것은 부담이 됩니다.

또한 해당 서비스는 굳이 AWS에서 데이터베이스 서비스를 이용할 만큼 스펙(용량, 성능, 안정성)이 필요하지 않습니다.

그래서 위와 같이 인스턴스 내부에 SQLite 데이터베이스를 두기로 했습니다. 물론 인스턴스 내부에 MySQL을 설치해 사용해도 되지만 해당 서비스는 SQLite로 충분하다 판단했습니다. (WAS는 Django)

어떻게 할까?

MySQL to SQLite 파이썬 라이브러리 설치

  • 파이썬은 설치 되어있다고 가정합니다.
  • 필자는 Mac OS 환경입니다.

파이선 라이브러리 중 mysql-to-sqlite3가 있습니다. 설치해 줍니다.

$ pip install mysql-to-sqlite3

사용 방법 알아보기

라이브러리 공식문서를 통해 기본 사용법을 알아봅시다.

$ mysql2sqlite [OPTIONS]

필수 옵션

  • -f : SQLite 파일이 생성될 경로
  • -d : 기존 MySQL 데이터베이스 이름
  • -u : MySQL 사용자 이름

패스워드 옵션

  • -p : MySQL 비밀번호(명령 실행 중에 입력하게 됨)

연결 옵션

  • -h : MySQL host 주소
  • -P : MySQL port(기본값 3306)

사용해 보기

저는 AWS RDS의 MySQL을 SQLite로 변환해야 됐기 때문에 아래와 같은 형식으로 명령어를 구성했습니다. (아래의 각 옵션 값은 가상 값입니다)

$ mysql2sqlite -f db.sqlite3 -d mydb -u admin -h myrdsdb.abc123xyz.amazonaws.com -p

명령을 실행하면 패스워드 입력하라고 나옵니다. 패스워드를 입력하면 변환 과정이 진행되고 SQLite 파일이 생성됩니다.

Django DATABASE 설정 변경하기

SQLite는 단일 파일로 관리되기 때문에 원하는 위치로 파일을 옮기면 됩니다.

그리고 기존에 장고에서 MySQL로 설정되어 있던 설정을 SQLite로 변경합니다. Django는 기본적으로 SQLite를 사용하니까 프로젝트 처음 생성했을 때의 설정으로 돌아가면 되겠죠?

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

마무리..

무수익 서비스 유지 비용을 줄여보고자 MySQL에서 SQLite로 마이그레이션을 진행해 보았습니다.
하지만 아쉬움 점은 SQLite 파일이 날라가 버리면 데이터를 복구할 수 없습니다.

이 문제를 해결하기 위해 자동화 스크립트로 SQLite 파일 백업 기능을 만들 수 있습니다. 백업 자동화는 다음 포스팅에서 해보겠습니다!

profile
나야, 개발자
post-custom-banner

0개의 댓글