Backup File & Database dari Server Linux ke Amazon S3 Dengan Menggunakan S3cmd

Amazon S3 adalah solusi layanan penyimpanan data yang murah namun memiliki fitur yang top markotop! (Kalau Pak Bondan bilang, “Mak Nyusss”!) Apa saja kelebihan Amazon S3? Berikut beberapa fiturnya:

  1. High Scalable, berapapun besarnya dan kapanpun anda membutuhkan ruang simpan, anda dapat dengan mudah mendapatkannya. Butuh hanya 100 MB? Monggo. Butuh 10 TerraByte? Monggo mawon…:) Dengan instan anda dapat mengupload data anda berapapun besarnya.
  2. Data Durability & Reliability, infrastruktur Amazon S3 didesain untuk melayani data yang bersifat mission-critical, yang harus tersedia selalu, 100% uptime, dan data tidak boleh sampai hilang. Untuk itu Amazon S3 menyebar file-file yang disimpan ke beberapa server di multi datacenter. Sehingga apabila ada data yang rusak/hilang di satu server, Amazon masih memiliki salinanya di server lain.
  3. Security, Amazon S3 mendukung beberapa mekanisme yang memberikan fleksibelitas kepada pelanggannya perihal siapa yang bisa mengakses data, juga bagaimana dan dimana mengaksesnya. Amazon S3 juga mendukung transfer data melalui enkripsi SSL menggunakan protokol HTTPS.
  4. Fast, Amazon memiliki 8 datacenter yang tersebar di Amerika, Irlandia, Singapura, Tokyo, dan Brasil. Kita bisa memilih datacenter mana saja yang terdekat dengan lokasi server kita, sehingga proses upload/download data dari server kita ke server Amazon dan sebaliknya, menjadi lebih cepat.
  5. Murah, harga sewa ruang simpan di Amazon S3 hanya $0.125 untuk per gigabytenya! iya, hanya sekitar Rp. 1.200 per 1 GB.

Dengan segala fitur diatas tentulah Amazon S3 adalah solusi terbaik untuk membackup file dan database situs kita. Dan tool untuk melakukan proses backup ini adalah S3cmd.

S3cmd dari S3tools project adalah sebuah tool yang menggunakan baris perintah (command line) untuk mengupload , mengambil dan mengelola data di Amazon S3. Proses backup tidak perlu dilakukan secara manual, tapi bisa dilakukan otomatis dengan menggunakan cron, yang bisa kita atur untuk mengeksekusi proses backup setiap hari, ataukah per jam, ataukah per minggu, dan seterusnya.

Backup File

