Salah satu problem pada Zimbra Open Source Edition adalah tidak adanya fitur backup. Fitur backup hanya dimiliki pada Zimbra Network Edition.
Beberapa hari yang lalu, saya sempat diskusi dengan salah satu kawan tentang live backup untuk Zimbra Open Source Edition. Dan dia memberikan beberapa URL sebagai referensi untuk saya baca. Yang pertama referensinya adalah tentang ZCS to ZCS Migrations. Dan referensi yang kedua adalah sebuah script perl untuk melakukan backup semua account di zimbra.
Berbekal dua referensi itu saya membuat bash script untuk melakukan backup account user di zimbra. Script ini akan melakukan backup account untuk semua user. Selain itu proses backup juga hanya dilakukan di mesin yang terinstalasi zimbra. Oh, hampir lupa, untuk restore data bisa dilakukan dengan membuat sebuah account kosong dan kemudian berkas tgz ini di import melalui menu Preferences > Export/Import di zimbra.
Keuntungan menggunakan backup dengan metode seperti ini adalah tidak memerlukan proses stop/start pada zimbra. Dengan kata lain zimbra masih berjalan dengan normal dan semua layanan masih bisa diakses dengan normal dan sementara itu proses backup tetap berjalan. Inilah yang saya maksud dengan “Live” backup :).
Script ini rencananya nanti akan saya tambahkan fitur rsync melalui ssh, penambahan fitur rsync dan ssh di inspirasi dari wiki zimbra mengenai backup.
Ide besarnya adalah sebagai berikut:
- Backup masing-masing account di zimbra dalam format tgz. Misal di backup di /tmp/zimbra (anggap saja ini dilakukan di server A)
- Ekstrak masing-masing tgz di dalam folder /tmp/zimbra tersebut ke sebuah direktori tertentu misal ke /tmp/ekstrak
- Lakukan sinkronisasi /tmp/ekstrak ke server lainnya (misalnya di server B di direktori /tmp/newbackup) dengan menggunakan rsync.
- Selanjutnya bash script ini akan melakukan proses kompresi masing-masing account dalam format tgz di server B, atau bisa saja ada script tersendiri di server B yang akan melakukan tahapan ini.
- Kompress semua account format tgz yang ada di /tmp/newbackup (Server B) ke dalam satu kompresi besar misalkan dalam format tar.bz2 dengan label tanggal, bulan dan tahun.
- Move/copy berkas tar.bz2 tersebut ke tape drive atau ke hard disk eksternal.
- Hapus semua berkas-berkas yang sudah tidak dibutuhkan, namun jangan hapus direktori /tmp/newbackup yang ada di server B, karena nanti direktori ini akan disinkronisasi lagi dengan direktori /tmp/ekstrak yang ada di server A.
- Aktifkan crontab untuk script ini agar melakukan proses secara berkala.
Sebenarnya proses nomor 2, 3, 4 dan 5 bisa di-bypass, jadi dari nomor 1 bisa langsung loncat ke proses nomor 5. Jika langsung di-bypass maka proses kompresi di nomor 5 akan langsung dilakukan di server A. Setelah itu tinggal ditransfer ke server lain (bisa melalui scp, rsync ataupun metode lainnya). Salah satu kelemahan jika di-bypass maka pada saat proses transfer data akan berjalan lama jika file yang di backup berukuran besar.
Buat yang mau memodifikasi script ini silakan saja, tapi jangan lupa dishare lagi ya.
Thanks boss, sudah saya share ke milis openSUSE Indonesia dan Zimbra Indonesia 🙂
#1: vavai. yup. bantuin di modifikasi dong scriptnya, biar bisa lebih lengkap :). saya lagi ngurusin sesuatu nih, jadi belum sempet ngoprek scriptnya lagi. btw, saya barusan request join ke milis id-zimbra. di approve ya.
opo toh ikie kang?
*rak mudeng, dulinan twitter n fb maneh*
mbuh pe. pas nulis ndasku pas ngelu. saiki yo lali
Salam kenal…Thanks buat sharingnya…nice artikel.
Bookmarked. Nanti kalo mau ngoprek tinggal buka. 😀
sama, nggak mudeng, kebanyakan fesbukan, tapi cool themenya, keren taglinenya: Imagination is more important than knowledge, keliatannya harus sering sering mampir sini nih 🙂
Barusan saya coba, kalau pakai multi domain, ganti baris ini :
NAME=`echo $ACCOUNT | awk -F@ ‘{print $1}’`;
jadi seperti ini :
NAME=`echo $ACCOUNT`;
Karena kalau tidak, nama account yang sama dibeda domain akan tertimpa.
#8: ah, thanks vai atas koreksinya. kemarin memang dicoba hanya untuk single domain.
Thanks Berat Boss… sangat berguna bagi instansi kami yang memakai Zimbra CS OpenSource…
#10: can masagi, si vavai udah memodifikasi script ini untuk proses migrasi hingga restore. coba kunjungi blognya dia.
Boss.. Oom Vavai mah pake OpenSuse he he 😛
Sayah pakai CentOS jadi rada susah penyesuaiannya… latas pas implementasi ada error sbb:
“ERROR: service.FAILURE (system failure: GET failed, status=501 not implemented yet)”
Kenapa ya?
zimbra community ga mendukung push mail ??? parah nih
#12: can masagi, kalau liat pesan errornya fitur itu belum di implementasikan. emangnya pake zimbra versi berapa?
keren…..
Mas Kl Error nya begini knp ya?
ERROR: service.INVALID_REQUEST (invalid request: can only be used with “zmprov -l/–ldap”)
mv: cannot stat `*.tgz’: No such file or directory
aku pake zimbra versi 6
thanks ya
Mas Sudah bisa ternyata ditambah -l
tapi kenapa selalu minta password user zimbra ya setiap backup per user?
#17: waktu scriptnya di running harus sbg user zimbra, jangan sebagai root.
om,, kalau restorenya gemana?
mas kalo error kaya ini kenapa?
mv: cannot stat `*.tgz’: No such file or directory
#20: akbar, itu berarti belum ada file *.tgz yang dihasilkan dari proses backup.
kalau pakai server ubuntu gimana scripnya pak., mohon bantuannya..,
hadeh kaga mudeng neh gan, btw slm kenal yah
Saya nemui error spt ini :
“ERROR: zclient.IO_ERROR (Unable to get ?fmt=tgz)(cause: java.net.SocketTimeoutException Read timed out)”
saya coba untuk modif code ini:
su – zimbra -c “zmmailbox -z -m $ACCOUNT getRestURL ‘//?fmt=tgz’ > $DIR/$NAME.tgz”
menjadi
su – zimbra -c “zmmailbox -z -m $ACCOUNT getRestURL ‘//?fmt=zip’ > $DIR/$NAME.zip”
Hasilnya : tetap error spt diatas.
Zimbra yang saya pake, versi 6.1
penyebab apa yach ? … sepertinya karena ada account yang memiliki ukuran mailbox sangat besar.
lalu gimana cara mengatasinya ?
thanks
Artikel yang menarik. Thanks Gan!
mantap aplikasinya
aku ra mudeng tapi senang dengan orang yang suka berbagi
makasih info nya di tunggu postingan selanjutnya
Halo,
ketika saya menjalankan scriptnya, muncul error seperti berikut di semua account yg dibackup,
mungkin karena port admin 7071 sudah saya ganti
ERROR: zclient.IO_ERROR (invoke Connection refused, server: localhost) (cause: java.net.ConnectException Connection refused)
terima kasih
#30: ruben gimana kabar? masih ingat saya? saya dudi yang dulu di Asia Source 3.
Untuk soal backup zimbra, mending ikutan mailing zimbra aja lah :))