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:
30 | 0 | * | * | * |
minute | hour | day (month) | month | week |
Anda bisa gunakan cara mudahnya di: https://crontab.guru
Komentar