Melakukan query SQL melalui Bash Shell Scripting

Beberapa hari yang lalu untuk keperluan kuliah dan praktikum online, saya perlu membuat user dan melakukan grant akses ke sekian banyak mahasiswa sebagai user di DB Server.

Melihat jumlah mahasiswa yang lumayan banyak, saya tidak berpikir untuk melakukan query satu persatu, karena tentu akan memakan waktu dan akan menjadi pekerjaan yang membosankan ketika kita harus mengerjakanya satu persatu.

Sebenarnya waktu itu terpikir sekilas dua alternatif, yaitu menggunakan Bash dan Python.

Dua-duanya memungkinkan, namun sepertinya bash akan menjadi pilihan yang menarik. Saya sempat mencari ke beberapa referensi terkait hal ini, dan disini saya akan mencatat beberapa cara yang dapat digunakan untuk melakukan query SQL melalui Bash. Nanti, dikesempatan yang lain kita akan bahas bagaimana melakukannya di Python.

Cara Pertama

Cara yang pertama adalah dengan mengirim setiap line query dengan melakukan koneksi ke database untuk setiap line nya. Script sederhananya seperti ini:

mysql -uroot -p${rootpasswd} -e "CREATE USER 'username'@'localhost' IDENTIFIED BY 'userpasswd';"

Kita bisa menyimpan password user sebagai sebuah paremter yang kemudian nanti diinputkan atau langsung diset sebagai variable di line atas.

Cara Kedua

Cara kedua adalah dengan menggunakan MySQL Script. Cara ini menarik jika kita ingin memparsing query yang lumayan panjang, sehingga kita akan lebih mudah dalam membuat anotasinya.

#!/bin/bash

mysql -uroot -ppasswd <<MYSQL_SCRIPT
GRANT ALL PRIVILEGES ON  * . * TO  'tes1'@'localhost';
FLUSH PRIVILEGES;
MYSQL_SCRIPT

Bulking

Lalu, bukankah tadi saya bilang kalau saya ingin membuat banyak user sekaligus? Iya betul, lalu bagaimana saya melakukan bulkingnya?

Sebenarnya sederhana, karena saya mempunyai list data mahasiswa, saya kemudian siapkan data nim sebagai paramter untuk username dan juga password yang akan di parsing dalam query SQL nya.

Data ini saya simpan dalam bentuk .csv (sebenarnya bisa juga yang lain sih), kemudian saya buka dan saya loop menggunakan secript seperti berikut ini:

#!/bin/bash

rootpasswd="inipassword"

while IFS=, read -r col1
do
    mysql -uroot -p${rootpasswd} -e "CREATE USER '$col1'@'localhost' IDENTIFIED BY '$col1';"
done < list_mahasiswa.csv

echo "welldone"

Pada script diatas, saya melakukan perulangan data dan menggunakan kolom pertama dari data list_mahsaiswa.csv untuk membuat user baru.

Perulangan semacam ini juga bisa diterapkan di model yang satunya tadi, tinggal bagaimana kita inginkan saja, bisa kita sesuaikan sesuai dengan kebutuhan.