15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
22.10.2024
1 +1

Cara Memulihkan Database MySQL Dari Backup Menggunakan MySQL Workbench

Memulihkan database MySQL dari backup menggunakan MySQL Workbench berarti mengimpor file dump .sql (atau ekspor berbasis direktori) ke dalam skema target melalui wizard Data Import/Restore pada GUI, yang secara internal menjalankan perintah klien mysql terhadap server Anda. Prosesnya membutuhkan waktu kurang dari lima menit untuk database kecil hingga menengah dan memerlukan tiga hal: instance server MySQL yang berjalan, file backup yang valid, dan akun pengguna dengan hak istimewa yang cukup (minimal CREATE, DROP, INSERT, ALTER, dan INDEX).

Panduan ini mencakup setiap langkah mulai dari pengaturan koneksi hingga verifikasi pasca-pemulihan, termasuk kasus-kasus khusus — ketidaksesuaian set karakter, pemulihan parsial, timeout file besar, dan kesalahan hak istimewa — yang diabaikan oleh dokumentasi resmi.

Prasyarat dan Daftar Periksa Lingkungan

Sebelum menggunakan MySQL Workbench, konfirmasikan hal-hal berikut:

  • MySQL Workbench 8.0+ telah terinstal. Tata letak UI yang dijelaskan di sini sesuai dengan versi 8.0.x. Build lama 6.x memiliki jalur menu yang berbeda.
  • Format file backup kompatibel. Wizard Data Import MySQL Workbench menerima file .sql yang dihasilkan oleh mysqldump, Data Export MySQL Workbench sendiri, atau alat apa pun yang menghasilkan SQL DDL/DML standar. Wizard ini TIDAK secara native mengimpor .xbstream (Percona XtraBackup) atau file biner .frm/.ibd — file-file tersebut memerlukan proses pemulihan fisik yang terpisah.
  • Versi server MySQL target. Memulihkan dump dari MySQL 8.0 ke server MySQL 5.7 akan gagal jika dump menggunakan sintaks khusus 8.0 (misalnya, kolom tak terlihat, indeks fungsional). Selalu cocokkan versi mayor atau pulihkan ke versi yang lebih baru.
  • Hak istimewa pengguna. Jalankan kueri ini untuk memverifikasi akun Anda memiliki apa yang dibutuhkan:
SHOW GRANTS FOR 'your_user'@'localhost';
  • Pengaturan max_allowed_packet. Untuk dump besar yang berisi kolom BLOB atau pernyataan INSERT yang panjang, max_allowed_packet server harus cukup besar. Periksa dan tingkatkan sementara jika diperlukan:
SHOW VARIABLES LIKE 'max_allowed_packet';
SET GLOBAL max_allowed_packet = 1073741824; -- 1 GB
  • net_read_timeout dan net_write_timeout. Pemulihan besar melalui koneksi lambat dapat mencapai ambang batas timeout. Atur keduanya ke setidaknya 3600 detik sebelum memulai.

Jika Anda mengelola server jarak jauh, pastikan instance VPS Hosting Anda memiliki port MySQL 3306 yang dapat diakses dari workstation Anda, atau gunakan SSH tunnel (dibahas di bawah).

Langkah 1: Jalankan MySQL Workbench dan Hubungkan ke Server Anda

Buka MySQL Workbench. Di layar beranda, Anda akan melihat koneksi tersimpan di bawah MySQL Connections.

Menghubungkan ke server lokal: Klik tile koneksi. Masukkan kata sandi Anda saat diminta.

Menghubungkan ke server jarak jauh melalui SSH tunnel: Jika server MySQL Anda berada di host jarak jauh dan port 3306 tidak terekspos secara publik (postur keamanan yang direkomendasikan), gunakan SSH tunnel bawaan Workbench:

  1. Klik ikon + di sebelah “MySQL Connections.”
  2. Atur Connection Method ke Standard TCP/IP over SSH.
  3. Isi hostname SSH, nama pengguna SSH, dan jalur file kunci SSH.
  4. Atur hostname MySQL ke 127.0.0.1 dan port ke 3306.
  5. Klik Test Connection untuk mengonfirmasi tunnel berfungsi sebelum melanjutkan.

Ini adalah pendekatan yang benar untuk server produksi mana pun — jangan pernah mengekspos MySQL langsung ke internet publik.

Langkah 2: Siapkan Skema Database Target

