Cara Memulihkan Database MySQL (Panduan Lengkap: mysqldump, Alat GUI, dan Log Biner)

目次

1. Pendahuluan

Apa Itu Pemulihan MySQL?

Pemulihan MySQL adalah proses memulihkan data yang telah dicadangkan ke basis data asli.
Dengan melakukan pemulihan, Anda dapat mengembalikan data setelah kehilangan data atau kegagalan sistem dan melanjutkan operasi bisnis atau sistem Anda.

Basis data dapat menjadi rusak atau hilang karena berbagai alasan. Misalnya, kasus berikut ini umum terjadi:

  • Kerusakan server atau kegagalan perangkat keras
  • Penghapusan data secara tidak sengaja
  • Kerusakan data yang disebabkan oleh pembaruan atau perubahan sistem
  • Kehilangan data akibat malware atau serangan eksternal

Untuk mempersiapkan situasi ini, penting untuk melakukan pencadangan yang tepat sebelumnya.
Kemudian, dengan memulihkan pada waktu yang diperlukan, Anda dapat mengembalikan sistem Anda dengan cepat.

Apa yang Akan Anda Pelajari dalam Artikel Ini

Artikel ini menjelaskan prosedur pemulihan MySQL secara detail.
Untuk mendukung semua orang mulai dari pemula hingga pengguna lanjutan, artikel ini memperkenalkan segala hal mulai dari metode pemulihan dasar hingga teknik pemulihan lanjutan.
Secara khusus, Anda akan mempelajari hal‑hal berikut:

  • Langkah‑langkah pemulihan MySQL dasar
  • Cara memulihkan menggunakan baris perintah (mysqldump)
  • Pemulihan dengan alat GUI (phpMyAdmin, MySQL Workbench)
  • Cara memulihkan hanya data tertentu
  • Mengoptimalkan pemulihan untuk kumpulan data besar
  • Pemulihan lanjutan menggunakan log biner
  • Cara memverifikasi data setelah pemulihan
  • Pemecahan masalah ketika terjadi kesalahan

Dengan mengikuti panduan ini, Anda akan dapat merancang strategi pencadangan yang tepat dan memulihkan dengan cepat saat diperlukan.
Pada bagian berikutnya, kami akan menjelaskan persiapan yang diperlukan sebelum melakukan pemulihan.

2. Persiapan Sebelum Memulihkan

Jenis‑jenis Cadangan MySQL

Untuk melakukan pemulihan, penting untuk membuat cadangan yang tepat sebelumnya. Metode cadangan MySQL meliputi jenis‑jenis berikut:

1. Cadangan Menggunakan mysqldump

mysqldump adalah alat yang mengekspor basis data MySQL dalam format SQL. Ini adalah metode yang paling umum dan mudah untuk dipulihkan.

mysqldump -u username -p database_name > backup.sql

Karena metode ini menyimpan data sebagai file teks, mudah untuk diedit, namun tidak cocok untuk kumpulan data yang sangat besar.

2. Cadangan Menggunakan phpMyAdmin

Metode ini menggunakan antarmuka GUI phpMyAdmin untuk membuat cadangan dengan mudah. Anda dapat mengekspornya sebagai file SQL.

  1. Masuk ke phpMyAdmin
  2. Pilih tab “Export”
  3. Atur format menjadi “SQL” dan klik “Go”

Metode ini ramah pemula namun tidak cocok untuk data berskala besar.

3. Cadangan Menggunakan MySQL Workbench

MySQL Workbench dapat membuat cadangan melalui GUI. Dengan fitur Data Export, Anda dapat mengekspor basis data atau tabel tertentu.

4. Cadangan Menggunakan Log Biner

Menggunakan log biner memungkinkan Anda merekam perubahan hingga titik waktu tertentu, sehingga memungkinkan pemulihan data.

mysqlbinlog --start-datetime="2024-02-01 10:00:00" --stop-datetime="2024-02-01 12:00:00" binlog.000001 > restore.sql

Metode ini memungkinkan pemulihan lanjutan, tetapi memerlukan manajemen log yang tepat.

