Convert Database OpenStack Cinder dari Sqlite3 ke MySQL - Debian Jessie

Published by Dhani Setiawan on
Filed under: OpenStack Tags: , ,

Cinder adalah service block storage di OpenStack. Di instalasi OpenStack Debian 8 juga ada masalah di databasenya.

Problem ini baru  Saya ketahui kemudian, padahal Cinder instalasi sebelumnya sudah berjalan. Ketika mau ditambahkan node baru untuk block storage, baru ketahuan ternyata ada problem konfigurasi Cinder.

By default, Cinder menggunakan database sqlite3 sedangkan pada instalasi ini saya menggunakan MySQL. Kesalahan Saya pada waktu itu tidak melakukan verifikasi database, saya hanya lihat service Cinder berjalan dan saya anggap tidak ada masalah, setelah timbul masalah baru diketahui Cinder menggunakan database Sqlite, padahal di konfigurasi cinder jelas-jelas saya menggunakan MySQL.

Konfigurasi Cinder ada di /etc/cinder/cinder.conf.

Kesalahan pertama, di file konfigurasi tertulis sql_connection = mysql://.... yang seharusnya connection = mysql://... Ini harus diganti, bisa dengan sed.

# sed -i 's/sql_connection/connection/' /etc/cinder/cinder.conf

Kesalahan kedua, line koneksi database diatas dibawah section [ssl] yang harusnya di section [database]. Ini juga harus dibetulkan.

Berikutnya, data yang sudah terlanjur ada di Sqlite harus dimigrasikan ke MySQL. Bagi Saya, ini yang susah karena saya tidak paham Sqlite, MySQL pun hanya seadanya saja.

Ini langkah-langkah yang dilakukan:

Matikan semetara foreign key checking:

$ echo "SET foreign_key_checks = 0;" > cinder-schema.sql

Dump skema database, defaultnya database sqlite ada di /var/lib/cinder/cinder.sqlite :

$ sqlite3 /var/lib/cinder/cinder.sqlite .schema | tee -a cinder-schema.sql

Dump data:

$ sqlite3 /var/lib/cinder/cinder.sqlite .dump | \ 
> grep "^INSERT INTO" | tee cinder-data.sql

Sampai sini, sudah ada dua file. cinder-schema.sql yang berisi skema database dan cinder-data.sql yang berisi data. Berikutnya file-file ini harus diedit supaya conform dengan MySQL.

Hapus statement yang tidak perlu:

$ sed -i '/PRAGMA/d; /BEGIN TRANSACTION;/d; /COMMIT;/d' cinder-schema.sql

Di skema tersebut ada kolom binary tidak diquote dan key dengan double quote. keduanya harus di quote dengan backtick (`). Kemudian di file cinder-data.sql, semua table dengan double quote juga harus diganti dengan backtick

$ sed -i 's/\"key\"/`key`/' cinder-schema.sql
$ sed -i 's/binary/`binary`/' cinder-schema.sql
$ sed -i 's/INSERT INTO \"/INSERT INTO `/' cinder-data.sql
$ sed -i 's/\" VALUES/` VALUES/' cinder-data.sql

Setelah itu, gabungkan kedua file diatas:

$ cat cinder-data.sql >> cinder-schema.sql

Hidupkan kembali foreign check:

$ echo "SET foreign_key_checks = 1;" >> cinder-schema.sql

File cinder-schema.sql sudah berisi command yang conform dengan MySQL dan tinggal diimport. Kalau database belum ada, harus dibuat dulu dan kalau database sudah ada, table-table nya harus di drop dulu semua.

Import database, dengan asumsi user database-nya cinder dan nama databasenya cinderdb:

$ mysql -u cinder -p cinderdb < cinder-schema.sql

Restart Cinder:

 # systemctl restart cinder-api.service   
 > cinder-volume.service   
 > cinder-scheduler.service

Sampai disini seharusnya Cinder sudah bisa berjalan dengan Mysql dan komunikasi antar block storage node sudah bisa.


Sebarkan artikel ini :



Anda tidak perlu repot-repot mengunjungi blog ini.
Silahkan masukkan alamat email dan begitu ada post baru, Saya akan minta robot FeedBurner mengantarkannya ke email inbox Anda.

Delivered by FeedBurner


blog comments powered by Disqus