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:

Cara Simpel

Cara simpelnya seperti berikut:

mysqldump -u root -p'PasswordAnda' --all-databases > dbbackup.sql

Penjelasan Skrip

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.

Cara Kompleks

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:

$ 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

Kemdian, masukan skrip di bawah ini:

#!/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

Penjelasan Skrip

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.

Crontab

Jika kita ingin menggunakan skrip di atas menjadi otomatis dieksekusi pada tiap-tiap waktu. Kita perlu mengaturnya di crontab caranya adalah sebagai berikut:

$ sudo crontab -e

Dan masukan seperti berikut:

Jika Anda menggunakan skrip pertama:

30 0 * * * /usr/bin/mysqldump -u root -p'PasswordAnda' --all-databases > dbbackup.sql

Jika Anda menggunakan skrip kedua:

30 0 * * *  /usr/bin/db-backup.sh

Penjelasan Skrip

30 0 * * * berati dilakukan setiap hari pada jam 00:30. Adapun format crontab adalah sebagai berikut:

300***
minutehourday (month)monthweek

Anda bisa gunakan cara mudahnya di: https://crontab.guru