Daftar Periksa Pra‑Pemulihan

Untuk berhasil memulihkan, Anda perlu memastikan poin‑poin berikut sebelumnya.

1. Konfirmasi Set Karakter (UTF-8 vs. SJIS)

Jika set karakter berbeda antara waktu pencadangan dan pemulihan, teks dapat menjadi rusak. Periksa enkoding file cadangan.

file backup.sql

Selain itu, menyertakan --default-character-set=utf8mb4 selama pemulihan dapat membantu menghindari masalah set karakter.

mysql -u username -p --default-character-set=utf8mb4 database_name < backup.sql

2. Buat Basis Data Target untuk Pemulihan

Sebelum memulihkan, pastikan apakah basis data target sudah ada. Jika belum, buatlah.

mysql -u username -p -e "CREATE DATABASE IF NOT EXISTS database_name;"

3. Periksa Integritas File Cadangan

Untuk memastikan file cadangan tidak rusak, coba tampilkan sebagian isinya.

head -n 20 backup.sql

Jika ukuran file sangat kecil, kemungkinan cadangan tidak dibuat dengan benar.

Cara Memilih Metode Pemulihan (Tabel Perbandingan)

Metode pemulihan tergantung pada lingkungan dan ukuran data Anda. Gunakan tabel di bawah ini untuk memilih opsi yang paling sesuai.

MethodDifficultyProsCons
mysqldumpIntermediateFast and highly reliableRequires manual commands
phpMyAdminBeginnerEasy to operate via GUINot suitable for large datasets
WorkbenchBeginnerSimple UI workflowCan put high load on the server
Binary logAdvancedPoint-in-time recovery possibleComplex configuration

3. Prosedur Pemulihan Database MySQL

Memulihkan Satu Database

Cara Memulihkan Cadangan mysqldump

Metode pemulihan yang paling umum adalah memulihkan data cadangan yang dibuat dengan mysqldump.

Langkah-langkah:

  1. Verifikasi bahwa file cadangan benar
    head -n 20 backup.sql
    

→ Periksa awal file cadangan dan pastikan tidak ada kesalahan.

  1. Buat database target (jika belum ada)
    mysql -u username -p -e "CREATE DATABASE IF NOT EXISTS database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
    
  1. Pulihkan data
    mysql -u username -p database_name < backup.sql
    

Menentukan Opsi untuk Mencegah Karakter Rusak

Jika pengkodean data berbeda, Anda mungkin melihat karakter rusak selama pemulihan.
Untuk mencegah hal ini, biasanya ditentukan --default-character-set=utf8mb4.

mysql -u username -p --default-character-set=utf8mb4 database_name < backup.sql

Catatan:

  • Pastikan set karakter yang digunakan saat pencadangan cocok dengan yang digunakan saat pemulihan
  • Setel set karakter default database ke UTF-8 (utf8mb4) saat membuat database
    CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

Memulihkan Beberapa Database

Jika file cadangan berisi beberapa database, Anda dapat memulihkannya dengan menjalankan impor tanpa menentukan database (biasanya digunakan dengan dump yang dibuat menggunakan --databases).

mysql -u username -p < backup.sql

Jika Anda ingin memulihkan hanya database tertentu, jalankan yang berikut:

mysql -u username -p --one-database target_database_name < backup.sql

Contoh:

mysql -u root -p --one-database sales_db < all_databases_backup.sql

→ Memulihkan hanya sales_db.

Memulihkan Semua Database

Untuk memulihkan semua database sekaligus, gunakan --all-databases.

mysql -u username -p --all-databases < backup.sql

Poin Penting:

  • Menggunakan --all-databases memulihkan semua database dalam file cadangan.
  • Penting untuk memeriksa sebelumnya apakah file berisi pernyataan seperti DROP DATABASE atau CREATE DATABASE .
  • Jika Anda memiliki data dalam jumlah besar, optimalkan pengaturan memori (detail dijelaskan di “5. Optimasi Pemulihan untuk Dataset Besar”).

Memulihkan dengan Alat GUI

