Langsung ke konten utama
Semua catatan

Cara Sinkron Data MySQL ke Google Sheets Secara Terjadwal

Data penjualan ada di MySQL, tapi tim lebih nyaman di Google Sheets. Dua cara menyalinnya otomatis dan terjadwal, contoh Apps Script siap pakai, dan cek keamanannya.

Bagikan

Bagikan ke Instagram Stories

Menyiapkan gambar…

  1. Link sudah disalin.
  2. Unduh gambarnya, lalu unggah ke Instagram Stories dari HP.
  3. Tambahkan stiker Link di Story, lalu tempel link-nya.
Unduh gambar

Instagram Stories cuma bisa dibuat dari aplikasi di HP.

Bagikan ke TikTok

Menyiapkan gambar…

  1. Caption dan link sudah disalin.
  2. Unduh gambarnya, lalu unggah sebagai postingan foto di TikTok.
  3. Tempel caption-nya sebelum posting.
Unduh gambar

Paling gampang diposting dari aplikasi TikTok di HP.

Deretan server di rak dengan lampu status hijau menyala

Cara paling sederhana untuk menyinkronkan MySQL ke Google Sheets secara terjadwal adalah lewat Google Apps Script. Script di dalam spreadsheet membuka koneksi ke database, menjalankan query, menulis hasilnya ke sheet, lalu diulang otomatis tiap jam atau tiap pagi dengan trigger berbasis waktu. Kalau databasenya nggak boleh dibuka ke internet, balik arahnya: server yang mengirim data ke Sheets.

Kasusnya sering begini. Aplikasi kasir, sistem pesanan, atau website menyimpan data di MySQL. Owner dan tim keuangan nggak mau membuka phpMyAdmin, mereka mau angka yang langsung bisa difilter dan dibuat grafik di Google Sheets. Selama ini ada yang export CSV manual tiap hari. Itu yang mau kita hilangkan.

Pilih arahnya dulu

Sheets yang mengambil (Apps Script)Server yang mengirim
Cara kerjaScript di spreadsheet terhubung langsung ke MySQL lewat JDBCScript di server membaca MySQL, lalu menulis ke Sheets lewat Google Sheets API
Database harus terbuka ke internetYa, untuk rentang IP GoogleTidak
Tempat jadwal diaturTrigger Apps ScriptCron di server
Cocok untukDatabase di hosting atau VPS yang bisa diatur firewall-nyaDatabase yang hanya boleh diakses dari jaringan sendiri

Untuk kebanyakan bisnis kecil dan menengah, cara pertama paling cepat jalan. Cara kedua lebih aman, tapi butuh akses ke server dan sedikit lebih banyak pekerjaan teknis.

Cara pertama, Apps Script dengan JDBC

Menurut dokumentasi Apps Script, layanan JDBC bisa terhubung ke MySQL, Google Cloud SQL, SQL Server, Oracle, dan PostgreSQL. Ada tiga syarat yang perlu dicatat:

  • Rentang IP Google harus diizinkan di firewall database, sesuai daftar yang ditautkan di dokumentasi itu.
  • Port database harus 1025 ke atas. Port bawaan MySQL, 3306, sudah memenuhi.
  • Koneksi minimal TLS 1.2, karena TLS 1.0 dan 1.1 sudah dimatikan.

Berikut contoh script yang menyalin pesanan 30 hari terakhir ke tab bernama Data. Baris pertama tab itu dipakai untuk judul kolom.

// Simpan kredensial di Project Settings > Script properties, jangan di kode
function syncMysqlKeSheet() {
  const props = PropertiesService.getScriptProperties();
  const conn = Jdbc.getConnection(
    props.getProperty('DB_URL'), // contoh: jdbc:mysql://HOST:3306/NAMA_DB
    props.getProperty('DB_USER'),
    props.getProperty('DB_PASS')
  );
  const stmt = conn.createStatement();
  const rs = stmt.executeQuery(
    'SELECT id, tanggal, pelanggan, total FROM pesanan ' +
    'WHERE tanggal >= CURDATE() - INTERVAL 30 DAY'
  );

  const jumlahKolom = rs.getMetaData().getColumnCount();
  const baris = [];
  while (rs.next()) {
    const row = [];
    for (let i = 1; i <= jumlahKolom; i++) row.push(rs.getString(i));
    baris.push(row);
  }
  rs.close();
  stmt.close();
  conn.close();

  const sheet = SpreadsheetApp.getActive().getSheetByName('Data');
  const lama = Math.max(sheet.getLastRow() - 1, 1);
  sheet.getRange(2, 1, lama, jumlahKolom).clearContent();
  if (baris.length) sheet.getRange(2, 1, baris.length, jumlahKolom).setValues(baris);
}

// Jalankan sekali untuk memasang jadwal tiap jam
function pasangJadwal() {
  ScriptApp.newTrigger('syncMysqlKeSheet').timeBased().everyHours(1).create();
}

