Backup Berkala MySQL 5.7.40 di Ubuntu 18.04 menggunakan Corn Job

    Saya mempunyai aplikasi yang mencatat beberapa data-data yang menurut saya penting. Data tersebut saya simpan dalam sebuah database Mysql versi 5.7 dan running pada VPS Ubuntu 18.04. Berhubung data yang ada erat kaitannya dengan hitung-hitungan dan aplikasi masih terus dalam fase pengembangan dan rawan terjadi kesalahan pada program yang saya buat, saya terpikir untuk melakukan backup harian secara otomatis selama 7 hari terakhir.

    Sedikit latar belakang, aplikasi running di VPS droplet Digital Ocean. Jadi server untuk terus menyala selama 24/7 tidak ada masalah. Saya coba baca-baca akhirnya menemukan 2 kata kunci untuk penyelesaian masalah saya ini backup database dan Scheduler. Saya akan coba berbagi bagaimana cara saya dalam membuat tersebut pada artikel ini.

Requirements dan Batasan Sistem :

  • RDBMS Mysql 5.7.40
  • Sistem Operasi Ubuntu 18.04.04

Backup Database 

Kenapa butuh backup ?

    Tidak ada orang / system yang 100% aman dari ancaman terhadap data yang mereka miliki. Mulai dari masalah listrik, kegagalan perangkat lunak maupun perangkat keras, dan masalah lainnya. Bahkan menurut artikel yang dirilis Fortune, terjadi lonjakan 105% serangan siber ransomware pada tahun 2021 dengan tujuan untuk melumpuhkan orang / bisnis dengan menyandera sistem pada komputer mereka, sehingga tidak dapat digunakan sampai penyerang ini mendapat tebusan. 
    Berkaca dari artikel tersebut keamanan dan keberlangsungan data merupakan hal penting dan salah satunya bisa diraih dengan cara rajin melakukan backup database. Selain itu keuntungan lain yang didapat dari melakukan backup database adalah sebagai berikut:
  • kemampuan untuk melakukan perbaikan terhadap data yang hilang atau korup/bermasalah,
  • salah satu cara untuk pertahanan terhadap serangan siber,
  • asuransi murah terhadap interupsi data pada bisnis,
  • keperluan untuk kepatuhan (compliance) dan audit,
  • dan lain sebagainya.

Backup database pada Mysql 5.7.40

Salah satu cara yang dapat digunakan dalam melakukan backup adalah menggunakan command mysqldump. Command mysqldump akan menghasilkan dump files. Dump file yang dihasilkan dari command ini bisa digunakan untuk:
  • backup, untuk mengembalikan data apabila terjadi kehilangan data,
  • source data ketika hendak melakukan replika,
  • source data untuk eksprerimen, semisal untuk melakukan copy data ke environment development atau untuk melakukan test apakah ada yang incompatibilities saat hendak melakukan upgrade versi Mysql.
Dokumentasi dari command mysqldump ini bisa dibaca secara lengkap dibaca pada laman berikut.  Anda bisa mencoba-coba command mysqldump jika berkenan. Adapun command mysqldump yang akan digunakan pada bahasan kali inia adalah seperti berikut:

mysqldump --no-tablespaces -u username -p'password' database_name > filesimpan.sql 

dengan penjelasannya:
  • --no-tablespaces digunakan untuk menghindari kemungkinan error 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces. Rujukannya bisa dilihat pada pembahasan Stackoverflow berikut.
  • -u username -p'password' digunakan untuk memastikan credential user yang akan melakukan backup. Pada saat digunakan, ganti username dengan username yang kalian gunakan untuk login ke Mysql. ‘password’ dimasukkan ke dalam petik (‘’) untuk mengatasi apabila dalam password yang digunakan ada spesial karakter. Semisal username yang digunakan untuk login adalah ‘retail2’ dan passwordnya ‘Retail@--20@’.
  • database_name merujuk ke nama database yang digunakan.Semisal db_toko adalah nama database yang digunakan untuk aplikasi ini.
  • > filesimpan.sql digunakan untuk menyimpan hasil mysqldump ke dalam file .sql yang disiapkan. Semisal nama file yang akan disimpan hasil dari mysqldump adalah db_retail_bck_20231230.sql.
Sehingga contoh lengkap command yang terbentuk adalah :
mysqldump --no-tablespaces -u retail2 -p'Retail@--20@' db_toko > db_retail_bck_20231230.sql

Scheduler