Kita akan menginstall S3cmd lebih dulu. Di distro Debian, s3cmd bisa diinsatal langsung dari repository, namun developer S3cmd tidak menganjurkannya, karena S3cmd versi repo Debian sudah tidak pernah di update. Untuk menginstal versi yang up-to-date, kita harus mengambilnya dari repo developer S3cmd, berikut langkahnya:

  1. Impor dulu signing key dengan perintah:
    wget -O- -q https://s3tools.org/repo/deb-all/stable/s3tools.key | sudo apt-key add -
  2. Tambahkan repo developer S3cmd ke source.list dengan perintah:
    sudo wget -O/etc/apt/sources.list.d/s3tools.list https://s3tools.org/repo/deb-all/stable/s3tools.list
  3. Install S3cmd dengan perintah:
    sudo apt-get update && sudo apt-get install s3cmd
  4. Setelah S3cmd terinstal, jalankan konfigurasi S3cmd dengan perintah:
    s3cmd --configure
  5. Kemudian anda akan diminta memasukkan Access Key dan Secret Key dari akun Amazon Web Service. Anda dapat menemukan kedua key tersebut di halaman Security Credentials.
  6. Kemudian S3cmd akan menanyakan “Encryption password“. Password enkripsi berguna untuk memproteksi file pada proses transfer ke Amazon S3 agar tidak bisa dibaca oleh orang lain. Masukkan password enkripsi yang anda inginkan.
  7. Kemudian anda akan ditanyai path ke program GPG, tekan enter saja.
  8. Dan kemudian muncul pertanyaan apakah anda ingin menggunakan protokol HTTPS ketika melakukan proses transfer? Dengan protokol HTTPS, proses transfer jauh akan lebih aman, tetapi juga akan lebih lambat ketimbang menggunakan HTTP. Dan jika koneksi server anda menggunakan proxy, maka anda tidak bisa memilih menggunakan protokol HTTPS.
    Ketik “yes” dan enter jika menggunakan protokol HTTPS, tekan enter saja jika tidak menggunakan.
  9. Kemudian muncul pertanyaan “HTTP Proxy server name“. Jika koneksi server anda menggunakan proxy, masukkan alamat IP/hostname dari proxy tersebut. Jika tidak melalui proxy, tekan enter saja.
  10. Setelah semua pertanyaan sudah anda jawab, S3cmd akan menawarkan test akses menggunakan data yang anda masukkan tadi. Tekan enter jika anda ingin menjalankan test, atau ketik “n” dan enter jika tidak ingin menjalankan test.
  11. Pertanyaan terakhir, “Save settings? [y/N]“. Apakah anda ingin menyimpan konfigurasi yang baru saja anda masukkan? Ketik “y” dan enter jika ingin menyimpan, atau enter saja jika tidak ingin menyimpan.
  12. Setelah konfigurasi S3cmd sudah anda masukkan, kita akan mengeksekusi perintah untuk mentransfer file dari server kita ke Amazon S3. Ada tiga cara menggunakan S3cmd untuk mentransfer file, yakni dengan perintah s3cmd put, s3cmd pull dan s3cmd sync.
    Saya pribadi lebih senang menggunakan perintah s3cmd sync karena cara kerjanya mirip dengan rsync, dimana nantinya hanya file yang kita ubah/tambah/edit yang akan ditransfer ke Amazon S3, sedangkan file yang tidak kita ubah/tambah/edit tidak akan di transfer. Istilah dalam dunia komputer adalah incremental backup.Perintah yang kita gunakan adalah:
    s3cmd sync -r --delete-removed /path/ke/file/ s3://nama-bucket/

    opsi --delete-removed memerintahkan s3cmd untuk menghapus file di Amazon S3 jika file tersebut tidak ada di server kita. Untuk /path/ke/file/ silahkan ganti dengan path lokasi file yang ingin anda backup. Dan untuk nama-bucket adalah nama bucket yang harus anda buat melalui akun Amazon Web Service anda.

  13. Jika eksekusi dapat berjalan dengan baik, selanjutnya kita akan mengeksekusi perintah tersebut agar berjalan otomatis setiap harinya membackup file di server kita ke Amazon S3. Edit crontab dengan perintah:
    sudo crontab -e

    Kemudian masukkan baris ini:

    00 01-06 * * * s3cmd sync -r --delete-removed /path/ke/file/ s3://nama-bucket/

    Perintah diatas adalah menyuruh cron untuk menjalankan perintah backup setiap hari pada jam antara 01:00 – 06:00 pagi hari.

  14. Tekan tombol Crtl-X dan kemudian Y untuk mentimpan konfigurasi diatas.

 

          Selesai sudah konfigurasi backup file dari server kita ke Amazon S3 menggunakan S3cmd. Selanjutnya kita akan membackup database ke Amazon S3.

Backup Database

  1. Buat script dengan nama mysqltos3.sh di sebuah direktori, sebagai contoh di direktori /home/. Ketik perintah ini:
    sudo nano /home/mysqltos3.sh
  2. Dan masukkan script berikut:
    Ubah baris 7 sampai 10 sesuai dengan informasi database anda. Ganti root dengan username database, password dengan password database, bucketname dengan nama bucket (anda harus buat lagi bucket khusus untuk menyimpan database), dan filename (terserah anda nama file yang diinginkan).
  3. Kemudian chmod script dengan perintah:
    chmod 755 /home/mysqltos3.sh
  4. Kemudian kita akan mengeksekusi perintah backup database agar berjalan secara otomatis di setiap hari, per minggu dan per bulan. Ketik perintah crontab -e dan masukkan baris berikut:
    # Backup setiap hari
    0 3 2-31 * 1-6 sh /home/mysqltos3.sh day
    # backup per minggu
    0 3 2-31 * 0 sh /home/mysqltos3.sh week
    # Backup per bulan
    0 3 1 * * sh /home/mysqltos3.sh month