mysqldump mengekspor skema dan data sebuah database ke dalam file SQL yang berisi pernyataan CREATE TABLE dan INSERT, lalu memainkan kembali file tersebut pada instans target. Gunakan metode ini jika volume data Anda kecil atau bisnis Anda dapat mentolerir downtime yang panjang selama proses migrasi.
Untuk melakukan migrasi tanpa gangguan layanan, gunakan Data Transmission Service (DTS) sebagai gantinya. DTS mendukung replikasi berkelanjutan dan pergantian dengan downtime minimal.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Mengonfigurasi daftar putih alamat IP untuk instans RDS
-
Memperoleh titik akhir publik instans RDS
-
Membuat database dan akun tujuan pada instans RDS
Untuk instruksi penyiapan, lihat Alur kerja umum penggunaan ApsaraDB RDS for MySQL.
Kasus penggunaan
mysqldump merupakan pilihan tepat jika:
-
Volume data kecil — ekspor dan impor selesai dalam jendela pemeliharaan Anda
-
Downtime dapat diterima — penulisan ke database sumber harus dihentikan selama ekspor untuk menjamin konsistensi
-
Tidak diperlukan replikasi berkelanjutan — salinan logis satu kali sudah cukup
Gunakan DTS sebagai gantinya jika Anda memerlukan pergantian tanpa downtime atau replikasi berkelanjutan.
Catatan penggunaan
Setelah migrasi, semua nama tabel dari instans MySQL yang dikelola sendiri akan disimpan dalam huruf kecil pada instans RDS. Untuk mempertahankan nama tabel yang peka terhadap huruf besar/kecil, gunakan salah satu metode berikut:
-
Instans baru: Saat membuat instans RDS for MySQL, atur Table Name Case Sensitivity menjadi Case-sensitive.
-
Instans yang sudah ada: Atur
lower_case_table_nameske0di Konsol ApsaraDB RDS. Untuk detailnya, lihat Modifikasi parameter instans ApsaraDB RDS for MySQL.
Setelah Anda mengatur lower_case_table_names ke 0, jangan ubah kembali ke 1. Melakukannya dapat memicu ERROR 1146 (42S02): Table doesn't exist dan sangat memengaruhi beban kerja Anda. Jika instans RDS Anda menjalankan MySQL 8.0, lower_case_table_names tidak dapat dikonfigurasi ulang setelah instans dibuat.
Migrasi data dengan mysqldump
Langkah-langkah berikut menggunakan lingkungan Linux. Perintah yang sama berlaku di Terminal macOS atau Command Prompt Windows.
Langkah 1: Ekspor data dari instans MySQL yang dikelola sendiri
Hentikan semua operasi penulisan ke database sumber sebelum menjalankan ekspor. Memperbarui data selama ekspor dapat merusak file dump.
Akun yang digunakan untuk ekspor harus memiliki izin yang diperlukan. Untuk informasi lebih lanjut, lihat dokumentasi resmi MySQL.
Ekspor skema dan data (tidak termasuk prosedur tersimpan, pemicu, dan fungsi):
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <db_name> --skip-triggers --skip-lock-tables > /tmp/<db_name>.sql
Contoh:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb --skip-triggers --skip-lock-tables > /tmp/testdb.sql
Untuk mengekspor data dari instans RDS for MySQL sebagai gantinya, ganti host, username, dan nama database dengan nilai RDS yang sesuai.
Flag --default-character-set=utf8 mengatur set karakter untuk file dump. Jika database sumber menggunakan set karakter yang berbeda, atur flag ini agar sesuai. Ketidaksesuaian antara set karakter file dump dan set karakter instans target akan menyebabkan teks menjadi rusak setelah impor.
Ekspor prosedur tersimpan, pemicu, dan fungsi:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <db_name> -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/*/' > /tmp/<db_name>Trigger.sql
Contoh:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/testdbTrigger.sql
Lewati perintah ini jika database sumber tidak memiliki prosedur tersimpan, pemicu, atau fungsi.
Langkah 2: Unggah file yang diekspor ke instans ECS
Unggah file .sql dari Langkah 1 ke direktori /tmp pada instans Elastic Compute Service (ECS) yang dapat mengakses instans RDS.
Lewati langkah ini jika instans MySQL yang dikelola sendiri sudah berjalan pada instans ECS.
Langkah 3: Impor file ke instans RDS
Jalankan perintah berikut pada instans ECS. Ganti placeholder dengan detail koneksi RDS Anda.
mysql -h <RDS endpoint> -P <port> -u <account> -p <database> < /tmp/<db_name>.sql
mysql -h <RDS endpoint> -P <port> -u <account> -p <database> < /tmp/<db_name>Trigger.sql
Contoh:
mysql -h rm-bpxxxxx.mysql.rds.aliyuncs.com -P 3306 -u testuser -p testdb < /tmp/testdb.sql
mysql -h rm-bpxxxxx.mysql.rds.aliyuncs.com -P 3306 -u testuser -p testdb < /tmp/testdbTrigger.sql
| Placeholder | Deskripsi | Contoh |
|---|---|---|
<RDS endpoint> |
Titik akhir publik instans RDS | rm-bpxxxxx.mysql.rds.aliyuncs.com |
<port> |
Port instans RDS | 3306 |
<account> |
Akun RDS (akun istimewa, atau akun standar dengan izin baca dan tulis) | testuser |
<database> |
Nama database tujuan — harus sudah ada pada instans RDS | testdb |
Untuk membuat database tujuan jika belum ada, lihat Manage databases.
Langkah 4: Verifikasi migrasi
Gunakan DMS untuk login ke instans RDS dan pastikan tabel, jumlah baris, serta data tampak benar.
Langkah selanjutnya
-
Ikhtisar metode migrasi data — bandingkan mysqldump dengan DTS dan pendekatan migrasi lainnya
-
Modifikasi parameter instans ApsaraDB RDS for MySQL — sesuaikan
lower_case_table_namesdan parameter instans lainnya