django에서는 SQLite가 기본적으로 제공하고 있지만 실제로 서비스하기에는 부적합하기에 만만한 MySQL로 바꾸도록 하자.
먼저 MySQL의 설치는 리눅스 환경에서의 설치
$ pip install mysql-server
파이썬에서는 mysqlclient라는 라이브러리를 통해 MySQL과 DB를 연동할 수 있기 때문에 추가적으로 설치해야한다.
$ pip install mysqlclient
mysqlclient 설치중 에러
본인은 아래와 같이 에러가 떴다(egg_info error)
이유는 굳이 찾아보지않았지만 구글링결과libmysqlclient-dev
를 설치함으로써 해결했다.sudo apt-get install libmysqlclient-dev
MySQL - 실행
$ service mysql start
SQLite -> MySQL로 바뀌었으니 설정을 바꿔야한다.
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql', # 사용할 엔진 설정, mysql로 바꿔준다
'NAME': 'test', # 사용할 DB 이름
'USER': 'test', # User ID
'PASSWORD': 'test', # User Password
'HOST': 'localhost', # 접속 IP
'PORT': '3306', # 접속 Port (default:3306)
}
}
SECRET_KEY와 마찬가지로 외부 파일로 빼서 관리하는 것이 보안에 이롭다.
root 유저로 mysql 접속해서 사용할 데이터베이스를 만든다.
$ create database DB이름;
이를 사용하게할 유저(test) 를 만든다.
$ create user '유저ID' identified by '비밀번호';
- 비밀번호를 설정 안하면 유저로 접속시 에러가 생길 수 있다.
- 접속할 특정 ip를 지정하려면
'test'@'접속ip(localhost, ...)'
로 지정한다.
유저의 권한 지정 (아래 코드는 해당DB의 모든(*) 테이블에 모든 권한을 준다.)
$ grant all privileges on DB이름.* to '유저ID'; #해당DB의 모든(*) 테이블에 모든 권한을 준다.
$ grant select on DB이름.* to '유저ID'; # select 권한만 준다.
유저 접속 (콘솔)
$ mysql -u 유저이름 -p
$ 비밀번호 입력
데이터베이스를 사용하기위해 models.py를 수정하고 이를 적용하기위해 migrate를 한다.
$ python3 manage.py makemigrations # 초기 파일 만들기
$ python3 manage.py migrate