Pemulihan Menggunakan phpMyAdmin

  1. Masuk ke phpMyAdmin
  2. Pilih tab “Import”
  3. Pilih dan unggah file cadangan (SQL)
  4. Klik “Go” untuk memulai pemulihan

Keuntungan:

  • Mudah dioperasikan untuk pemula
  • Anda dapat memulihkan tanpa menggunakan alat baris perintah

⚠️ Kerugian:

  • Batas ukuran file mungkin berlaku
  • Tidak cocok untuk data skala besar

Pemulihan Menggunakan MySQL Workbench

  1. Buka MySQL Workbench
  2. Pilih “Server > Data Import”
  3. Pilih file cadangan
  4. Tentukan database target
  5. Klik “Start Import” untuk menjalankan pemulihan

Keuntungan:

  • Alur kerja GUI yang intuitif
  • Anda dapat memulihkan hanya tabel tertentu

⚠️ Kerugian:

  • Mungkin memberikan beban tinggi pada server
  • Perhatikan kompatibilitas dengan versi MySQL Server Anda

4. Cara Memverifikasi Data Setelah Pemulihan MySQL

Perintah Dasar untuk Mengonfirmasi Pemulihan Berhasil

1. Periksa Daftar Database

Setelah memulihkan, pastikan bahwa database telah dibuat dengan benar.

SHOW DATABASES;

Titik Pemeriksaan

  • Apakah semua database yang termasuk dalam file cadangan ditampilkan?
  • Apakah nama database target pemulihan sudah benar?

2. Periksa Daftar Tabel di Setiap Database

Bahkan jika database ada, tidak berguna jika tabel tidak dipulihkan dengan benar.
Gunakan perintah berikut untuk memeriksa daftar tabel dalam database.

USE database_name;
SHOW TABLES;

Titik Pemeriksaan

  • Apakah semua tabel yang diperlukan ditampilkan?
  • Bergantung pada opsi mysqldump, apakah ada tabel yang secara tidak sengaja terlewat?

3. Periksa Jumlah Baris dalam Tabel

Bahkan setelah proses pemulihan selesai, Anda dapat memverifikasi apakah data telah dipulihkan dengan benar menggunakan COUNT(*).

SELECT COUNT(*) FROM table_name;

Poin Pemeriksaan

  • Apakah hasil COUNT(*) cocok dengan jumlah baris sebelum backup?
  • Apakah ada data yang hilang?
  • Apakah terdapat terlalu banyak nilai NULL atau 0?

4. Verifikasi Bahwa Data Spesifik Telah Dipulihkan dengan Benar

Untuk memastikan data dipulihkan dengan benar, ekstrak dan periksa beberapa baris.

SELECT * FROM table_name LIMIT 10;

Poin Pemeriksaan

  • Apakah urutan dan nilai-nilainya normal?
  • Apakah ada teks yang rusak?

Memeriksa Karakter Rusak dan Korupsi Data

Jika pengkodean karakter tidak ditangani dengan benar selama pemulihan, teks dapat menjadi rusak.
Untuk mencegah masalah ini, periksa pengkodean karakter setelah pemulihan.

1. Periksa Pengkodean Database

SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='database_name';

2. Periksa Pengkodean Tabel

SHOW CREATE TABLE table_name;

💡 Tips untuk mencegah karakter rusak

  • Saat mengekspor dengan mysqldump, tentukan --default-character-set=utf8mb4
  • Saat memulihkan, juga tentukan --default-character-set=utf8mb4
  • Edit pengaturan SET NAMES di dalam file backup jika diperlukan

Verifikasi Integritas Indeks dan Kunci Asing

1. Periksa Apakah Indeks Ditetapkan dengan Benar

SHOW INDEX FROM table_name;

Poin Pemeriksaan

  • Apakah indeks dipulihkan dengan benar?
  • Apakah kueri pada kolom tertentu menjadi tidak biasa lambat?

2. Periksa Kendala Kunci Asing

Jika Anda memulihkan tabel dengan kendala kunci asing, Anda harus memastikan kendala tersebut diterapkan dengan benar.

