LoginSignup
8
14

More than 5 years have passed since last update.

Django SQLite3からMySQLへの移行

Posted at

まえがき

いままでデータベースは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

参考

8
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
14