Anda memerlukan skema tujuan sebelum mengimpor. Anda memiliki dua pilihan:

Opsi A: Pulihkan ke Skema yang Sudah Ada

Jika backup diambil dari skema yang masih ada di server (misalnya, Anda melakukan rollback setelah migrasi yang buruk), skema sudah terlihat di panel Navigator > Schemas di sebelah kiri. Tidak diperlukan tindakan di sini — Anda akan memilihnya selama konfigurasi impor.

Peringatan penting: Mengimpor ke skema yang sudah ada TIDAK secara otomatis menghapus tabel yang ada terlebih dahulu kecuali file dump Anda berisi pernyataan DROP TABLE IF EXISTS. Jika dump Anda dibuat dengan mysqldump --add-drop-table (default), tabel yang ada akan dihapus dan dibuat ulang. Jika tidak, Anda mungkin berakhir dengan data duplikat atau pelanggaran constraint. Periksa 50 baris pertama file .sql Anda untuk mengonfirmasi:

head -50 /path/to/your_backup.sql

Opsi B: Buat Skema Baru

Jika Anda memulihkan ke skema baru (migrasi, lingkungan baru, pemulihan bencana), buat terlebih dahulu. Buka File > New Query Tab dan jalankan:

CREATE DATABASE `database_name`
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

Selalu tentukan CHARACTER SET utf8mb4 secara eksplisit. Jika Anda membuat skema dengan charset default server dan dump Anda diambil dari database utf8mb4, Anda berisiko mengalami kerusakan encoding karakter yang tidak terdeteksi pada kolom string. Setelah dieksekusi, klik ikon refresh (panah melingkar) di panel Schemas untuk membuat skema baru terlihat.

Langkah 3: Buka Wizard Data Import

Navigasikan ke Server > Data Import di bilah menu atas. Panel Data Import/Restore terbuka di ruang kerja utama.

Anda akan melihat dua mode impor:

Mode ImporKapan Digunakan
Import from Self-Contained FileFile .sql tunggal yang dihasilkan oleh mysqldump atau Workbench Data Export (mode file tunggal). Ini adalah kasus yang paling umum.
Import from Dump Project FolderDirektori yang berisi beberapa file .sql yang diorganisir berdasarkan skema/tabel, dihasilkan oleh Data Export Workbench dalam mode “project folder”. Setiap tabel mendapatkan filenya sendiri.

Untuk sebagian besar operasi pemulihan, pilih Import from Self-Contained File.

Klik Browse dan navigasikan ke file backup .sql Anda. Workbench akan menampilkan jalur lengkap di kolom tersebut.

Langkah 4: Konfigurasi Skema Target dan Opsi Impor

Memilih Skema Target Default

Di bawah Default Schema to be Imported To, buka dropdown dan pilih skema target yang Anda identifikasi atau buat di Langkah 2.

Kapan membiarkan ini kosong: Jika file dump Anda berisi pernyataan CREATE DATABASE dan USE sendiri (umum ketika mysqldump dijalankan dengan flag --databases atau --all-databases), Anda dapat membiarkan kolom skema target kosong. Workbench akan membiarkan skrip SQL mengendalikan pemilihan skema. Namun, ini berarti dump akan mencoba membuat database sendiri — jika sudah ada, Anda mungkin mendapatkan error kecuali dump menyertakan CREATE DATABASE IF NOT EXISTS.

Kapan Anda harus memilih skema target: Jika dump dibuat dengan mysqldump database_name > backup.sql (tanpa --databases), file tidak berisi pernyataan CREATE DATABASE atau USE. Anda HARUS memilih skema target di sini, atau impor akan gagal dengan ERROR 1046: No database selected.

Struktur Dump vs. Data

Jika Anda menggunakan ekspor folder proyek Workbench, Anda akan melihat kotak centang untuk mengimpor secara selektif:

  • Dump Structure and Data — pemulihan penuh (default, direkomendasikan untuk pemulihan bencana)
  • Dump Data Only — mengisi ulang tabel tanpa membuat ulang skema; berguna ketika skema sudah cocok
  • Dump Structure Only — membuat ulang tabel/view/prosedur tanpa menyisipkan baris

Langkah 5: Jalankan Impor

Klik Start Import di sudut kanan bawah panel.

