Cadangan logis merupakan file mysqldump standar. Gunakan metode ini ketika Anda perlu memulihkan database atau tabel tertentu dari instans ApsaraDB RDS for MySQL ke database MySQL yang dikelola sendiri di Linux. Panduan ini mencakup pengunduhan cadangan, dekompresi, dan impor data.
Untuk pemulihan berdasarkan titik waktu (point-in-time restore), gunakan file cadangan fisik yang dikombinasikan dengan cadangan log. Tidak yakin metode mana yang sesuai untuk situasi Anda? Lihat Ikhtisar metode pemulihan data.
Cara kerja
-
Unduh file cadangan logis dari Konsol RDS.
-
Dekompres arsip
.tar, lalu dekompres file.sql.gzper database. -
Buat database target kosong dan impor file skema serta data menggunakan
mysql.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
-
Instans ApsaraDB RDS for MySQL dengan semua hal berikut (periksa halaman Basic Information):
-
Versi utama: 8.0, 5.7, 5.6, atau 5.5
-
Edisi: Edisi Ketersediaan Tinggi
-
Jenis penyimpanan: Local SSD
-
-
File cadangan logis yang telah dibuat. Cadangan logis harus dibuat secara manual — sistem membuat cadangan fisik secara default. Lihat Manual backup.
-
Host Linux yang menjalankan versi utama MySQL yang sama dengan instans RDS, dengan ruang disk gratis yang cukup untuk menampung file cadangan setelah didekompresi.
Panduan ini menggunakan CentOS 7 dan MySQL 5.7 sebagai contoh.
Mengunduh file cadangan
-
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS Anda berada, lalu klik ID instans.
-
Di panel navigasi kiri, klik Backup and Restoration.
-
Di tab Base Backups > Data Backup, temukan file cadangan logis yang ingin Anda pulihkan, lalu klik Download Instance Backup File di kolom Actions.
CatatanJika Download Instance Backup File tidak tersedia, periksa apakah edisi instans Anda mendukung pengunduhan cadangan.
-
Di kotak dialog Download Instance Backup File, salin URL unduhan:
-
Jika instance ECS dan instance RDS Anda berada dalam VPC yang sama (disarankan): salin URL jaringan internal. Ini lebih cepat dan stabil, terutama untuk file cadangan besar.
-
Jika tidak: salin URL unduhan eksternal. Kuota gratis berlaku untuk pengunduhan cadangan melalui internet; lalu lintas melebihi kuota akan dikenai biaya. Lihat Billing.
-
-
Di host Linux, jalankan perintah berikut untuk mengunduh file cadangan. Ganti
<download_url>dengan URL yang telah Anda salin dan<custom_file_name>dengan nama pilihan Anda.Flag Description -cMengaktifkan unduhan yang dapat dilanjutkan (resumable downloads), sehingga unduhan dilanjutkan dari titik terakhir jika terputus -OMenyimpan file dengan nama yang ditentukan wget -c '<download_url>' -O <custom_file_name>.tar
Dekompresi file cadangan
-
Ekstrak arsip
.tar:CatatanJika muncul pesan
This does not look like a tar archive, pastikan Anda mengunduh file cadangan logis RDS dan bukan cadangan fisik. Jika muncul pesanWrote only 512 of 10240 bytes, disk Anda penuh — ubah konfigurasi instans untuk menambah kapasitas ruang disk, lalu coba lagi.tar xvf <custom_file_name>.tar -C /tmp -
Periksa struktur direktori setelah ekstraksi. Arsip berisi satu subdirektori per database, masing-masing berisi file skema dan file data:
tree /tmp/backup_root/ # Ganti dengan direktori root aktual yang dibuat oleh tar.Output yang diharapkan:
/tmp/backup_root/ ├── database1/ # Direktori database target 1 │ ├── schema.sql # File skema database │ └── data.sql # File data ├── database2/ # Direktori database target 2 │ ├── schema.sql │ └── data.sql └── config.txt # Metadata cadangan (opsional) -
Buka direktori database yang ingin Anda pulihkan:
cd /tmp/backup_root/<database_name> -
Dekompres file
.sql.gz:gzip -d schema.sql.gz gzip -d data.sql.gzProses ini menghasilkan
schema.sqldandata.sql, yang akan Anda impor pada langkah berikutnya.
Mengimpor data
-
Login ke MySQL dan buat database target kosong. Pengguna harus memiliki izin untuk mengeksekusi semua Pernyataan SQL dalam file
.sql.Placeholder Description Example <user>username MySQL root<password>password MySQL (tanpa spasi setelah -p)mypassword<target_database_name>Nama database kosong yang akan dibuat restored_dbmysql -u <user> -p<password>CREATE DATABASE <target_database_name>; EXIT;Ganti placeholder sebagai berikut:
-
Impor skema terlebih dahulu, lalu data:
CatatanJika muncul pesan
Can't find master key from keyring, instans Anda mungkin tidak memenuhi prasyarat yang tercantum dalam panduan ini. Verifikasi edisi dan jenis penyimpanan instans RDS.# Impor skema tabel mysql -u <user> -p <target_database_name> < schema.sql # Impor data mysql -u <user> -p <target_database_name> < data.sqlMasukkan kata sandi Anda saat diminta setelah setiap perintah.
Verifikasi pemulihan
-
Login ke MySQL dan pastikan tabel serta data sudah ada:
mysql -u <user> -pUSE <target_database_name>; SHOW TABLES; -- Periksa apakah tabel ada SELECT COUNT(*) FROM <table_name>; -- Verifikasi jumlah barisJika tabel dan data muncul, pemulihan telah selesai.
FAQ
Mengapa instans saya tidak memiliki cadangan logis?
RDS membuat cadangan fisik secara default. Untuk mendapatkan cadangan logis, buat secara manual. Lihat Manual backup.
Mengapa nilai Restore Point in Time bernilai 0 untuk cadangan logis?
Pemulihan berdasarkan titik waktu memerlukan cadangan fisik yang dikombinasikan dengan cadangan log. Cadangan logis tidak mendukung pemulihan berdasarkan titik waktu, sehingga bidang Restore Point in Time menampilkan nilai 0.
Bagaimana cara memperbaiki `ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty`?
Kesalahan ini berarti database target sudah berisi riwayat pengenal transaksi global (GTID). Gunakan salah satu pendekatan berikut:
-
Aktifkan GTID pada database target dan jalankan kembali impor.
-
Komentari semua baris
GTID_PURGEDdalam file.sqldan jalankan kembali impor. -
Jika replikasi primary/secondary tidak digunakan, jalankan
RESET MASTERpada database target untuk menghapus riwayat GTID, lalu jalankan kembali impor.
Bagaimana cara memperbaiki `ERROR 3546 (HY000): @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED`?
File .sql berisi informasi GTID yang bertentangan dengan riwayat GTID yang sudah ada di database target. Jalankan RESET MASTER untuk menghapus riwayat GTID, lalu jalankan kembali impor.
Mengapa data yang dipulihkan hanya ada di database utama dan tidak disinkronkan ke database sekunder?
File .sql berisi SESSION.SQL_LOG_BIN= 0, yang menonaktifkan pencatatan biner selama impor dan mencegah perubahan direplikasi ke database sekunder. Periksa file impor untuk pengaturan ini.
Langkah selanjutnya
-
Back up an ApsaraDB RDS instance — atur pencadangan otomatis agar pemulihan di masa depan lebih mudah.
-
Use mysqldump to migrate MySQL data — migrasikan data dari database yang dikelola sendiri ke instans RDS.
-
RDS MySQL mysqldump options — referensi untuk semua flag mysqldump yang didukung oleh ApsaraDB RDS for MySQL.