SELECT TABLE_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE TABLE_SCHEMA = 'database_name';

Poin Pemeriksaan

  • Apakah semua kendala kunci asing dipulihkan?
  • Apakah pengaturan seperti ON DELETE CASCADE dan ON UPDATE CASCADE sudah benar?

Periksa File Log untuk Menyelidiki Masalah Pemulihan

Jika terjadi kesalahan selama pemulihan, Anda dapat mengidentifikasi masalah dengan memeriksa log error MySQL.

1. Periksa Log Error MySQL

sudo cat /var/log/mysql/error.log

Apa yang dicari dalam log error

  • ERROR 1366 (HY000): Incorrect string value → Kemungkinan masalah pengkodean
  • ERROR 1452 (23000): Cannot add or update a child row → Kesalahan kendala kunci asing
  • ERROR 2006 (HY000): MySQL server has gone away → File backup mungkin terlalu besar

Optimasi Kinerja Setelah Pemulihan

Setelah pemulihan, penting untuk memverifikasi tidak hanya integritas data tetapi juga dampak kinerja.

1. Periksa Kecepatan Eksekusi Kueri

Jika pencarian data menjadi lambat setelah pemulihan, indeks mungkin belum dipulihkan dengan benar.

EXPLAIN SELECT * FROM table_name WHERE column_name = 'value';

2. Optimalkan Tabel

Untuk mengurangi fragmentasi dan meningkatkan kinerja, optimalkan tabel.

OPTIMIZE TABLE table_name;

3. Bersihkan Cache

Jika sejumlah besar data dipulihkan, membersihkan cache sementara dapat meningkatkan kinerja.

RESET QUERY CACHE;

Ringkasan

Untuk memastikan bahwa data yang dipulihkan benar, langkah-langkah berikut penting:

Pemeriksaan dasar database dan tabel
Verifikasi jumlah baris dan periksa karakter rusak
Validasi indeks dan kunci asing
Analisis log error untuk mengidentifikasi masalah
Terapkan optimasi kinerja

Pemulihan database tidak selesai hanya dengan menerapkan backup; proses selesai hanya setelah pemeriksaan integritas dan verifikasi operasional.

5. Optimasi Pemulihan untuk Dataset Besar

Menyesuaikan Pengaturan max_allowed_packet

1. Apa Itu max_allowed_packet?

MySQL membatasi ukuran paket maksimum yang dapat dikirim sekaligus menggunakan pengaturan max_allowed_packet.
Jika nilai ini terlalu kecil, kesalahan dapat terjadi saat memulihkan kueri SQL besar.

2. Periksa Pengaturan Saat Ini

SHOW VARIABLES LIKE 'max_allowed_packet';

Nilai default biasanya 16MB (16.777.216 byte). Saat memulihkan dataset besar, meningkatkan menjadi 256MB atau lebih disarankan.

3. Ubah Pengaturan Secara Sementara

Untuk mengubahnya secara sementara dalam sesi MySQL:

SET GLOBAL max_allowed_packet=268435456;  -- 256MB

4. Ubah Pengaturan Secara Permanen

Edit file konfigurasi MySQL (my.cnf atau my.ini) dan tambahkan atau ubah baris berikut:

[mysqld]
max_allowed_packet=256M

Setelah melakukan perubahan, restart MySQL:

sudo systemctl restart mysql

Poin Pemeriksaan

  • Jika Anda melihat ERROR 2006 (HY000): MySQL server has gone away, tingkatkan max_allowed_packet.
  • Jika pemulihan gagal di tengah jalan saat menangani data besar, tinjau pengaturan ini.

Mengoptimalkan innodb_buffer_pool_size

1. Apa Itu innodb_buffer_pool_size?

innodb_buffer_pool_size menentukan berapa banyak memori yang digunakan mesin penyimpanan InnoDB.
Jika nilai ini terlalu kecil, operasi pemulihan sering mengakses disk, mengurangi kinerja.

2. Periksa Pengaturan Saat Ini

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