Workbench menjalankan proses latar belakang yang menyalurkan file .sql Anda melalui klien baris perintah mysql. Tab Import Progress dan panel Logs diperbarui secara real time. Perhatikan:

  • Bilah kemajuan hijau mencapai 100% — penyelesaian berhasil.
  • ERROR 1044 — akses ditolak; pengguna Anda tidak memiliki hak istimewa pada skema target.
  • ERROR 1005 / ERROR 1215 — kegagalan constraint foreign key; tabel dibuat dalam urutan yang salah atau tabel yang direferensikan tidak ada. Ini terkadang terjadi dengan dump parsial.
  • ERROR 2006: MySQL server has gone away — ambang batas max_allowed_packet atau timeout tercapai. Tingkatkan kedua nilai seperti yang ditunjukkan di bagian Prasyarat dan coba lagi.
  • Packet too large — penyebab utama yang sama seperti di atas.

Untuk database besar (dump multi-GB), GUI Workbench dapat tampak membeku. Sebenarnya tidak — proses mysql yang mendasarinya masih berjalan. Jangan tutup jendela. Jika Anda memerlukan lebih banyak kontrol atas pemulihan besar, pendekatan baris perintah lebih andal:

mysql -u your_user -p --max_allowed_packet=1G database_name < /path/to/backup.sql

Langkah 6: Verifikasi Database yang Dipulihkan

Pesan impor berhasil tidak cukup sebagai konfirmasi. Selalu lakukan verifikasi aktif.

Verifikasi Tingkat Skema

Di panel Navigator, klik kanan Schemas dan pilih Refresh All. Perluas database yang dipulihkan dan konfirmasikan secara visual:

  • Semua tabel yang diharapkan ada
  • View, stored procedure, dan trigger terdaftar di bawah node masing-masing

Pemeriksaan Jumlah Baris

Buka tab kueri baru, pilih database yang dipulihkan, dan jalankan:

SELECT
  table_name,
  table_rows,
  ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
WHERE table_schema = 'database_name'
ORDER BY table_rows DESC;

Bandingkan jumlah baris ini dengan sistem sumber atau manifes backup sebelumnya. table_rows di information_schema adalah perkiraan untuk InnoDB — untuk hitungan tepat pada tabel kritis, jalankan SELECT COUNT(*) FROM table_name secara langsung.

Pemeriksaan Integritas Data

Untuk tabel InnoDB, jalankan pemeriksaan konsistensi cepat:

CHECK TABLE your_table_name EXTENDED;

Jika Anda memiliki hubungan foreign key, verifikasi integritas referensial tidak rusak selama impor:

SET FOREIGN_KEY_CHECKS = 1;
-- Then attempt a JOIN across related tables to confirm linkage
SELECT COUNT(*) FROM orders o JOIN customers c ON o.customer_id = c.id;

Verifikasi Encoding Karakter

Jika aplikasi Anda menyimpan konten multibahasa, verifikasi bahwa karakter khusus tidak rusak:

SELECT column_name FROM table_name WHERE column_name LIKE '%ü%' LIMIT 5;

Jika hasilnya kosong padahal seharusnya tidak, Anda kemungkinan memiliki ketidaksesuaian charset antara dump dan skema target.

Menangani File Backup Besar dan Pertimbangan Performa

Untuk database yang melebihi beberapa ratus megabyte, GUI Workbench menjadi tidak praktis. Pertimbangkan pendekatan berikut:

Pisahkan dump berdasarkan tabel: Jika Anda hanya perlu memulihkan tabel tertentu, ekstrak dari dump:

grep -n "Table structure for table" /path/to/backup.sql

Ini menampilkan nomor baris untuk setiap blok tabel, memungkinkan Anda mengekstrak rentang tertentu dengan sed atau awk.

Gunakan mysqlimport untuk pemulihan berbasis CSV: Jika backup Anda dalam format CSV (diekspor melalui SELECT ... INTO OUTFILE), mysqlimport jauh lebih cepat daripada memproses pernyataan SQL baris per baris.

Nonaktifkan indeks selama impor: Untuk dataset yang sangat besar, menonaktifkan sementara pembaruan indeks dapat mengurangi waktu impor sebesar 50–80%:

ALTER TABLE large_table DISABLE KEYS;
-- (import data)
ALTER TABLE large_table ENABLE KEYS;

Khusus untuk InnoDB, atur innodb_autoinc_lock_mode = 0 dan foreign_key_checks = 0 dalam sesi Anda sebelum mengimpor:

