まえがき
いままでデータベースはsqliteを使っていましたが、MySQLの勉強も兼ねて移行してみました。
初投稿のため読みづらいと思いますがお許しください。
環境
- ubuntu18.04
#手順
1.mysqlのインストールとセットアップ
$ sudo apt install mysql-server mysql-client
インストールが完了したら、以下のコマンドでパスワードなどを設定する。基本的には「y」でOK
$ sudo mysql_secure_installation
ユーザの作成
$ sudo mysql -u root -p
mysql> create user ユーザ名@ホスト名 identified by 'password';
- 'ユーザ名'@'ホスト名'のように表す。基本的にはlocalhostで良いはず。
- @以下を省略すると、'ユーザ名'@'%'となり、どのホストからも接続できる。
文字コードをUTF-8にする
/etc/mysql/mysql.conf.d/mysqld.cnfファイルの[mysqld]セクションに以下を追加する。
character-set-server = utf8
default_password_lifetime = 0 #パスワードの有効期限をも無効にする
MySQLを再起動する
$ sudo systemctl restart mysql
文字コードを確認する
mysql>show variables like '%char%';
+--------------------------------------+----------------------------+
| Variable_name | Value |
+--------------------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| validate_password_special_char_count | 1 |
+--------------------------------------+----------------------------+
2.データベース作成
データベースを作成
rootでログインしておく
mysql>create database データベース名
権限付与
mysql> grant all on データベース名.* to ユーザー名@localhost identified by 'パスワード';
- 指定したデータベースの全権限をそのユーザに追加する
3.sqlite3のデータを抜き出す
Djangoプロジェクトに移動する。
$ python manage.py dumpdata > dump.json
これでdump.jsonにデータが書き出される。
4.DjangoでMySQLを使う準備
settings.pyを変更
データベースの設定を変更する。
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'データベース名',
'USER': 'ユーザ名',
'PASSWORD': '',
}
}
manage.pyを変更
- 本番環境でも使用する場合は同様にwsgi.pyにも以下のモジュールをインポートする必要がある
#!/usr/bin/env python
import os
import sys
import pymysql # 追加
pymysql.install_as_MySQLdb() # 追加
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
try:
from django.core.management import execute_from_command_line
# 中略
PyMySQLをインストール
$ pip install PyMySQL
migrate実行
$ python manage.py migrate
5.MySQLにデータを入れる
さっき準備したdump.jsonを使ってデータを入れる。
このときにMySQLの文字コードをutf-8にする前にloaddataをすると文字コードのエラーが出るので注意!
その場合は、データベースをもう一度作れば大丈夫
$ python manage.py loaddata dump.json