Langkahnya:

  1. Buka spreadsheet, pilih Extensions > Apps Script, lalu tempel script di atas.
  2. Isi DB_URL, DB_USER, dan DB_PASS di Project Settings > Script properties.
  3. Ganti query sesuai tabelmu, lalu jalankan syncMysqlKeSheet sekali untuk mengecek hasilnya dan memberi izin.
  4. Jalankan pasangJadwal sekali. Setelah itu sinkronisasi jalan sendiri tiap jam.

Script ini menimpa isi lama setiap kali jalan, jadi tab Data selalu berisi salinan terbaru. Kalau kamu butuh riwayat, ubah bagian akhirnya supaya menambah baris baru, bukan menimpa. Nilai yang ditulis berupa teks, jadi kolom angka mungkin perlu diformat ulang di Sheets sebelum dipakai di rumus.

Laptop di meja kaca menampilkan dashboard berisi grafik dan angka
Data tetap disimpan di MySQL. Sheets hanya menerima salinan untuk dibaca dan dianalisis tim. Foto: Carlos Muza di Unsplash.

Batas yang perlu diketahui

Kuota Apps Script yang paling berpengaruh di sini:

BatasAkun Gmail biasaGoogle Workspace
Lama satu kali jalan6 menit6 menit
Total waktu trigger per hari90 menit6 jam
Jumlah trigger per pengguna per script2020
Koneksi JDBC per hari10.00050.000

Sinkronisasi tiap jam yang selesai dalam satu menit hanya memakai sekitar 24 menit sehari, jadi masih aman bahkan untuk akun Gmail biasa. Yang perlu diwaspadai adalah query yang menarik terlalu banyak baris. Ambil hanya kolom dan rentang tanggal yang dibutuhkan, karena spreadsheet juga punya batas sel. Soal batas itu dan kapan Sheets mulai nggak cukup, aku bahas di Kapan Google Sheets Cukup Jadi Database Webapp, dan Kapan Harus Pindah.

Keamanan yang wajib dicek dulu

Membuka database ke rentang IP Google artinya database bisa dijangkau dari internet. Ini saranku sebelum menyalakan sinkronisasi:

  • Buat user MySQL khusus yang hanya bisa membaca, dan hanya untuk tabel atau view yang dibutuhkan. Jangan pakai user root atau user aplikasi.
  • Pakai view untuk menyembunyikan kolom sensitif, misalnya nomor telepon atau alamat pelanggan, kalau tim nggak butuh.
  • Batasi akses firewall hanya ke rentang IP Google, jangan dibuka untuk semua alamat.
  • Simpan kredensial di Script properties, dan batasi siapa yang bisa mengedit script. Orang yang bisa mengedit script bisa membaca kredensialnya.
  • Atur siapa yang bisa melihat spreadsheet-nya. Data yang sudah tersalin ke Sheets ikut aturan berbagi file itu. Kalau akun Google yang memilikinya dibobol, datanya ikut terbuka, seperti yang kubahas di Kalau Akun Google Perusahaan Kena Hack Besok Pagi, Apa Saja yang Hilang?.

Kalau salah satu poin di atas nggak bisa dipenuhi, pilih cara kedua: server yang mengirim data ke Sheets, sehingga database tetap tertutup.

Kapan sinkronisasi ini nggak cukup

Salinan terjadwal cocok untuk laporan dan pemantauan. Tapi kalau tim mulai mengedit data di Sheets lalu ingin perubahannya kembali ke MySQL, itu sudah sinkronisasi dua arah, dan risikonya jauh lebih besar. Di titik itu biasanya lebih tepat membuat halaman input kecil yang langsung menulis ke database, atau dashboard yang membaca database secara langsung. Kalau tujuannya laporan rutin, lihat juga Tiap Akhir Bulan Tim Begadang Rekap Laporan: Kapan Layak Diotomatisasi?.

Penutup

Untuk laporan yang diperbarui tiap jam atau tiap pagi, Apps Script dengan JDBC sudah cukup dan bisa jalan dalam satu sore. Yang menentukan aman atau tidaknya bukan script-nya, tapi user database, firewall, dan siapa yang bisa membuka spreadsheet-nya.

Kalau kamu ingin data dari sistemmu otomatis masuk ke Google Sheets atau dashboard tanpa export manual lagi, cerita aja dulu sistem yang kamu pakai.

Foto di artikel ini dari Unsplash, karya Domaintechnik (foto utama) dan Carlos Muza, dipakai sesuai Unsplash License.

Bermanfaat? Bagikan ke teman atau tim kamu.

Bagikan

Bagikan ke Instagram Stories

Menyiapkan gambar…

  1. Link sudah disalin.
  2. Unduh gambarnya, lalu unggah ke Instagram Stories dari HP.
  3. Tambahkan stiker Link di Story, lalu tempel link-nya.
Unduh gambar

Instagram Stories cuma bisa dibuat dari aplikasi di HP.

Bagikan ke TikTok

Menyiapkan gambar…

  1. Caption dan link sudah disalin.
  2. Unduh gambarnya, lalu unggah sebagai postingan foto di TikTok.
  3. Tempel caption-nya sebelum posting.
Unduh gambar

Paling gampang diposting dari aplikasi TikTok di HP.

Ada proses di tim kamu yang masih manual?

Cerita aja, kita cariin solusinya bareng.