Coding4ever’s Blog

Just coding… coding… and coding… because coding should be fun :)

Online Backup Database

| Comments

Backup database lokal saja ternyata tidak cukup, paling tidak itu yang saya rasakan ketika salah satu klien saya hardisk servernya tewas :-D. Padahal dulu itu saya sudah menyarankan untuk menggunakan UPS, tapi katanya “kalo pake UPS, fitur powerON di biosnya jadi gak jalan…” dan saya maklum karena servernya memang ON 24 jam dan memang tidak ada petugas khusus yang mengONkan servernya kalo pas lagi OFF. Jadi kita memang dituntut untuk memberikan solusi untuk masalah ini, terutama solusi yang murah meriah he he :-D

Salah satu solusinya adalah dengan memanfaatkan media penyimpanan online yang memang sudah terbukti handal dan gratis yaitu Google Drive. Dengan Google Drive limit ukuran file yang bisa diupload adalah maksimal 5GB.

Kita langsung saja berikut adalah langkah-langkah untuk mengakses layanan/API dari Google Drive atau layanan Google lainnya.

1. Membuat Client id

Untuk membuat client id, kita bisa langsung mengakses link Google Developer Console kemudian login menggunakan email google Anda

2. Membuat project

Klik menu Select a project -> Create a project…

Kemudian isikan nama project, misal OnlineBackup

3. Mengaktifkan Google API

Dari menu dashboard klik link Use Google APIs

Secara default google sudah mengaktifkan beberapa API yang bisa kita akses dari aplikasi

Dari daftar api di atas kita belum menemukan API untuk mengakses google drive, sehingga API ini harus kita aktifkan secara manual dengan mengklik link Google APIs kemudian di kotak pencarian ketik Drive API

Selanjutnya klik link Drive API kemudian pilih Enable API

4. Membuat Credential

Sebelum layanan/API Google Drive ini bisa kita akses, kita harus membuat Credential terlebih dulu sebagai otorisasi bahwa kita adalah memang orang yang berhak untuk mengakses layanan ini.

Untuk membuat Credential klik menu Credentials kemudian pilih OAuth client ID

Kemudian klik menu Configure consent screen

Isikan datanya sesuai kebutuhan

Selanjutnya kita akan menentukan jenis aplikasi yang akan mengakses API ini. Untuk contoh disini saya menggunakan aplikasi console.

Jika berhasil kita akan mendapatkan informasi client ID dan client secret. Informasi ini akan kita gunakan untuk mengakses layanan/API google drive ataupun layanan lainnya.

5. Menyiapkan folder backup

Langkah berikutnya adalah masuk ke Google Drive kemudian kita buat folder untuk backup database. Setelah membuat folder ini, kita perlu mengetahui informasi folder id dari folder backup ini. Untuk mendapatkan folder id bisa kita lihat dibagian address bar.

Pada gambar di atas folder id dari folder Backup Database ini adalah : 0B5aEAoHOGHqkelgzM2cxVncxNGM.

Simpan informasi ini karena akan digunakan untuk mengakses folder Backup Database ini via aplikasi.

6. Membuat aplikasi client

Untuk contoh di sini kita akan menggunakan aplikasi console untuk mendemokan proses upload file ke Google Drive. Artinya aplikasi ini akan dijalankan via batch command atau command prompt.

Aplikasi ini juga membutuhkan dua library pihak ketiga yaitu Google.Apis.Drive.v2 dan DotNetZip yang bisa diinstall via NuGet.

File backup database yang akan kita upload adalah file backup yang sudah kita buatkan versi kompresnya, disini kita menggunakan library DotNetZip. Contoh kodenya seperti berikut :

1
2
3
4
5
6
7
8
9
10
11
12
13
private static void CreateZip(string pathFileBackup, string fileBackup, string extension)
{
    var fileToZip = string.Format(@"{0}\{1}.zip", pathFileBackup, fileBackup);
    fileBackup = string.Format(@"{0}\{1}.{2}", pathFileBackup, fileBackup, extension);

    using (var zip = new ZipFile())
    {
        Console.WriteLine("\nAdding {0}...", fileBackup);
        ZipEntry e = zip.AddFile(fileBackup, "");

        zip.Save(fileToZip);
    }
}