SET SESSION foreign_key_checks = 0;
SET SESSION unique_checks = 0;

Jika Anda menjalankan MySQL di Dedicated Server dengan throughput I/O tinggi, Anda juga dapat meningkatkan sementara innodb_buffer_pool_size untuk mempercepat impor dengan menyimpan lebih banyak data di memori daripada terus-menerus melakukan flush ke disk.

Perbandingan Data Import MySQL Workbench vs. Pemulihan Baris Perintah

KriteriaGUI MySQL Workbench`mysql` CLI / `mysqldump`
Kemudahan penggunaanTinggi — point-and-clickSedang — memerlukan keakraban dengan CLI
Penanganan file besarBuruk di atas ~500 MB (GUI membeku)Sangat baik — streaming langsung
Visibilitas kemajuanPanel log, detail terbatasVerbose dengan flag --verbose
Pemulihan tabel selektifDidukung (mode folder proyek)Memerlukan pengeditan file manual atau flag --tables
Otomatisasi / scriptingTidak memungkinkanSepenuhnya dapat di-script melalui cron/bash
Dukungan SSH tunnelBawaanMemerlukan port forwarding SSH manual
Kontrol set karakterTerbatasKontrol penuh melalui --default-character-set
Terbaik untukPemulihan ad-hoc, lingkungan devProduksi, CI/CD, database besar

Kesalahan Umum dan Cara Menghindarinya

Memulihkan dump yang menyertakan klausa DEFINER: Stored procedure dan view sering mengandung DEFINER='original_user'@'original_host'. Jika pengguna tersebut tidak ada di server target, impor akan berhasil tetapi mengeksekusi objek tersebut akan gagal dengan ERROR 1449. Hapus atau ganti klausa DEFINER sebelum mengimpor:

sed 's/DEFINER=[^ ]* / /g' original_backup.sql > cleaned_backup.sql

Ketidaksesuaian timezone: Jika aplikasi Anda menyimpan nilai DATETIME dan server sumber serta target berada di timezone yang berbeda, data akan tampak bergeser. Selalu konfirmasikan @@global.time_zone cocok antara sumber dan target sebelum memulihkan.

Memulihkan ke lingkungan yang direplikasi: Jika server MySQL target adalah primary replikasi, pernyataan impor akan ditulis ke binary log dan direplikasi ke semua replica. Ini biasanya diinginkan untuk pemulihan penuh tetapi dapat menyebabkan masalah jika replica sudah lebih maju atau tertinggal. Jeda replikasi pada replica sebelum operasi pemulihan besar.

Pembengkakan binary log: Impor besar menghasilkan file binary log yang sangat besar. Jika ruang disk terbatas, nonaktifkan sementara binary logging untuk sesi tersebut:

SET SQL_LOG_BIN = 0;
-- (perform import)
SET SQL_LOG_BIN = 1;

Catatan: ini memerlukan hak istimewa SUPER atau BINLOG ADMIN dan hanya boleh dilakukan pada server mandiri, tidak pernah pada primary replikasi di mana replica bergantung pada binary log.

Menyiapkan Backup Otomatis untuk Mencegah Kehilangan Data di Masa Depan

Prosedur pemulihan hanya sebaik backup yang mendukungnya. Jika Anda mengelola server MySQL sendiri — baik di VPS dengan cPanel atau VPS Linux tanpa panel — otomatiskan backup Anda dengan cron job:

# Daily mysqldump backup with timestamp, retained for 7 days
0 2 * * * /usr/bin/mysqldump -u backup_user -p'StrongPassword' 
  --single-transaction 
  --routines 
  --triggers 
  --hex-blob 
  --default-character-set=utf8mb4 
  your_database | gzip > /backups/db_$(date +%F).sql.gz 
  && find /backups -name "db_*.sql.gz" -mtime +7 -delete

Penjelasan flag utama:

  • --single-transaction — mengambil snapshot konsisten tabel InnoDB tanpa menguncinya, penting untuk database yang sedang berjalan
  • --routines — menyertakan stored procedure dan fungsi (dihilangkan secara default)
  • --triggers — menyertakan trigger (disertakan secara default, tetapi eksplisit lebih baik)
  • --hex-blob — mendump kolom BLOB sebagai string hex, mencegah kerusakan data biner

