Skip to main content

Search

Backup Mysql Database Menggunakan Google Drive, Apps Script dan Triggers

Saat kita mengelola database tentu hal yang tidak boleh dilupakan dan wajib kita lakukan adalah Backup data. Ya aktivitas ini tentu harus dijalankan agar ketersedian data dilingkungan kerja kita selalu terjaga, tapi tentu untuk melakukannya butuh tenaga dan biaya.

Jika tenaga dan biaya terbatas dan data kita yang kita kelola tidak terlalu besar agar lebih efisien dalam melakukan backup data kita bisa Backup Mysql Database Menggunakan Google Drive, Apps Script dan Triggers agar otomatis backup data dalam google drive.

Google drive sebagai drive untuk menampung data kita, Apps Script sebagai alat untuk melakukan pemrosesan backup data yang dimasukkan kedalam google drive kemudian Triggers kita gunakan sebagai otomatisasi tugas pemrosesan tersebut secara berkala.

Sebelum anda mencoba perlu diingat bahwa yang telah saya lakukan ini untuk database dengan ukuran kecil dna belum mencoba untuk ukuran besar. selain itu dari segi kualitas dan keamanan perlu di explore kembali. jika anda ingin mencobanya lakukan pada database yang khusus untuk mencoba dan kami tidak bertanggung jawab atas hasil yang anda lalukan dengan menggunakan tutorial ini.

Berikut adalah langkah kita melakukannya. 

1. Buka Google Drive kemudian buat Folder baru misalnya "Bakcup_Database" 

2. Buka Google  Apps Script dan buat https://script.google.com/ kemudian buat new project



3.  Setelah muncul project baru secara default akan muncul file script baru dengan nama Code.gs. isikan code tersebut dengan code di bawah ini. Ganti hostname, port, username, databasename sesuai dengan yang anda miliki

Code.gs


function backupDatabase() {
const dbUrl = 'jdbc:mysql://hostname:port/databsename';
const dbUser = 'username';
const dbPassword = 'password';
const databaseName = 'databsename'; // Nama database
const backupFolderName = "Bakcup_Database";
// Hubungkan ke database MySQL
const conn = Jdbc.getConnection(dbUrl, dbUser, dbPassword);

// Buat objek Google Drive
const drive = DriveApp;

// Buat folder backup jika tidak ada
let backupFolder;
const folders = drive.getFoldersByName(backupFolderName);
if (folders.hasNext()) {
backupFolder = folders.next();
} else {
backupFolder = drive.createFolder(backupFolderName);
}

// Dapatkan timestamp saat ini untuk format nama file
const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "ddMMYYYY_HHmmss");

// Nama file backup dengan format nama_database_tanggal_jam_detik.sql
const backupFileName = `${databaseName}_${timestamp}.sql`;

// Dapatkan semua nama tabel di database
const tableNames = getTableNames(conn);

// Buat string untuk menyimpan seluruh isi database dengan struktur tabel
let fullBackupContent = "";

// Backup setiap tabel dengan struktur dan data ke string SQL
for (const tableName of tableNames) {
// Dapatkan definisi kolom (struktur tabel)
const columnDefs = getTableStructure(conn, tableName);
fullBackupContent += `-- Table structure for table ${tableName}\n`;
fullBackupContent += `${columnDefs};\n\n`;

// Ambil data dari tabel
const tableBackupStmt = conn.createStatement();
const tableResultSet = tableBackupStmt.executeQuery(`SELECT * FROM ${tableName}`);
while (tableResultSet.next()) {
const rowData = [];
for (let i = 1; i <= tableResultSet.getMetaData().getColumnCount(); i++) {
const value = tableResultSet.getString(i);
rowData.push(value !== null ? `'${value}'` : 'NULL'); // Tambahkan tanda kutip dan nilai NULL jika diperlukan
}
fullBackupContent += `INSERT INTO ${tableName} VALUES (${rowData.join(', ')});\n`;
}
tableResultSet.close();
tableBackupStmt.close();

fullBackupContent += '\n'; // Tambahkan baris kosong antara setiap tabel
}

// Buat file backup di Google Drive dengan isi yang sudah disatukan
const backupFile = backupFolder.createFile(backupFileName, fullBackupContent);

// Tutup koneksi setelah selesai
conn.close();

console.log("Backup seluruh database dengan struktur tabel berhasil ke: " + backupFile.getUrl());
}

// Fungsi untuk mendapatkan daftar nama tabel dari database
function getTableNames(conn) {
const stmt = conn.createStatement();
const resultSet = stmt.executeQuery("SHOW TABLES");

const tableNames = [];
while (resultSet.next()) {
tableNames.push(resultSet.getString(1));
}

resultSet.close();
stmt.close();

return tableNames;
}

// Fungsi untuk mendapatkan definisi kolom (struktur) dari sebuah tabel
function getTableStructure(conn, tableName) {
const stmt = conn.createStatement();
const resultSet = stmt.executeQuery(`SHOW CREATE TABLE ${tableName}`);

let columnDefs = "";
if (resultSet.next()) {
columnDefs = resultSet.getString(2); // Ambil hasil CREATE TABLE
}

resultSet.close();
stmt.close();

return columnDefs;
}

4. Setelah selesai sekarang bisa simpan dan klik run untuk menjalankan jika muncul notifikasi seperti dibawah ini berarti sudah berhasil melakukan bakcup

5. Sekarang anda bisa cek folder Backup_Database kemudian and abisa cek isinya apakah sudah sesuai. jika sudah sesuai berarti sudah berjalan dengan baik, namun untuk memasikan anda perlu melakukan percoban terhadap database hasil backup tersebut untuk memastikan bahwa sudah terbackup dengan baik dan sesuai dengan database.

6. Langkah berikutnya adalah dengan membuat Triggers dimana fungsinya untuk otomatisasi tugas dari proses diatas untuk melakukan klik menu Triggers



7. Selanjutnya klik add triggers Silakan pilih fungsi yang akan dijalankan. Pilih penyebaran yang harus dijalankan. Pilih sumber acara. Pilih jenis pemicu berbasis waktu atau sesuaikan dengan keinginan anda
jika sudah selasai anda bisa klik save, maka sekarang backup data akan otomatis dijalankan seuai setting triggers yang telah kita buat