Nilai default biasanya sekitar 128MB. Untuk dataset besar, alokasikan 50–70% dari total memori server disarankan.

3. Cara Mengkonfigurasi

Edit my.cnf dan tambahkan atau ubah baris berikut:

[mysqld]
innodb_buffer_pool_size=2G

Kemudian restart MySQL:

sudo systemctl restart mysql

Poin Pemeriksaan

  • Jika memori server cukup tersedia, meningkatkan innodb_buffer_pool_size meningkatkan kecepatan pemulihan.
  • Di lingkungan yang lebih kecil, pantau penggunaan memori dengan cermat saat melakukan penyesuaian.

Partisi untuk Meningkatkan Kecepatan Pemulihan

1. Manfaat Partisi

Seiring pertumbuhan basis data, satu tabel dapat berisi volume data yang besar, meningkatkan beban pemulihan.
Dengan membagi tabel menjadi partisi, kinerja pemulihan dapat ditingkatkan.

2. Contoh Konfigurasi Partisi

Misalnya, untuk mempartisi berdasarkan tanggal created_at:

CREATE TABLE orders (
    id INT NOT NULL,
    created_at DATE NOT NULL,
    PRIMARY KEY (id, created_at)
) PARTITION BY RANGE (YEAR(created_at)) (
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025)
);

Ini juga memungkinkan Anda memulihkan hanya partisi tertentu.

Poin Pemeriksaan

  • Alih-alih memulihkan semua data sekaligus, membagi berdasarkan partisi dapat secara signifikan meningkatkan kinerja.
  • Rancang tabel dengan mempertimbangkan partisi untuk mengelola dataset besar dengan lebih baik.

Pemulihan Lebih Cepat Menggunakan --disable-keys

1. Apa Itu --disable-keys?

Saat memasukkan volume data besar ke tabel berindeks, MySQL memperbarui indeks untuk setiap penyisipan, memperlambat operasi pemulihan.
Menggunakan DISABLE KEYS secara sementara menangguhkan pembaruan indeks dan mempercepat pemulihan.

2. Cara Menggunakannya

  1. Edit file cadangan dan tambahkan baris berikut:
    ALTER TABLE table_name DISABLE KEYS;
    
  1. Jalankan proses pemulihan
    mysql -u username -p database_name < backup.sql
    
  1. Setelah pemulihan selesai, aktifkan kembali indeks:
    ALTER TABLE table_name ENABLE KEYS;
    

Poin Pemeriksaan

  • Menggunakan DISABLE KEYS secara signifikan meningkatkan kecepatan pemulihan untuk penyisipan besar.
  • Jangan lupa menjalankan ENABLE KEYS setelah pemulihan.

6. Memecahkan Masalah Pemulihan MySQL

Pesan Kesalahan Umum dan Solusinya

1. Kesalahan “Unknown Database”

Pesan Kesalahan

ERROR 1049 (42000): Unknown database 'database_name'

Penyebab

  • Basis data target belum dibuat sebelum menjalankan pemulihan.

Solusi

  1. Buat basis data secara manual
    mysql -u username -p -e "CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
    
  1. Jalankan pemulihan lagi
    mysql -u username -p database_name < backup.sql
    

2. “Incorrect String Value” (Karakter Rusak)

Pesan Kesalahan

ERROR 1366 (HY000): Incorrect string value

Penyebab

  • Ketidaksesuaian set karakter antara cadangan dan pemulihan
  • Set karakter default basis data yang tidak tepat

Solusi

  1. Periksa enkoding file cadangan
    file backup.sql
    
  1. Tentukan --default-character-set=utf8mb4 saat memulihkan
    mysql -u username -p --default-character-set=utf8mb4 database_name < backup.sql
    
  1. Seragamkan set karakter basis data
    ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

3. “MySQL Server Has Gone Away” Selama Pemulihan

Pesan Kesalahan

ERROR 2006 (HY000): MySQL server has gone away

Penyebab

  • File cadangan terlalu besar
  • max_allowed_packet terlalu kecil
  • MySQL crash karena memori tidak cukup

