Backup Blog

Selain menggabung sekian blog jadi satu, kemarin saya juga memindahkan tempat si blog berada. Sebelumnya, 3 dari 4 blog yang saya gabung ada di Dreamhost namun blog ini ada di sebuah VPS mungil murah meriah 😀 Satu hal yang jujur saja saya khawatirkan adalah masalah realibilitas dari si VPS sehingga kali ini saya memikirkan mengenai backup. Sebelumnya saya cukup percaya sama om Google dan Dreamhost tuk menjaga data saya.

Setelah memikirkan beberapa strategi backup, akhirnya saya memilih tuk membackup data saya ke layanan lain yang mudah2an bisa saya percayai: BitBucket! 😀

Ada dua hal dari blog ini yang saya rasa perlu saya backup: database yang dipakai dan juga instalasi WordPress (termasuk berkas-berkas yang saya upload via WordPress). Strategi backup saya adalah dengan memasukkan semuanya ke dalam repositori Git dan mengirimnya ke BitBucket. Untung saja BitBucket menyediakan repositori privat yang gratis dan dapat memiliki kapasitas tak terbatas. Klop!

Strategi sudah dipilih, sekarang saatnya membuat langkah konkrit. Untuk database, saya dapat menjalankan mysqldump agar isi database disimpan ke berkas. Saya juga menggunakan opsi --skip-extended-insert agar satu buah record ditulis menjadi satu baris. Andai opsi ini tidak dimasukkan, maka satu baris dalam berkas SQL yang dihasilkan dapat mengandung banyak data sekaligus. Dengan membuat satu entry satu baris, ukuran berkas SQL yang dihasilkan memang bertambah besar namun Git akan dapat melacak perubahan dengan lebih efisien. Untuk berkas instalasi, tidak ada perlakuan khusus agar Git dapat memasukkan semuanya dengan baik.

Setelah coba-coba, inilah kira2 skrip yang saya pakai. Saya jalankan skrip berikut di direktori induk dari direktori instalasi WordPress, secara berkala melalui crontab.

#!/bin/sh

set -x

cd `dirname $0`

mysqldump -h HOST -u USER --password=PASSWORD \
          --skip-extended-insert DATABASE > data.sql

git add data.sql
git commit -m "Database backup"

git add www
git commit -m "WordPress backup"

git push origin master

Tentunya sebelum ini saya sudah persiapkan direktori kerja lokal Git dan juga repositori Git di BitBucket. Kunci SSH tanpa password juga saya gunakan agar operasi push dapat bekerja di belakang layar.

Download secara terdistribusi

Apa tu? intinya kalau kita punya benwit gede, punya kompi banyak dan masing-masing punya ip publik, lalu ingin donlod dari tempat yg menerapkan membatasan per IP, mengapa kita tidak mendistribusikan proses donlod itu? =D

Kodingan bisa dilihat di proyek iseng di github saya. Ada 2 file di situ yg dipake.

File pertama, donlod dipake tuk mengambil URL yg ditujukan tuk sebuah mesin dan mendownloadnya. Kalau udah selesai, hasil donlodan dikirim ke sebuah mesin tertentu.

File kedua, donlod-start dipake tuk mendistribusikan URL (alias menjalakan file pertama) ke mesin-mesin pekerja yang ada.

Daftar URL disimpen di $HOME/list yang isinya punya format kaya begini.

nama-mesin-satu http://url.satu/file.nya
nama-mesin-dua http://url.dua/file.nya
...

yaya.. itu saja =D

Mengelompokkan file berdasar tanggal

Mau mengelompokkan file berdasar tanggal? silakan coba pake skrip iseng-iseng ini =D coba aja langsung diintip di github.

Donlod dulu.. dan set supaya bisa dieksekusi.

$ wget -o group.py http://github.com/fajran/iseng/tree/master%2Fgroup-file-by-date%2Fgroup.py?raw=true
$ chmod +x group.py

Lalu jalankan skrip tsb tuk membuat skrip lain yang baru akan melakukan pengelompokkan dengan cara membuat direktori tanggal dan memindahkan file ke dalamnya.

$ ./group.py -s campuraduk/ -d rapijali/ > beberes.sh

Akan terbentuk file beberes.sh yang kalau dieksekusi maka file-file yang ada di direktori campuraduk akan dipindahkan ke dalam direktori rapijali.

Sebelum mengeksekusi beberes.sh silakan cek dulu isinya, sapa tau gak sesuai dengan hati nurani. Kalau udah puwas, ya langsung aja dijalanin.

$ chmod +x beberes.sh
$ ./beberes.sh

Semoga bermanfaat..