Cara Backup Website dan Database di Debian 9 Server
Melakukan backup website dan database yang sudah berjalan di server sangat penting, karena hasil backup dapat dipergunakan jika terjadi insiden keamanan yang tidak diinginkan. Contoh insiden yang bisa saja terjadi, website menjadi korban hacking, website terkena malware, atau bahkan kesalahan dari pemilik website sendiri (tidak sengaja menghapus file atau database).
0. Persiapan Backup
Sebelum melakukan backup, pastinya harus tahu dulu apa dan di mana data yang mau dibackup dan ke mana hasil backup mau disimpan.
Tutorial sebelumnya pada pembahasan install WordPress, file website WordPress yang berada di /var/www/wordpress.oke dan database MariaDB dengan nama database wordpress yang ingin dibackup.
Untuk tempat penyimpanan backup, telah disediakan partisi backup pada saat install Debian 9 server. Partisi backup ini termount di /backup.
1. Backup Website
Backup website dapat dilakukan dengan berbagai cara, tergantung dengan kebutuhannya seperti apa.
Cara 1. Kompresi File
Kompresi file cocok jika ingin mendownload file backup ke komputer. Format kompresi yang digunakan di sini adalah format .tar.gz.
Format perintah membuat kompresi .tar.gz.
1 | tar czvf output.tar.gz sumber-direktori |
Jadi perintah untuk backup file website WordPress.
1 2 | cd /var/www/ tar czvf /backup/wordpress.oke.tar.gz wordpress.oke |
- Pindah ke direktori /var/www terlebih dahulu agar hasil kompresi tidak memasukkan struktur direktori /var/www/wordpress.oke tetapi hanya menjadi wordpress.oke saja.
- File hasil kompresi wordpress.oke.tar.gz tersimpan di direktori /backup.
Cara 2. Sinkronisasi File/Direktori
Cara lain yang bisa digunakan yaitu dengan melakukan sinkronisasi file/direktori dari direktori sumber backup ke direktori backup. Perintah yang digunakan untuk melakukan hal ini adalah rsync.
Dengan sinkronisasi rysnc, ketika menjalankan sinkronisasi pertama kali semua file dicopy ke direktori backup, tetapi ketika menjalankan sinkronisasi selanjutnya yang dicopy hanya file baru dan yang berubah saja. Sehingga tidak semua file copy secara berulang, seperti perintah copy biasa cp.
Format perintah sinkronsasi dengan rsync.
1 | rsync -av /sumber/direktori /tujuan/direktori --delete |
Jadi perintah untuk sinkronisasi file website WordPress.
1 | rsync -av /var/www/wordpress.oke /backup --delete |
- Sinkronisasi direktori wordpress.oke ke direktori backup. Kalau penulisan direktori memakai slash penutup (wordpress.oke/) maka yang tercopy adalah isi dari direktori itu, kalau tidak memakai penutup yang dicopy direktori itu beserta isinya.
- Opsi –delete untuk menghapus file yang berada di direktori backup jika file di direktori sumber wordpress.oke telah terhapus. Karena jika tidak memakai opsi –delete, file yang sudah terhapus di direktori wordpress.oke masih tetap ada di direktori backup.
Cara 3. Sinkronisasi File/Direktori Secara Real-Time
Sinkronisasi file dengan rsync hanya bisa terjadi jika telah menjalankan perintah rsync. Bagaimana jika ingin sinkronisasi terjadi secara otomatis ketika terjadi perubahan file? Dengan kata lain sinkronisasi file secara real-time.
Solusinya bisa dengan menggunakan sinkronisasi lsyncd. Sinkronisasi lsyncd berjalan sebagai service (daemon) yang selalu memantau perubahan data sumber backup. lsyncd melakukan sinkronisasi file secara penuh, baik itu file baru, file yang berubah, dan file yang terhapus.
Install lsyncd.
1 | apt install lsyncd |
Buat direktori untuk menyimpan isi dari direktori wordpress.oke
1 | mkdir /backup/wordpress.oke |
Buat direktori dan file log lsyncd.
1 2 | mkdir /var/log/lsyncd touch /var/log/lsyncd/lsyncd.{log,status} |
Buat direktori dan file konfigurasi lsyncd.
1 2 | mkdir /etc/lsyncd nano /etc/lsyncd/lsyncd.conf.lua |
Isi dari file konfigurasi lsyncd.conf.lua.
1 2 3 4 5 6 7 8 9 10 | settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } sync { default.rsync, source = "/var/www/wordpress.oke", target = "/backup/wordpress.oke", } |
Restart service lsyncd.
1 | systemctl restart lsyncd |
3. Backup Database
Selanjutnya adalah melakukan backup database. Tanpa database, file wordpress yang sudah terbackup menjadi percuma. Karena konten atau postingan dan data lainnya berada di dalam database. Perintah yang digunakan untuk melakukan backup database MariaDB adalah mysqldump.
Buat file konfigurasi mysqldump yang menyimpan username dan password database.
1 | nano /etc/.mysqldump-wordpress.cnf |
Isi file konfigurasi mysqldump.
1 2 3 | [mysqldump] user=user_wordpress password=pass_wordpress |
Ubah hak akses agar hanya root yang bisa membaca.
1 | chmod 600 /etc/.mysqldump-wordpress.cnf |
Selanjutnya menjalankan perintah backup.
1 | mysqldump --defaults-extra-file=/etc/.mysqldump-wordpress.cnf wordpress > /backup/wordpress.sql |
4. Backup Website dan Database Secara Otomatis
Backup harus dilakukan secara rutin, namun sebagai manusia kita ini mudah lupa, kadang juga terkendala oleh situasi dan waktu, sehingga backup harusnya bisa terjadi secara otomatis tanpa campur tangan kita lagi. Hal ini dapat dilakukan dengan mengkombinasikan bash script dan cron job/crontab.
Bash script berfungsi sebagai program kecil yang berisi perintah backup. Sementara untuk crontab berfungsi sebagai penjadwalan otomatis, menentukan waktu kapan bash script dijalankan.
Membuat Bash Script Backup
Perintah backup website yang digunakan dalam bash script adalah rsync karena masih harus dijalankan secara manual. Untuk backup database tetap menggunakan mysqldump.
Membuat file bash script dengan nano. Penjelasan tentang bash script baca di artikel Shell Script di Linux.
1 | nano /opt/backup.sh |
Isi dari file bash script backup.sh.
1 2 3 4 5 6 7 | #!/bin/bash # Backup direktori wordpress.oke rsync -av /var/www/wordpress.oke /backup --delete # Backup database wordpress mysqldump --defaults-extra-file=/etc/.mysqldump-wordpress.cnf wordpress > /backup/wordpress.sql |
Uji coba menjalankan script backup.
1 | bash /opt/backup.sh |
Jika sudah cocok, selanjutnya konfigurasi crontab.
1 | crontab -e |
Misalnya mau backup setiap hari pada jam 24.00. Penjelasan penulisan format waktu baca di artikel Crontab, Penjadwalan Secara Otomatis di Linux.
1 | 0 0 * * * /bin/bash /opt/backup.sh |
Selamat mencoba 🙂
Apabila server kita berisi download mp3, apakah bisa diexclude audio yang ada dalam folder tertentu? Sehingga cukup backup file dan folder konfigurasi saja. Terimakasih
bisa exclude file
klau untuk restore data gmna pak?
restore database
mysql -u root -p namadb < dump.sql