Solusi

  1. Tingkatkan max_allowed_packet
    SET GLOBAL max_allowed_packet=256M;
    
  1. Sesuaikan innodb_buffer_pool_size
    [mysqld]
    innodb_buffer_pool_size=2G
    
  1. Kompres cadangan sebelum memulihkan
    mysqldump -u username -p database_name | gzip > backup.sql.gz
    gunzip < backup.sql.gz | mysql -u username -p database_name
    
  1. Bagi file SQL
    split -b 500M backup.sql backup_part_
    

Pulihkan file yang dibagi secara berurutan:

cat backup_part_* | mysql -u username -p database_name

Menangani File Cadangan Besar

1. Bagi File SQL Sebelum Memulihkan

Jika data yang akan dipulihkan terlalu besar, membagi file menjadi potongan lebih kecil meningkatkan tingkat keberhasilan.

split -b 500M backup.sql backup_part_

Pulihkan file yang dibagi secara berurutan:

cat backup_part_* | mysql -u username -p database_name

2. Gunakan Opsi --single-transaction dengan mysqldump

Opsi ini melakukan dump dalam satu transaksi, mengurangi penguncian dan menurunkan beban saat memulihkan dataset besar.

mysqldump --single-transaction -u username -p database_name > backup.sql

3. Nonaktifkan Sementara innodb_flush_log_at_trx_commit

Mengurangi frekuensi penulisan log transaksi selama pemulihan besar dapat secara signifikan meningkatkan kecepatan pemulihan.

SET GLOBAL innodb_flush_log_at_trx_commit=0;

Setelah pemulihan, jangan lupa mengembalikan ke pengaturan semula (default: 1).

SET GLOBAL innodb_flush_log_at_trx_commit=1;

Periksa File Log untuk Menyelidiki Masalah Pemulihan

1. Tinjau Log Kesalahan MySQL

Jika pemulihan gagal, meninjau log kesalahan MySQL membantu mengidentifikasi penyebab utama.

sudo cat /var/log/mysql/error.log

2. Gunakan SHOW WARNINGS; untuk Menampilkan Pesan Detail

SHOW WARNINGS;

Peringatan Umum

MessageCauseSolution
Duplicate entryPrimary key duplicationUse INSERT IGNORE
Table already existsThe table already existsRun DROP TABLE IF EXISTS before restore
Data truncated for columnString exceeds column limitIncrease VARCHAR size

7. Pertanyaan yang Sering Diajukan (FAQ)

Q1: Apa yang harus saya lakukan jika saya melihat “Unknown database” selama pemulihan?

Pesan Kesalahan

ERROR 1049 (42000): Unknown database 'database_name'

Penyebab

  • File cadangan tidak berisi pernyataan CREATE DATABASE
  • Basis data yang ditentukan tidak ada pada saat pemulihan

Solusi

  1. Buat basis data secara manual
    mysql -u username -p -e "CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
    
  1. Jalankan pemulihan lagi
    mysql -u username -p database_name < backup.sql
    

Q2: Bagaimana cara memperbaiki karakter rusak setelah pemulihan?

Pesan Kesalahan

ERROR 1366 (HY000): Incorrect string value

Penyebab

  • Ketidaksesuaian set karakter antara cadangan dan pemulihan
  • Set karakter default basis data yang tidak tepat

Solusi

  1. Periksa enkoding file cadangan
    file backup.sql
    
  1. Tentukan --default-character-set=utf8mb4 saat pemulihan
    mysql -u username -p --default-character-set=utf8mb4 database_name < backup.sql
    
  1. Seragamkan set karakter basis data
    ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

Q3: Bagaimana cara memulihkan file SQL besar (1GB atau lebih)?

Masalah

  • Pemulihan memakan waktu lama
  • ERROR 2006 (HY000): MySQL server has gone away

