외부 MySQL서버에 데이터베이스 만들기, Django와 DB서버의 MySQL 연동하기

GG_Cloud·2023년 7월 31일
0
post-thumbnail

팀원들이 Django 서비스를 서빙하기 위해 각 기능들을 구현해놓았고,
Django의 각종 앱들의 구동에 필요한 DB를 매핑하는 작업을 했다.

장고에서 startproject를 통해 coin 폴더를 만들었고, 장고의 핵심 파일인 settings.py 파일은 coin 폴더 내에 있다.

그 외 account, chat, cobo, playcrypto 등의 기능은 startapp 을 통해 생성했다.

제목에서 말한 장고와 DB서버의 연동은 settings.py 파일을 수정하는 방식으로 진행했다.

settings.py 파일의 DATABASE 부분이다.
수정 전에는 장고 서비스의 DB부분이 로컬호스트로 매핑되어 있었다.
이번 작업을 통해 DB서버의 MySQL에 playcrypto 라는 데이터베이스를 생성하고
장고 서비스의 각종 기능들을 위한 DB로 사용할 예정이다.

1. 장고에 쓸 데이터베이스 만들기

일전에 GCP에서 새로운 인스턴스를 생성하며 해당 인스턴스 내에 Docker-compose를 통해 MySQL, MongoDB를 설치했다.

MySQL Workbench를 통해 해당 인스턴스 내의 MySQL에 접근하고, 장고 서비스에 쓸 playcrypto 데이터베이스 생성을 시도했다.

비밀번호를 치고 playcrypto_db 에 접속한다.

좌측의 데이터베이스 playcrypto를 만들고, 장고의 python manage.py migrate를 실행하면, 각 기능별 models.py와 외부 데이터베이스가 연동되면 제목에서 말한

Django와 DB서버의 MySQL 연동하기

가 완료된다.

하지만 MySQL 워크벤치에서는 단순하게 create database를 통해 playcrypto 데이터베이스를 생성하지 못했다.

MySQL Workbench 를 통해 DB가 있는 인스턴스로 접속을 한 경우,
권한 문제가 생기기 때문이었다.

이를 해결하기 위해
1.터미널을 통해 외부 인스턴스로 직접 접속한 후
2.그곳에서 쿼리문을 날려 root라는 사용자에게 스키마(데이터베이스)를 생성할 권한을 부여하고
3.다시 MySQL 워크벤치로 돌아와 데이터베이스를 생성할 것이다.

  1. 외부 인스턴스 접속 : 외부 인스턴스의 공개키가 있는 폴더로 가서 ssh -i 커맨드를 통해 DB가 있는 인스턴스로 접속한다.
    ssh -i <공개키> <외부인스턴스 이름>@<인스턴스의 외부 ip>
  1. sudo docker exec -it mysql /bin/bash : bash 진입
    mysql -u root -p : mysql에 root로 접속. 아래 password 넣고 진입
    GRANT ALL PRIVILEGES ON . TO 'root'@'%'; : 'root'라는 사용자에게 모든 데이터베이스 (.)에 대한 접근 권한 주기
  1. 위 작업이 끝났다면, MySQL Workbench에 root로 로그인 한 후 데이터베이스를 생성할 수 있다.

create database playcrypto;
를 통해 외부 DB에 playcrypto 라는 데이터베이스를 생성했다.

마지막으로 터미널로 가서, 장고의
python3 manage.py migrate
명령어를 통해

Django와 DB서버의 MySQL 연동하기

를 마무리한다.

profile
클라우드

2개의 댓글

comment-user-thumbnail
2023년 7월 31일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

답글 달기
comment-user-thumbnail
2023년 7월 31일

크으 요약 좋습니다~

답글 달기