Saturday, 29 October 2016

Backup & Restore MySQL

Tips & Trick 


Pada versi MySQL terbaru, character set default yang digunakan adalah utf8mb4, agar compatible direstore ke MySQL versi lawas, kita harus mengubahnya menjadi utf8.

sed 's/utf8mb4_unicode_520_ci/utf8_unicode_ci/g' original-mysql-data.sql > updated-mysql-data.sql sed 's/utf8mb4/utf8/g' original-mysql-data.sql > updated-mysql-data.sql


Restore Backup yang Memiliki Kolom dengan Tipe GENERATED ALWAYS AS

Error ini terjadi jika kita merestore backup dari MariaDB ke MySQL, solusi pragmatisnya adalah dengan mengubah tipe kolom nya : 

sed  's/GENERATED ALWAYS AS .* VIRTUAL/NOT NULL/' backup.sql > backup_new.sql  

Hapus kolom yg kita ubah sementara tadi, lalu regenerate kembali : 

alter table tbl_penjualan drop column cnofaktur_tanpa_jenisbayar ;

alter table tbl_penjualan add column  `cnofaktur_tanpa_jenisbayar` varchar(14) GENERATED ALWAYS AS (concat(left(`cnofaktur`,3),right(`cnofaktur`,octet_length(`cnofaktur`) - 4))) VIRTUAL;

Referensi

  1. Continuous MySQL backup validation: Restoring backups, https://code.facebook.com/posts/1007323976059780/continuous-mysql-backup-validation-restoring-backups

Friday, 21 October 2016

Import File CSV Berukuran Besar dengan csvkit

Status : Draft

Untuk melakukan import file CVS besar banyak cara yang bisa dilakukan, diantaranya dapat menggunakan tool bawaa MySQL, yaitu mysqlimport atau LOAD DATA atau menggunakan tool pihak ke tiga, seperti Pentaho Data Integration (PDI). Tapi kali ini, kita akan menggunaka tool pihak ke tiga yang lain, yaitu CSVKit [1].

Instalasi 


Untuk instalasi di Ubuntu, cukup dengan perintah : sudo apt-get install  python3-csvkit . Untuk platform lain, silahkan lihat bagian instalasi di [1].

Import Data 


Untuk melakukan import data, jalankan perintah berikut :

csvsql --dialect mysql --snifflimit 0   bigfile.csv > bigfile.sql

Jika ketika menjalankan perintah ini, Anda menemui error seperti berikut :

Your file is not "utf-8" encoded. Please specify the correct encoding with the -e flag. Use the -v flag to see the complete error.

Itu artinya, file Anda disimpan tidak dengan format utf-8. File Anda harus dikonversi ke utf-8, di Ubuntu Anda dapat melakukannya dengan menjalankan perintah berikut : 

iconv -f ISO8859-15 -t utf-8 bigfile.csv -o bigfile-utf8.csv

Kemudian, jalankan perintah csvsql kembali : 

csvsql --dialect mysql --snifflimit 0   bigfile-utf8.csv > bigfile.sql

Jika sudah, import file bigfile.sql seperti biasa.

Atau jika ingin langsung di-insert ke database, bisa menggunakan perintah berikut :

csvsql --db  mysql://username:password@localhost:3306/databasename --tables table_name --insert bigfile.csv

Ada kemungkinan, jika pustaka python untuk mengakses MySQL belum ada, Anda harus menginstall nya terlebih dahulu :

sudo apt-get install python3-pymysql

Referensi


  1. CSVKit, https://csvkit.readthedocs.io