Solusi

  1. Tingkatkan max_allowed_packet
    SET GLOBAL max_allowed_packet=256M;
    
  1. Sesuaikan innodb_buffer_pool_size
    [mysqld]
    innodb_buffer_pool_size=2G
    
  1. Kompres cadangan sebelum memulihkan
    mysqldump -u username -p database_name | gzip > backup.sql.gz
    gunzip < backup.sql.gz | mysql -u username -p database_name
    
  1. Bagi file SQL
    split -b 500M backup.sql backup_part_
    

Pulihkan secara berurutan:

cat backup_part_* | mysql -u username -p database_name

Q4: Bagaimana cara memulihkan di AWS RDS (lingkungan cloud)?

Langkah-langkah

  1. Buat cadangan lokal
    mysqldump -u username -p --databases database_name > backup.sql
    
  1. Transfer file cadangan ke instansi AWS RDS
    scp backup.sql username@server_ip:/path/to/backup/
    
  1. Hubungkan ke AWS RDS dan pulihkan
    mysql -h rds_endpoint -u username -p database_name < backup.sql
    

Penting

  • Karena AWS RDS tidak menyediakan hak istimewa SUPER, tentukan --set-gtid-purged=OFF saat membuat cadangan.
    mysqldump -u username -p --set-gtid-purged=OFF --databases database_name > backup.sql
    

Q5: Bagaimana saya dapat secara otomatis menguji cadangan dan pemulihan?

Solusi
Gunakan cron job Linux untuk secara otomatis melakukan cadangan harian dan pengujian pemulihan.

1. Skrip Cadangan Otomatis

#!/bin/bash
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +"%Y%m%d")
DB_NAME="your_database"
USER="your_user"
PASSWORD="your_password"

# Create backup
mysqldump -u $USER -p$PASSWORD $DB_NAME > $BACKUP_DIR/backup_$DATE.sql

# Delete backups older than 30 days
find $BACKUP_DIR -type f -name "backup_*.sql" -mtime +30 -exec rm {} \;

2. Skrip Pengujian Pemulihan Otomatis

#!/bin/bash
DB_NAME="restore_test"
USER="your_user"
PASSWORD="your_password"
BACKUP_FILE="/var/backups/mysql/backup_latest.sql"

# Create test database
mysql -u $USER -p$PASSWORD -e "DROP DATABASE IF EXISTS $DB_NAME; CREATE DATABASE $DB_NAME;"

# Execute restore
mysql -u $USER -p$PASSWORD $DB_NAME < $BACKUP_FILE

3. Tambahkan ke Cron Job

crontab -e

Tambahkan baris berikut (cadangan pada pukul 03:00, pengujian pemulihan pada pukul 04:00 setiap hari):

0 3 * * * /path/to/backup_script.sh
0 4 * * * /path/to/restore_test_script.sh

Poin Pemeriksaan

  • Lakukan cadangan otomatis dan pengujian pemulihan secara teratur
  • Terus-menerus verifikasi integritas file cadangan

8. Kesimpulan

Tinjauan Prosedur Dasar Pemulihan MySQL

Persiapan Sebelum Pemulihan

  • Pahami jenis-jenis cadangan ( mysqldump , phpMyAdmin , log biner, dll.)
  • Verifikasi keberadaan basis data dan set karakter sebelum pemulihan
  • Pilih metode pemulihan yang tepat

Metode Pemulihan MySQL

MethodDifficultyProsCons
mysqldumpIntermediateFast and versatileRequires command-line operations
phpMyAdminBeginnerEasy GUI operationNot suitable for large datasets
WorkbenchBeginnerSimple UI workflowHigh server load
Binary logAdvancedPoint-in-time recovery possibleComplex configuration

Verifikasi Pasca-Pemulihan

  • Gunakan SHOW DATABASES; untuk memastikan basis data telah dibuat
  • Gunakan SHOW TABLES; untuk memastikan tabel telah dipulihkan
  • Gunakan SELECT COUNT(*) untuk memverifikasi jumlah baris
  • Gunakan SHOW WARNINGS; untuk memeriksa peringatan pemulihan

Optimasi untuk Pemulihan Dataset Besar

  • Sesuaikan max_allowed_packet dan innodb_buffer_pool_size
  • Bagi file cadangan sebelum memulihkan ( split -b 500M backup.sql backup_part_ )
  • Gunakan DISABLE KEYS untuk mengoptimalkan pembangunan kembali indeks