Simpan backup di luar server. Backup pada disk yang sama dengan database yang dilindunginya bukan backup — itu adalah rasa aman yang palsu. Gunakan penyimpanan jarak jauh, penyimpanan objek, atau server sekunder. Jika lingkungan hosting Anda mendukung VPS Control Panels, sebagian besar panel menyertakan fitur backup terjadwal bawaan yang dapat mendorong salinan ke tujuan jarak jauh secara otomatis.

Daftar Periksa Poin Teknis Utama

Sebelum melakukan pemulihan MySQL apa pun, jalankan matriks keputusan ini:

  • [ ] Konfirmasikan jenis file backup adalah .sql (dump berbasis teks) — bukan format biner XtraBackup
  • [ ] Cocokkan versi mayor server MySQL antara sumber dan target
  • [ ] Verifikasi pengguna memiliki hak istimewa CREATE, DROP, INSERT, ALTER, INDEX pada skema target
  • [ ] Periksa variabel max_allowed_packet dan timeout; tingkatkan jika dump berisi BLOB atau berukuran besar
  • [ ] Periksa 50 baris pertama dump untuk menentukan apakah pernyataan CREATE DATABASE / USE ada
  • [ ] Putuskan: pulihkan ke skema yang ada (risiko penggabungan data) atau skema baru (slate bersih)
  • [ ] Hapus klausa DEFINER jika memulihkan ke server berbeda dengan akun pengguna yang berbeda
  • [ ] Konfirmasikan set karakter cocok antara dump dan skema target (utf8mb4 direkomendasikan secara universal)
  • [ ] Untuk pemulihan produksi: nonaktifkan replikasi, nonaktifkan binary logging jika sesuai, ambil snapshot pra-pemulihan
  • [ ] Setelah impor: verifikasi jumlah baris, jalankan CHECK TABLE, uji konektivitas aplikasi
  • [ ] Untuk database di atas 500 MB: lewati GUI Workbench dan gunakan CLI mysql secara langsung

FAQ

T: Apakah MySQL Workbench dapat memulihkan file backup .sql.gz yang dikompresi secara langsung?

Tidak. Wizard Data Import MySQL Workbench tidak menerima file yang dikompresi dengan gzip. Dekompresi file terlebih dahulu dengan gunzip backup.sql.gz atau salurkan langsung melalui CLI: gunzip -c backup.sql.gz | mysql -u user -p database_name.

T: Mengapa impor saya selesai tanpa error tetapi beberapa tabel hilang?

Penyebab paling umum adalah dump dibuat dengan --no-tablespaces atau merupakan ekspor parsial yang mengecualikan tabel tertentu. Buka file .sql dan cari CREATE TABLE table_name untuk mengonfirmasi apakah tabel yang hilang pernah disertakan dalam dump.

T: Apa perbedaan antara “Import from Self-Contained File” dan “Import from Dump Project Folder” di Workbench?

File self-contained adalah file .sql monolitik tunggal yang berisi semua DDL dan DML untuk seluruh database. Folder proyek dump adalah struktur direktori di mana skema dan data setiap tabel disimpan dalam file terpisah — format ini dihasilkan ketika Anda menggunakan Data Export Workbench dengan opsi “Export to Dump Project Folder”. Format folder proyek memungkinkan pemulihan tingkat tabel yang selektif dengan lebih mudah.

T: Pemulihan saya gagal dengan ERROR 1215: Cannot add foreign key constraint. Bagaimana cara memperbaikinya?

Ini terjadi ketika tabel dibuat dalam urutan yang melanggar dependensi foreign key — tabel induk yang direferensikan belum ada ketika tabel anak dibuat. Solusinya adalah menonaktifkan pemeriksaan foreign key untuk sesi impor. Tambahkan SET FOREIGN_KEY_CHECKS=0; di bagian atas file .sql Anda dan SET FOREIGN_KEY_CHECKS=1; di bagian bawah, lalu jalankan ulang impor.

T: Apakah aman memulihkan backup langsung ke database produksi yang sedang berjalan tanpa mengambil snapshot terlebih dahulu?

Tidak. Selalu ambil backup terkini dari database yang sedang berjalan sebelum menimpanya. Bahkan jika Anda yakin dengan file backup, operasi pemulihan yang gagal di tengah jalan dapat meninggalkan skema dalam keadaan yang sebagian dimodifikasi. Gunakan mysqldump --single-transaction untuk menangkap keadaan saat ini dalam hitungan detik tanpa downtime, kemudian lanjutkan dengan pemulihan.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai