Cara Pindah Database Di Django ke MySQL
Cara Pindah Database Di Django ke MySQL

Pada tahap pengembangan, biasanya kita menggunakan SQLite3 sebagai databasenya. Setelah selesai, mungkin ada dari kita yang ingin berpindah dari SQLite3 ke database yang lain, misalnya ke MySQL atau MariaDB. Sebenarnya sangat mudah cara pindah database di Django, sebab kita hanya perlu mengubah pengaturan database di settings.py dan menginstall modul yang dibutuhkan. Sesuai dengan database baru yang akan digunakan.

Daftar Isi

Cara Pindah Database di Django ke MySQL

Pada contoh ini, saya akan mempraktikkan cara pindah database di django dari SQLite3 ke MySQL. Seperti yang sudah saya sampaikan sebelumnya, kita membutuhkan satu modul untuk menghubungkan antara django dan server database. Dalam hal ini adalah MySQL.

Untuk Django versi 3.0 sudah mendukung MariaDB 10.2 dan yang lebih baru, dan MySQL 5.6 ke atas. Kemudian kita akan menginstall MySQL DB API Driver, seperti pada python. Ada dua pilihan yaitu mysqlclient dan MySQL Connector/Python.

Baca Juga: Koneksi MySQL/MariaDB dengan Python

Langkah Persiapan

Setelah kita memutuskan untuk mengganti database yang digunakan di Django, tentu pertama kali menginstall database server pada OS yang digunakan. Misalkan pada OS Debian based cara menginstall MySQL Server atau MariaDB Server.

# menginstall MySQL Server
sudo apt-get install mysql-server

# menginstall MariaDB Server
sudo apt-get install mariadb-server

Versi server yang diinstall mengikuti repository os masing-masing. Dan perintah tersebut juga akan menginstall beberapa paket dependensi yang dibutuhkan. Untuk optimasi database, mungkin akan dibahas pada tulisan yang berbeda, supaya tidak keluar topik.

django mysql databaseSetelah itu saya membuat satu database bernama blog_saya, dan membuat user untuk login ke database server dengan username userd passwordnya admin123. Lalu memberikan grand akses ke database tersebut untuk user yang baru saja dibuat.

Ok, setelah selesai menginstall database server tersebut, sekarang install modul python yang dibutuhkan. Contoh saya menggunakan mysqlclient. Cara installnya sama saja seperti kita menginstall modul pyton lainnya menggunakan pip.

django virtual pip listDisini saya pastikan dulu, sudah mengaktivkan virtual environment (virtualenv) Python. Dan jangan dimatikan dulu koneksi internetnya ya... Karena kita masih membutuhkannya.

install mysql server

pip install mysqlclient

django mysql client databaseSaya sudah berhasil install mysqlclient, dan sekarang kita ke file settings.py.

Pada baris berikut ini:

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

Ini adalah setting.py yang masih menggunakan SQLite3. Dan untuk mengubah menjadi seperti berikut

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'blod_saya',	# Nama database
        'USER': 'userd',	# username database
        'PASSWORD': 'admin123',	# password database
        'HOST': 'localhost',	# host default localhost
        'PORT': '3306', 	# Port database yang digunakan. Defaultnya 3306
        'OPTIONS': { 		# ini optional jika ada error (mysql.002)
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}

Kadang pada konfigurasi server tertentu menimbulkan error, salah satunya error django (mysql.002) mysql strict mode is not set for database connection 'default'. Maka untuk menghilangkan error tersebut, kita perlu menambahkan OPTIONS 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'.

Backup dengan dumpdata dan loaddata

Kalau database lama berisi banyak record, dan teman-teman ingin memindahkan juga data lama ke database yang baru. Maka lakukan dumpdata sebelum mengedit file settings.py.

Caranya python manage.py dumpdata -> db.json. Data pada database lama, disimpan dalam format json, perintah ini untuk mengambil semua tabel. Kalau ingin spesifik tabel tertentu saja maka perintahnya adalah python manage.py dumpdata auth.user -> user.json. Perintah tersebut untuk mengambil tabel user saja. Dan begitu juga dengan tabel lainnya.

Setelah data dibackup, kemudian ubah pengaturan DATABASES pada file settings.py seperti di atas. Dan menjalankan perintah makemigrations dan migrate. Pada saat migrate tambahkan option --run-syncdb. Dan untuk mengembalikan data ke database baru, gunakan perintah loaddata contohnya: python manage.py loaddata db.json atau yang tadi kita sudah ambil data tabel user.auth maka perintahnya python manage.py loaddata user.json.

Teman-teman semua, perhatikan nama file dan lokasi tempan menyimpan file json tersebut.

Akhir Kata

Mudah sangat, cara pindah database di django dari SQLite3 ke MySQL atau MariaDB. Cara yang sama juga bisa diterapkan pada database yang lain seperti PostgreSQL, Oracle, dan Lainnya.

Misalkan ada error seperti ini saat runserver django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)") itu artinya database server belum runing. Coba jalankan server databasenya dan ulangi lagi.