Membuat backup file dan database terjadwal otomatis pada Linux

Cadangan data merupakan hal yang paling penting setelah sukses menginstall web server dan menghosting website dalam VPS. Bayangkan saja, apabila server anda down dan situs tersebut sangatlah vital bagaimana anda memulihkannya? Misal cuma masalah sementara sih mungkin bisa ditoleransi. Tapi kalau sampai musibah besar seperti rusaknya HDD/SSD dari node VPS anda atau malah providernya yang kabur entah kemana jelas bikin frustasi. Karena itu wajib hukumnya kita membuat backup rutin sebagai jaga – jaga.

Jadi… tutorial saya kali ini adalah cara saya mempersiapkan diri disaat ada musibah dan sudah beberapa kali menyelamatkan saya. Jarang memang tapi kalau pas butuh rasanya sangat tertolong. Tinggal cari provider VPS baru dan restore semuanya, atau untuk sementara bisa ke Digital Ocean dulu.

Langsung saja ya, silahkan buat file script shell:

nano backup.sh

Kemudian isikan kode dibawah:

mysqldump -u nama_user -pkata_sandi nama_database > /home/backup/asli/nama_database-`tanggal '+%y%m%d_%H%M%S'`.sql
tar -czvf /home/backup/asli/servernesia.com-`tanggal '+%y%m%d_%H%M%S'`.tar.gz //usr/local/lsws/servernesia.com
tar -czvf /home/backup/siap/servernesia.com-`tanggal '+%y%m%d_%H%M%S'`.tar.gz /home/backup/asli
rm -rf /home/backups/asli/*

Ini akan membuat backup database MySQL dan file – file dalam direktori website anda, kemudian akan dikompresikan menjadi satu arsip Gunzip. Nanti pada nama filenya akan bisa dengan mudah diidentifikasikan kapan dibuatnya.

Jangan lupa:

  1. nama_user adalah username dari MySQL.
  2. kata_sandi gantikan dengan password user yang anda gunakan.
  3. nama_database isikan dengan apa nama database yang ingin dibackup. Atau anda bisa menggantikan parameternya dengan --all-databases agar seluruh database yang ada akan dibackup tapi membutuhkan root.
  4. Sedangkan /usr/local/lsws/servernesia.com merupakan direktori virtual host di OpenLiteSpeed, cuma untuk ilustrasi saja. Harap anda gantikan dengan lokasi yang sesuai pada VPS anda.

Tahap selanjutnya adalah menjadwalkan agar script diatas dieksekusi secara terjadwal memanfaatkan cron:

nano /etc/cron.d/auto_backup

Isikan kode berikut didalamnya:

0 0 * * *  bash /root/backup.sh

Saya buat agar backup dijalankan satu hari sekali pas bergantinya hari. Oh ya, lokasi scriptnya mungkin perlu anda sesuaikan. Selesai! 😀

Anda tinggal mengambil backup setiap harinya pada folder /home/backup/siap/ dan disimpan pada server lain atau ke komputer. Terserah anda, yang penting aman.

Langkah selanjutnya agar lebih otomatis mungkin bisa otomatis upload ke DropBox atau sinkronisasi otomatis menggunakan rsync. Jadi kita lebih mudah lagi mencadangkan data – datanya.

Semoga bermanfaat. 🙂

13 pemikiran pada “Membuat backup file dan database terjadwal otomatis pada Linux

  1. mau nambahin dikit mas, mungkin sama saja 🙂
    pertama saya ubah dulu zona waktunya :

    rm /etc/localtime
    cd /usr/share/zoneinfo
    ls
    cp /usr/share/zoneinfo/Asia/Jakarta /etc/localtime
    vi /etc/sysconfig/clock
    ZONE="Asia/Jakarta"
    source /etc/sysconfig/clock # reload

    kedua instal crontab :

    yum install vixie-cron crontabs -y
    chkconfig crond on
    service crond start

    tambahin perintah backup, saya atur jam 2 tengah malam :

    crontab -e
    10 02 * * * /usr/share/nginx/backup/sitebackup.sh
    30 02 * * * /usr/share/nginx/backup/dbbackup.sh
    service crond restart

    isi script dbbackup.sh :

    mysqldump -u database --password=kotaro database | gzip > /usr/share/nginx/backup/files/bajahitam_$(date +%Y-%m-%d_%H.%M.%S).sql.gz
    
    find /usr/share/nginx/backup/files/bajahitam* -mtime +1 -exec rm {} \;

    isi script sitebackup.sh :

    tar -czf /usr/share/nginx/backup/files/sitegorgom_$(date +%Y-%m-%d_%H.%M.%S).tar.gz -C / usr/share/nginx/html/
    
    find /usr/share/nginx/backup/files/sitegorgom* -mtime +1 -exec rm {} \;

    sesuaikan untuk baris find di kedua script diatas pada bagian +1 yang maksudnya otomatis menghapus backupan lama yang umurnya lebih dari 2 hari 🙂

    oh iya jangan lupa buat folder backup sesuai script dan perintah pada crontab.
    untuk permissionnya saya atur sebagai berikut :
    file sitebackup.sh dan dbbackup.sh atur ke 775.
    folder backup atur ke 775.

    mohon koreksinya mas chandra terutama untuk bagian permission ini saya agak bingung pakai yang 775 atau 755 😀
    semoga bermanfaat.

    • Wah… terimakasih banyak mbak. Malah lebih lengkap daripada yang saya tulis. Haha. 😀 Kalau bisa sih 755 mbak, supaya lebih membatasi hak akses dari proses selain backupnya sendiri.

  2. mas chandra,
    mohon dibuatkan tutorial cara backup dari satu vps ke vps lain, contohnya dari digital ocean ke xvmlabs.
    trims.

    • Haha 😀 Kebetulan banget mbak. Saya memang sedang siap – siap merancang sistem backup yang acak adut selama ini. Setiap VPS saya beda – beda tergantung cuaca pas settingnya. Dan kalau dipasangin Dropbox bisa habis RAMnya untuk yang kecil.

      Semoga secepatnya bisa saya coba dan buat tutorialnya. 🙂

      • Semoga dalam seminggu ini mbak sudah selesai dan sukses diujicoba ke beberapa VPS saya. Aslinya sistem backupnya nanti bukan hal yang rumit kok mbak. Wacana sudah ada tapi kendala waktu karena urusan real life jadi agak tertunda.

        Garis besarnya nanti akan melanjutkan tutorial disini dan mengumpulkan semuanya jadi satu. Kemudian backup tersebut akan dibackup lagi, rencananya minimal juga sinkron dengan Dropbox dan ada calon satu lagi yang masih saya pertimbangkan. Sebisa mungkin saya menggunakan alat yang sudah ada atau dari repository, jadi tidak perlu install manual seperti Dropbox.

    • Mungkin bisa digabungkan ini mas: https://servernesia.com/1817/cara-kirim-email-linux/

      Kalau databasenya kecil dan dikompres (tar.gz semacamnya) masih ok diattach lewat email, tapi kalau ukurannya cukup besar ada kemungkinan ditolak server email tujuan mas. Apalagi kalau mau file – file websitenya juga dikirimkan, hampir pasti jadi masalah nantinya, kecuali ini cuma web statis murni HTML dan tidak banyak gambar.

  3. halo..

    kalau saya punya 10 data base, pada bagian ini

    mysqldump -u nama_user -pkata_sandi nama_database > /home/backup/asli/nama_database-`tanggal '+%y%m%d_%H%M%S'`.sql

    nah user dan pass word database di isi apa,
    sedangkan database name nya dibuat –all-databases

    thanks

    • Kalau ga mau ambil pusing pakai root saja mas.

      Tapi kalau mau pakai user biasa, silahkan dibuat dan pastikan sudah diberikan privilege: SHOW DATABASES, SELECT, LOCK TABLES, RELOAD, dan SHOW VIEW.

Tinggalkan komentar