Membuat Skrip Auto Backup MySQL/Mariadb


Kegiatan mencadangkan (backup) suatu database pada hosting adalah hal yang sangat penting dilakukan, dengan tujuan menjaga agar jangan sampai ketika hosting bermasalah seperti diretas atau bermasalah ketika sistem upgrading, kita masih punya berkas cadangannya yang mana digunakan untuk mengembalikan situs kita ke semula.

Sejak saya bermigrasi dari shared hosting ke VPS Unmanaged, sesuai namanya yakni unmanaged yang berarti tidak diatur oleh pihak hoster melainkan seluruh pengaturan dibebankan oleh penyewa, dalam hal ini saya sendiri. Oleh karenanya, beberapa hal saya melakukan seperti membuat skrip auto backup database guna untuk mempermudah saya dalam hal pengaturan VPS.

Ada banyak cara untuk mencadangkan database, salah satu yang termudah adalah kita memanfaatkan mysqldump. Yakni: <h2 id="cara-simpel">Cara Simpel</h2> Cara simpelnya seperti berikut: <pre class="nums:false lang:zsh decode:true ">mysqldump -u root -p’PasswordAnda’ –all-databases > dbbackup.sql</pre> <h3 id="penjelasan-skrip">Penjelasan Skrip</h3> Argumen -u berarti user yang digunakan, kemudian -p berarti password yang digunakan. Perlu diketahui, untuk penulisan password gunakan tanda single-quote dan jangan dispasi, juga jangan pula gunakan bash variable. Cara di atas sangatlah simpel dan efektif cukup satu perintah saja. Hanya saja, cara di atas, kita mencadangkan seluruh database menjadi satu berkas, yang mana jika database Anda banyak menjadikan ukuran berkas tersebut menjadi besar. <h2 id="cara-kompleks">Cara Kompleks</h2> Jika Anda membutuhkan pencadangan tiap-tiap database dalam satu berkas masing-masing, Anda bisa mencontoh skrip di bawah ini: Pertama-tama kita buat dahulu direktori misalnya di /backup, lalu kemudian buat berkas bernama db-backup.sh: <pre class="nums:false lang:zsh decode:true ">$ sudo mkdir /backup $ sudo touch /usr/bin/db-backup.sh $ sudo chmod +x /usr/bin/db-backup.sh $ sudo nano /usr/bin/db-backup.sh</pre> Kemdian, masukan skrip di bawah ini: <pre class="lang:zsh decode:true">#!/bin/bash DB_USER=”root” DB_PASSWORD=”PasswordAnda” DB_PATH_BACKUP=”/backup” /usr/bin/mysql -u $DB_USER –password=$DB_PASSWORD -e ‘show databases’ | \ /usr/bin/awk ‘{print $1}’ | \ /bin/grep -v “Database|information_schema|performance_schema” | \ /usr/bin/xargs -i{} \ /usr/bin/mysqldump -u $DB_USER –password=$DB_PASSWORD \ –opt -Q –result-file=$DB_PATH_BACKUP/{}-date +%F-%I%p.sql {} gzip -q $DB_PATH_BACKUP/.sql</pre> <h3 id="penjelasan-skrip-1">Penjelasan Skrip</h3> Pertama-tama kita mengeset beberapa variabel yang mana nanti digunakan untuk perintah selanjutnya, untuk mempermudah jika kita ingin mengubah tujuan (path) ataupun username dan password dari MySQL/Mariadb. /usr/bin/mysql -u $DB_USER --password=$DB_PASSWORD -e 'show databases' menampilkan seluruh isi database dalam MySQL/Mariadb. Kemudian diapit oleh pipeline | yang mana digunakan untuk memindahkan output untuk input pada perintah lainnya, dan diapit dengan tanda backslash \ yang berarti untuk meringkaskan skrip agar kita bisa menuliskannya digaris baru. Kemudian output dari pipeline diteruskan untuk memanggil awk yang langsung menerjemahkan hasil dari perintah show databases ke bentuk karakter. Kemudian diteruskan lagi dengan grep -v yang berarti menampilkan isi kecuali kata-kata Database, information_schema, dan performance_schema. Terakhir kita memanfaatkan xargs untuk menjalankan perintah dari output grep agar mysqldump seakan mengeksekusi banyak perintah. Dan setelahnya, semua berkas dikompres menggununakn gzip. <h2 id="crontab">Crontab</h2> Jika kita ingin menggunakan skrip di atas menjadi otomatis dieksekusi pada tiap-tiap waktu. Kita perlu mengaturnya di crontab caranya adalah sebagai berikut: <pre class="nums:false lang:zsh decode:true ">$ sudo crontab -e</pre> Dan masukan seperti berikut: Jika Anda menggunakan skrip pertama: <pre class="nums:false lang:zsh decode:true">30 0 * * * /usr/bin/mysqldump -u root -p’PasswordAnda’ –all-databases > dbbackup.sql</pre> Jika Anda menggunakan skrip kedua: <pre class="nums:false lang:zsh decode:true">30 0 * * * /usr/bin/db-backup.sh</pre> <h3 id="penjelasan-skrip-2">Penjelasan Skrip</h3> 30 0 * * * berati dilakukan setiap hari pada jam 00:30. Adapun format crontab adalah sebagai berikut: <table> <tbody> <tr> <td>30</td> <td>0</td> <td></td> <td></td> <td></td> </tr> <tr> <td>minute</td> <td>hour</td> <td>day (month)</td> <td>month</td> <td>week</td> </tr> </tbody> </table> Anda bisa gunakan cara mudahnya di: https://crontab.guru