Setelah berhasil membuat file zipnya, tinggal upload ke google drive. Berikut contoh kodenya :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
private static void UploadToGoogleDrive(string pathFileBackup, string fileBackup)
{
    // TODO : disesuaikan dengan nilai clientId dan clientSecret Anda
    //        setting ini juga bisa disimpan di file App.config
    var clientId = "505165741497-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com";
    var clientSecret = "6Nxxxxxx-xxxxxxxxxxxxxxx";

    var service = GoogleDriveHelper.AuthenticateOauth(clientId, clientSecret, Environment.UserName);

    if (service == null)
    {
        Console.WriteLine("Authentication error");
        Console.ReadLine();
    }

    try
    {
        Console.WriteLine("Sedang proses upload ...");

        // TODO : disesuaikan dengan nilai folder id Anda
        //        setting ini juga bisa disimpan di file App.config
        var folderId = "0B5xxxxxxxxxxxxxxxxxxxxxxxxx";

        // upload file
        var fileToUpload = string.Format("{0}\\{1}.zip", pathFileBackup, fileBackup);
        File newFile = GoogleDriveHelper.UploadFile(service, fileToUpload, folderId);

    }
    catch
    {
        Console.WriteLine("\nUpload file gagal !");
    }
    finally
    {
        // hapus file yang berhasil diupload
        var fileToDelete = string.Format("{0}\\{1}.zip", pathFileBackup, fileBackup);
        System.IO.File.Delete(fileToDelete);
    }
}

Method UploadToGoogleDrive di atas membutuhkan class GoogleDriveHelper yang bisa Anda cek di sini.

Method CreateZip dan UploadToGoogleDrive di atas mempunyai parameter seperti berikut :

1
2
void CreateZip(string pathFileBackup, string fileBackup, string extension)
void UploadToGoogleDrive(string pathFileBackup, string fileBackup)

Nilai masing-masing parameter di atas kita isi pada saat memanggil aplikasi via batch command atau command prompt. Contoh :

Dan untuk mendapatkan nilainya, kita bisa mengakses parameter args dari method Main.

7. Menjalankan aplikasi client via batch command

Untuk menjalankan aplikasi di atas kita bisa menggunakan batch command. Untuk contoh kodenya menggunakan database MySQL :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set year=%%c
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set month=%%a
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set day=%%b
 
for /f "tokens=1 delims=: " %%h in ('time /T') do set hour=%%h
for /f "tokens=2 delims=: " %%m in ('time /T') do set minutes=%%m
for /f "tokens=3 delims=: " %%a in ('time /T') do set ampm=%%a

rem membuat file backup database dengan format nama_database-tahun-bulan-hari_jam_menit 
set FILE_BACKUP=pulsa-%year%-%month%-%day%_%hour%-%minutes%-%ampm%
set LOKASI_BACKUP=D:\BackupDatabase\backups
set FILE_EXTENSION=sql

rem set user dan password mysql
set USER_MYSQL=root
set PASS_MYSQL=rahasia

rem USER_NAME, USER_PASSWORD dan NAMA_DATABASE menyesuaikan
mysqldump -u%USER_MYSQL% -p%PASS_MYSQL% pulsa > %LOKASI_BACKUP%\%FILE_BACKUP%.%FILE_EXTENSION%

D:\BackupDatabase\DemoOnlineBackup.exe %LOKASI_BACKUP% %FILE_BACKUP% %FILE_EXTENSION%

Kemudian kode di atas kita simpan dengan nama backup.cmd di folder Instalasi MySQL\bin.

Agar proses backup ini bisa otomatis dan terjadwal kita bisa memanfaatkan Windows Task Scheduler.

Terakhir hasil tes kode di atas berhasil mengupload file ke Google Drive dengan lancar :-)

Selamat MENCOBA :-)

Referensi :

database, mysql

Tentang Penulis

Software developer yang fokus mengembangkan aplikasi di atas platform .NET (Desktop, ASP.NET MVC, Web Service, Microservice) dan Android. Senang mempelajari teknologi baru terutama di bidang OOP, Design Pattern, ORM, Database, Continuous Integration & Deployment dan arsitektur Microservice.
Selain mengajar, saat ini penulis juga bekerja sebagai staf IT di salah satu PTS di Yogyakarta sebagai senior software developer. Di waktu luang insya Alloh akan terus berbagi pengalaman di blog ini :)

« Performance Test Menggunakan JMeter Paket NuGet yang wajib dicoba bagian #2 - AutoUpdater.NET »

Comments