Pemecahan Masalah Selama Pemulihan

  • “Unknown database” → Jalankan CREATE DATABASE
  • “Garbled characters” → Tentukan --default-character-set=utf8mb4
  • “Restore stops midway” → Tingkatkan max_allowed_packet
  • “Large data restore” → Bagi file atau gunakan --single-transaction
  • “AWS RDS restore” → Gunakan --set-gtid-purged=OFF
  • Check logs → Gunakan SHOW WARNINGS;

Praktik Terbaik untuk Operasi Cadangan dan Pemulihan

Mengelola cadangan dan pemulihan dengan tepat meminimalkan risiko kehilangan data.
Dengan melakukan cadangan rutin dan pengujian pemulihan, Anda dapat memulihkan data dengan lancar jika terjadi kegagalan sistem yang sebenarnya.

1. Jadwalkan Cadangan Rutin

  • Jadwalkan cadangan harian atau mingguan
  • Gabungkan cadangan penuh dengan cadangan inkremental
  • Simpan cadangan secara lokal dan remote
  • Lokal: /var/backups/mysql/
  • Penyimpanan cloud (S3, Google Drive, FTP)

2. Otomatisasi Skrip Cadangan

Mengotomatiskan cadangan mengurangi kesalahan manusia dan mencegah terlewatnya cadangan.

#!/bin/bash
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +"%Y%m%d")
DB_NAME="your_database"
USER="your_user"
PASSWORD="your_password"

# Create backup
mysqldump -u $USER -p$PASSWORD $DB_NAME > $BACKUP_DIR/backup_$DATE.sql

# Delete backups older than 30 days
find $BACKUP_DIR -type f -name "backup_*.sql" -mtime +30 -exec rm {} \;

3. Pengujian Pemulihan Otomatis

Penting untuk secara rutin menguji apakah cadangan dapat benar‑benar dipulihkan.

#!/bin/bash
DB_NAME="restore_test"
USER="your_user"
PASSWORD="your_password"
BACKUP_FILE="/var/backups/mysql/backup_latest.sql"

# Create test database
mysql -u $USER -p$PASSWORD -e "DROP DATABASE IF EXISTS $DB_NAME; CREATE DATABASE $DB_NAME;"

# Execute restore
mysql -u $USER -p$PASSWORD $DB_NAME < $BACKUP_FILE

4. Pemantauan dan Peringatan

  • Terima notifikasi jika cadangan gagal
  • Atur MAILTO di cron
  • Gunakan notifikasi Slack atau email
    MAILTO="your_email@example.com"
    0 3 * * * /path/to/backup_script.sh
    

Menjamin Pemulihan MySQL yang Berhasil

Proses cadangan dan pemulihan adalah komponen penting dalam perlindungan data.
Terutama dalam operasi bisnis dan lingkungan pengembangan, cadangan rutin dan pengujian pemulihan sangat penting.

Gunakan prosedur yang diperkenalkan dalam artikel ini untuk meningkatkan operasi cadangan dan pemulihan MySQL Anda.

🔹 Daftar Periksa Keberhasilan Pemulihan MySQL

Apakah cadangan diambil secara teratur?
Apakah Anda telah memverifikasi isi file cadangan sebelumnya?
Apakah Anda melakukan pemeriksaan integritas setelah pemulihan?
Apakah pengaturan pemulihan dataset besar sudah dikonfigurasi dengan benar?
Apakah Anda memiliki prosedur pemecahan masalah yang disiapkan?
Apakah Anda telah mengotomatiskan proses cadangan dan pemulihan?

Langkah Selanjutnya

Berdasarkan artikel ini, uji proses pemulihan MySQL Anda dan konfirmasi pemulihan yang berhasil.
Juga, dokumentasikan prosedur pemulihan Anda dan bagikan kepada tim Anda.

Terus tingkatkan operasi cadangan dan pemulihan Anda untuk melindungi data Anda! 🚀