Scheduler yang digunakan adalah Cron. Cron adalah Linux job scheduler yang digunakan untuk mengatur job (tugas) berjalan secara berkala pada tanggal atau interval tertentu. Job pada pembahasan ini adalah perintah backup Mysql command yang ada pada subbab Backup database pada Mysql 5.7.40 dengan tambahan modifikasi.

Bash file Job

Command yang dibuat pada subbab Backup database pada Mysql 5.7.40 akan disimpan ke dalam file bash. Semisal file tersebut adalah backup_daily.sh yang terletak pada direktori /home/user/scripts/. Sehingga path lengkapnya adalah /home/user/scripts/backup_daily.sh.  Adapun nanti isi filenya adalah seperti berikut:

Bash file di atas digunakan untuk melakukan backup ke dalam file yang mempunyai nama depan db_retail_bck_ dan akan melakukan penghapusan file yang usianya lebih dari 7 hari. Untuk penjelasan lebih detailnya adalah sebagai berikut:

Bagian filename
#filename backup 
fileName= db_retail_bck_$(date +%Y%m%d).log 
path='/home/user/backup' 
fullPath=${path}/${fileName}

Pada bagian ini dideklarasikan format nama dan letak pathnya. Pada baris code fileName= db_retail_bck_$(date +%Y%m%d).log menjelaskan format file namenya db_retail_bck_ diikuti dengan tahun bulan dan tanggal adalah sehingga akan dihasilkan nama pada tanggal 30-Dec-23 db_retail_bck_20231230.log. Pada baris code path='/home/user/backup' menjelaskan path/alamat folder file akan disimpan. Pada baris code fullPath=${path}/${fileName} menggabungkan path dan filename sehingga terbentuk full path (/home/user/backup/db_retail_bck_20231230.log) yang memudahkan untuk proses selanjutnya.

Bagian proses backup
#dobackup 
if ! test -f ${fullPath}; then
mysqldump --no-tablespaces -u retail2 -p'Retail@--20@' db_toko >  ${fullPath}
fi

Bagian script ini digunakan untuk melakukan backup. Tapi sebelum dilakukan proses mysqldump dicheck terlebih dahulu apakah file backup sudah terbentuk sebelumnya, sehingga tidak melakukan duplikasi data dan proses. Baris code if ! test -f ${fullPath} melakukan pengecheckan file sudah terbentuk atau tidaknya. Jika sudah terbentuk maka perintah mysqldump tidak dijalankan.

Bagian proses penghapusan file yang lebih lama dari 7 hari
#if exist and backup success delete file older than 7 days
if test -f ${fullPath}; then 
find ${path} ! -type d -mtime +7 -name 'db_retail_bck_*.sql' -delete
fi

Baris code if test -f ${fullPath} melakukan pengecheckan apa file hasil proses backup sudah terbentuk, jika sudah lakukan proses penghapusan file. Penghapusan file berdasarkan mengambil file yang usianya / last modified lebih dari 7 hari. Idenya adalah mencari file di path find ${path}. Kemudian cari yang modified datenya lebih dari 7 hari ! -type d -mtime +7. Kemudian seleksi file yang mempunyai nama file depannya db_retail_bck dengan ekstensi .sql melalui code -name 'db_retail_bck_*.sql'. Jika sudah lakukan delete -delete.

Memasang Cron

Untuk memasang job yang sudah dibuat ke dalam scheduler Cron job, maka job dimasukkan ke dalam Cron table (crontab). Cara mengeditnya menggunakan command crontab -e, jika baru pertama kali mengedit akan muncul pilihan menggunakan text editor apa.


File bash tadi akan disetting running setiap jam 2 pagi setiap harinya, maka command yang ditulis pada Crontab sebagai berikut:
0 2 * * * /home/user/scripts/backup_daily.sh


kemudian simpan file Crontab yang sudah diedit tadi. Maka selama komputer, setiap jam 2 dinihari Cron akan menjalankan command tadi. Untuk interval bisa diatur pada bagian baris code ini 0 2 * * *. Silahkan gunakan link ini(https://crontab.guru/) untuk membantu dalam menulis interval Cron yang akan dibuat.

Sekian dari saya atas perhatiannya saya berterimakasih dan memohon maaf apabila terdapat kesalahan. Apabila ada saran/masukan dari artikel mohon untuk bisa ditulis di komentar atau menghubungi lewat email yang tersedia pada profil. (Sufyan Saori)

Sumber


Posting Komentar untuk "Backup Berkala MySQL 5.7.40 di Ubuntu 18.04 menggunakan Corn Job"