Gunakan Data Transmission Service (DTS) untuk memigrasikan data dari replica set ApsaraDB for MongoDB ke klaster PolarDB for MySQL. DTS mendukung migrasi data penuh dan migrasi data inkremental.
Cara kerja
Migrasi dari MongoDB ke PolarDB for MySQL merupakan migrasi lintas-paradigma: MongoDB menyimpan data sebagai dokumen BSON fleksibel, sedangkan PolarDB for MySQL menyimpan data dalam tabel relasional ber-skema tetap. DTS menangani hal ini dengan memungkinkan Anda menentukan pemetaan tingkat field menggunakan ekspresi bson_value().
Untuk setiap koleksi yang dimigrasikan, DTS memetakan setiap field MongoDB ke kolom di tabel tujuan. Contohnya:
| Field dokumen MongoDB | Kolom PolarDB for MySQL |
|---|---|
"_id": "62cd344c85c1ea6a2a9f****" | mongo_id (varchar, primary key) |
"person.name": "neo" | person_name (varchar) |
"person.age": 26 | person_age (decimal) |
Sebelum memulai, buatlah tabel tujuan dengan skema yang sesuai. DTS hanya menulis data ke tabel tersebut—tidak membuat atau mengubah struktur tabel.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Klaster PolarDB for MySQL dengan ruang penyimpanan yang tersedia melebihi ukuran total data sumber. Alokasikan minimal 10% lebih banyak ruang penyimpanan daripada ukuran data sumber. Lihat Beli klaster Edisi Perusahaan atau Beli klaster subscription.
Database dan tabel dengan kunci primer satu kolom yang telah dibuat di klaster tujuan. Kunci primer komposit tidak didukung.
Jangan memberi nama kolom apa pun sebagai
_idatau_value. Jika tidak, tugas migrasi data akan gagal.Pastikan tipe kolom tujuan kompatibel dengan tipe data MongoDB yang sesuai. Misalnya, field MongoDB
_id(tipe ObjectId) harus dipetakan ke kolomvarchar. Untuk pemetaan lengkap, lihat Pemetaan tipe data.Lihat Kelola database.
Akun database pada instans ApsaraDB for MongoDB sumber dengan izin yang tercantum di Izin yang diperlukan.
Akun database pada klaster PolarDB for MySQL tujuan dengan izin baca dan tulis pada database tujuan. Lihat Buat dan kelola akun database.
(Hanya untuk sumber klaster sharded) Titik akhir yang diajukan untuk semua node shard. Semua node shard harus menggunakan password akun dan titik akhir yang sama. Lihat Ajukan titik akhir untuk komponen shard atau ConfigServer.
Jenis migrasi
| Jenis migrasi | Deskripsi |
|---|---|
| Migrasi data penuh | Memigrasikan seluruh data historis dari instans ApsaraDB for MongoDB sumber ke klaster PolarDB for MySQL tujuan. Biaya konfigurasi link gratis. |
| Migrasi data inkremental | Setelah migrasi penuh selesai, secara berkelanjutan memigrasikan perubahan baru dari sumber ke tujuan. Operasi yang didukung: insert, update, dan delete pada dokumen koleksi. Hanya dokumen yang diperbarui menggunakan perintah $set yang perubahan inkrementalnya dimigrasikan. Biaya konfigurasi link berlaku. |
Untuk detail penagihan, lihat Ikhtisar penagihan. Biaya transfer data berlaku saat memigrasikan data keluar dari Alibaba Cloud melalui Internet.
Izin yang diperlukan
| Database | Migrasi data penuh | Migrasi data inkremental |
|---|---|---|
| Instans ApsaraDB for MongoDB sumber | Baca pada database sumber | Baca pada database sumber, database admin, dan database local |
| Klaster PolarDB for MySQL tujuan | Baca dan tulis pada database tujuan | Baca dan tulis pada database tujuan |
Untuk petunjuk mengelola akun MongoDB, lihat Manajemen akun. Untuk akun PolarDB for MySQL, lihat Buat dan kelola akun database.
Batasan
Batasan database sumber
| Batasan | Detail |
|---|---|
| Bandwidth outbound | Server yang menghosting database sumber harus memiliki bandwidth outbound yang mencukupi. Bandwidth yang tidak mencukupi mengurangi kecepatan migrasi. |
| Jumlah koleksi | Jika Anda mengganti nama koleksi selama migrasi, satu tugas mendukung maksimal 1.000 koleksi. Pisahkan migrasi besar menjadi beberapa tugas. |
| Hanya migrasi penuh | Jenis sumber berikut hanya mendukung migrasi data penuh — migrasi inkremental tidak tersedia: instans ApsaraDB for MongoDB standalone, klaster Azure Cosmos DB for MongoDB, klaster elastis Amazon DocumentDB. |
| Persyaratan migrasi inkremental | Untuk menjalankan migrasi data inkremental, salah satu kondisi berikut harus terpenuhi: (1) Oplog diaktifkan pada database sumber dan log operasi disimpan selama minimal 7 hari. (2) Change streams diaktifkan dan DTS dapat berlangganan perubahan data dalam 7 hari terakhir. Jika kedua kondisi tidak terpenuhi, DTS mungkin gagal memperoleh log operasi, menyebabkan tugas gagal atau terjadi ketidakkonsistenan data. Hal ini berada di luar cakupan perjanjian tingkat layanan (SLA) DTS. Gunakan metode oplog bila memungkinkan — memiliki latensi migrasi inkremental lebih rendah. Change streams memerlukan MongoDB V4.0 atau lebih baru. |
| Amazon DocumentDB (klaster non-elastis) | Hanya metode ChangeStream yang didukung. Saat mengonfigurasi tugas, atur Migration Method ke ChangeStreamChange Streams dan Architecture ke Sharded Cluster. |
Klaster sharded — keunikan _id | Field _id di setiap koleksi harus unik. Nilai _id yang tidak unik menyebabkan ketidakkonsistenan data. |
| Klaster sharded — jumlah node Mongos | Klaster sharded sumber tidak boleh memiliki lebih dari 10 node Mongos dan tidak boleh berisi dokumen yatim (orphaned documents). Lihat dokumentasi MongoDB dan FAQ DTS. |
| Klaster sharded — balancer | Jika balancer MongoDB diaktifkan pada klaster sharded, instans mungkin mengalami penundaan. |
| Operasi selama migrasi penuh | Jangan mengubah skema database atau koleksi. Jangan memodifikasi data bertipe ARRAY. Jika Anda hanya menjalankan migrasi penuh (tanpa inkremental), jangan menulis ke database sumber selama migrasi. Penulisan menyebabkan ketidakkonsistenan data antara sumber dan tujuan. |
Batasan lainnya
| Batasan | Detail |
|---|---|
| Objek migrasi | Hanya koleksi yang dapat dipilih sebagai objek migrasi. |
| Persyaratan kunci primer | Tabel tujuan harus memiliki kunci primer unik satu kolom. Tetapkan bson_value("_id") ke kolom kunci primer tersebut. |
| Database yang dikecualikan | DTS tidak dapat memigrasikan data dari database admin atau local. |
| Transaksi | Informasi transaksi tidak dipertahankan. Transaksi dikonversi menjadi catatan individual di database tujuan. |
| Karakter 4-byte | Jika data sumber berisi karakter langka atau emoji (UTF-8 4-byte), database dan tabel tujuan harus menggunakan set karakter utf8mb4. Jika Anda menggunakan migrasi skema DTS, atur parameter character_set_server di database tujuan ke utf8mb4. |
| Presisi FLOAT dan DOUBLE | DTS membaca nilai FLOAT dan DOUBLE menggunakan ROUND(COLUMN, PRECISION). Jika presisi tidak ditentukan, DTS menggunakan 38 digit untuk FLOAT dan 308 digit untuk DOUBLE. Pastikan nilai default ini memenuhi kebutuhan Anda sebelum memulai migrasi. |
| Pemulihan otomatis tugas | DTS secara otomatis melanjutkan tugas migrasi yang gagal dalam waktu 7 hari. Sebelum memindahkan beban kerja bisnis Anda ke instans tujuan, akhiri atau rilis tugas DTS, atau cabut izin tulis akun DTS pada instans tujuan menggunakan perintah revoke. Jika tidak, tugas yang dilanjutkan kembali dapat menimpa data di tujuan. |
| Tampilan latensi inkremental | DTS menghitung latensi migrasi inkremental berdasarkan timestamp catatan terbaru yang dimigrasikan dan timestamp sumber saat ini. Jika tidak ada pembaruan pada sumber dalam waktu lama, latensi yang ditampilkan mungkin tidak akurat. Lakukan pembaruan pada sumber untuk memperbarui pembacaan latensi. |
| Pemulihan kegagalan tugas DTS | Jika tugas DTS gagal, dukungan teknis DTS berusaha memulihkannya dalam waktu 8 jam. Selama pemulihan, tugas mungkin dimulai ulang dan parameter tingkat tugas (bukan parameter database) mungkin dimodifikasi. |
Konfigurasi tugas migrasi
Langkah 1: Buka halaman Data Migration
Gunakan salah satu metode berikut untuk menuju halaman Data Migration.
Konsol DTS
Login ke Konsol DTS.Konsol DTS
Di panel navigasi kiri, klik Data Migration.
Di pojok kiri atas, pilih wilayah tempat instans migrasi berada.
Konsol DMS
Jalur navigasi yang tepat dapat berbeda tergantung pada mode dan tata letak konsol DMS Anda. Lihat Mode simple dan Sesuaikan tata letak dan gaya konsol DMS.
Login ke Konsol DMS.Konsol DMS
Di bilah navigasi atas, arahkan pointer ke Data + AI > DTS (DTS) > Data Migration.
Dari daftar drop-down di sebelah kanan Data Migration Tasks, pilih wilayah tempat instans migrasi berada.
Langkah 2: Buat tugas
Klik Create Task.
Jika tombol New Configuration Page muncul di pojok kanan atas, klik untuk beralih ke antarmuka konfigurasi baru.
Lewati langkah ini jika yang ditampilkan adalah Back to Previous Version.
Langkah 3: Konfigurasi database sumber dan tujuan
Konfigurasikan parameter berikut.
| Kategori | Parameter | Deskripsi |
|---|---|---|
| N/A | Task Name | Nama untuk tugas DTS. DTS menghasilkan nama secara otomatis. Tentukan nama deskriptif agar tugas mudah diidentifikasi. Nama tidak perlu unik. |
| Source Database | Select Existing Connection | Pilih instans terdaftar yang sudah ada atau konfigurasi secara manual. Jika memilih instans yang sudah ada, DTS akan mengisi parameter database secara otomatis. Untuk mendaftarkan database, lihat Kelola koneksi database. Di konsol DMS, pilih database dari daftar drop-down Select a DMS database instance, atau klik Add DMS Database Instance. Lihat Daftarkan instans database Alibaba Cloud dan Daftarkan database yang dihosting di layanan cloud pihak ketiga atau database yang dikelola sendiri. |
| Database Type | Pilih MongoDB. | |
| Access Method | Pilih Alibaba Cloud Instance. | |
| Instance Region | Wilayah tempat instans ApsaraDB for MongoDB sumber berada. | |
| Replicate Data Across Alibaba Cloud Accounts | Pilih No (akun yang sama). | |
| Architecture | Arsitektur instans sumber. Pilih Replica Set untuk contoh ini. Jika sumber adalah Sharded Cluster, tentukan juga Shard account dan Shard password saat menggunakan metode Oplog. | |
| Migration Method | Metode untuk menangkap perubahan inkremental. Oplog (direkomendasikan): memerlukan oplog diaktifkan pada sumber. ChangeStream: memerlukan change streams diaktifkan; wajib untuk klaster non-elastis Amazon DocumentDB. Saat menggunakan ChangeStream dengan arsitektur Sharded Cluster, Shard account dan Shard password tidak diperlukan. | |
| Instance ID | ID instans ApsaraDB for MongoDB sumber. | |
| Authentication Database | Database yang menyimpan kredensial akun. Default-nya adalah admin. | |
| Database Account | Akun yang digunakan untuk menghubungkan ke database sumber. | |
| Database Password | Password untuk akun tersebut. | |
| Encryption | Metode enkripsi koneksi: Non-encrypted, SSL-encrypted, atau Mongo Atlas SSL. Opsi yang tersedia bergantung pada nilai Access Method dan Architecture. SSL-encrypted tidak tersedia saat Architecture adalah Sharded Cluster dan Migration Method adalah Oplog. Untuk replica set MongoDB yang dikelola sendiri yang menggunakan enkripsi SSL, unggah sertifikat CA untuk memverifikasi koneksi. | |
| Destination Database | Select Existing Connection | Pilih instans terdaftar yang sudah ada atau konfigurasi secara manual. Untuk mendaftarkan database, lihat Kelola koneksi database. |
| Database Type | Pilih PolarDB for MySQL. | |
| Access Method | Pilih Alibaba Cloud Instance. | |
| Instance Region | Wilayah tempat klaster PolarDB for MySQL tujuan berada. | |
| Replicate Data Across Alibaba Cloud Accounts | Pilih No (akun yang sama). | |
| PolarDB Cluster ID | ID klaster PolarDB for MySQL tujuan. | |
| Database Account | Akun yang digunakan untuk menghubungkan ke klaster tujuan. | |
| Database Password | Password untuk akun tersebut. | |
| Encryption | Metode enkripsi koneksi. Lihat Konfigurasi enkripsi SSL. |
Setelah menyelesaikan konfigurasi, klik Test Connectivity and Proceed di bagian bawah halaman.
Pastikan blok CIDR server DTS telah ditambahkan ke pengaturan keamanan database sumber dan tujuan. Lihat Tambahkan blok CIDR server DTS. Jika sumber atau tujuan adalah database yang dikelola sendiri, klik Test Connectivity di kotak dialog CIDR Blocks of DTS Servers.
Langkah 4: Konfigurasi objek migrasi
Di halaman Configure Objects, konfigurasikan pengaturan berikut.
| Parameter | Deskripsi |
|---|---|
| Migration Types | Pilih Full Data Migration untuk hanya memigrasikan data historis. Pilih keduanya Full Data Migration dan Incremental Data Migration untuk menjaga sinkronisasi tujuan selama migrasi dan meminimalkan downtime. Jika hanya menjalankan migrasi penuh, jangan menulis ke database sumber selama migrasi untuk menghindari ketidakkonsistenan data. |
| Processing Mode of Conflicting Tables | Precheck and Report Errors (direkomendasikan): DTS memeriksa konflik nama koleksi sebelum memulai. Jika ada konflik, pemeriksaan awal gagal dan tugas tidak dapat dimulai. Untuk menyelesaikan konflik, gunakan fitur pemetaan nama objek untuk mengganti nama koleksi di tujuan. Ignore Errors and Proceed: DTS melewati pemeriksaan konflik nama. Catatan dengan kunci primer duplikat di tujuan tidak dimigrasikan. Ketidakkonsistenan data mungkin terjadi, inisialisasi data mungkin gagal, hanya kolom tertentu yang dimigrasikan, atau tugas migrasi data mungkin gagal. |
| Capitalization of object names in destination instance | Mengontrol kapitalisasi nama database, nama tabel, dan nama kolom di tujuan. Default-nya adalah DTS default policy. Lihat Tentukan kapitalisasi nama objek di instans tujuan. |
| Source Objects | Pilih koleksi yang akan dimigrasikan dan klik ikon panah kanan untuk memindahkannya ke Selected Objects. |
Setelah memilih objek Anda, lengkapi konfigurasi berikut di Selected Objects:
Petakan nama database: Di Selected Objects, klik kanan database sumber dan ubah Database Name menjadi nama skema target di klaster PolarDB for MySQL. Klik OK.
Petakan nama koleksi (tabel): Klik kanan koleksi dan ubah Table Name menjadi nama tabel target di klaster PolarDB for MySQL.
(Opsional) Tentukan kondisi filter untuk memigrasikan subset data. Lihat Tentukan kondisi filter.
(Opsional) Pilih operasi DML mana yang akan disertakan selama migrasi inkremental.
Konfigurasi pemetaan field: DTS menghasilkan ekspresi
bson_value()secara otomatis untuk setiap field. Tinjau dan sesuaikan Column Name, Type, Length, dan Precision untuk setiap kolom.Untuk menghapus field yang tidak perlu dimigrasikan, klik ikon hapus di sebelah baris field tersebut.
Jika ekspresi yang dihasilkan otomatis tidak sesuai dengan struktur field Anda (misalnya, untuk field bersarang), klik ikon hapus untuk menghapus baris tersebut, klik + Add Column, dan masukkan ekspresi
bson_value()yang benar secara manual. Lihat Contoh pemetaan field sebagai referensi.
PentingTetapkan
bson_value("_id")ke kolom kunci primer tabel tujuan. Tentukan field bersarang menggunakan jalur hierarkis lengkapnya dalambson_value(). Misalnya, gunakanbson_value("person","name")untuk subfieldnamedariperson. Menggunakan hanyabson_value("person")memetakan seluruh objekpersonke satu kolom dan menyebabkan perubahan inkremental pada subfield hilang.Klik OK.
Klik Next: Advanced Settings.
Langkah 5: Konfigurasi pengaturan lanjutan
| Parameter | Deskripsi |
|---|---|
| Dedicated Cluster for Task Scheduling | Secara default, DTS menjadwalkan tugas pada kluster bersama. Untuk meningkatkan stabilitas, beli kluster khusus. Lihat What is a DTS dedicated cluster. |
| Select the engine type of the destination database | Mesin penyimpanan untuk database tujuan. InnoDB (default) adalah mesin standar. X-Engine dioptimalkan untuk beban kerja online transaction processing (OLTP). |
| Retry Time for Failed Connections | Durasi DTS mencoba ulang setelah kegagalan koneksi. Rentang nilai yang valid: 10–1.440 menit. Nilai default: 720 menit. Atur nilai ini minimal 30 menit. Jika beberapa tugas menggunakan database sumber atau tujuan yang sama, nilai yang paling baru diatur akan berlaku. DTS mengenakan biaya terhadap instans selama masa percobaan ulang. |
| Retry Time for Other Issues | Durasi DTS mencoba ulang setelah kegagalan DDL atau DML. Rentang nilai yang valid: 1–1.440 menit. Nilai default: 10 menit. Atur nilai ini minimal 10 menit. Nilai ini harus lebih kecil daripada Retry Time for Failed Connections. |
| Enable Throttling for Full Data Migration | Membatasi throughput baca/tulis DTS selama migrasi data penuh untuk mengurangi beban pada database Anda. Konfigurasikan Queries per second (QPS) to the source database, RPS of Full Data Migration, dan Data migration speed for full migration (MB/s). Opsi ini tersedia hanya jika Full Data Migration dipilih. |
| Only one data type for primary key _id in a single table | Apakah bidang _id memiliki tipe data yang konsisten dalam satu koleksi. Yesalert notification settings: DTS melewati pemindaian tipe data selama migrasi penuh. No: DTS memindai dan menangani beberapa tipe data. Opsi ini tersedia hanya jika Full Data Migration dipilih. |
| Enable Throttling for Incremental Data Migration | Membatasi throughput DTS selama migrasi data inkremental. Konfigurasikan RPS of Incremental Data Migration dan Data migration speed for incremental migration (MB/s). Opsi ini tersedia hanya jika Incremental Data Migration dipilih. |
| Environment Tag | Tag opsional untuk lingkungan tugas. |
| Configure ETL | Apakah akan mengaktifkan pemrosesan extract, transform, and load (ETL). Jika Yes, masukkan pernyataan transformasi data di editor kode. Lihat Configure ETL in a data migration or data synchronization task. |
| Monitoring and Alerting | Apakah akan mengonfigurasi peringatan untuk kegagalan tugas atau ambang batas latensi. Jika Yes, konfigurasikan ambang batas peringatan dan pengaturan notifikasi. Lihat Configure monitoring and alerting. |
Langkah 6: Simpan dan jalankan pemeriksaan awal
Klik Next: Save Task Settings and Precheck.
Untuk melihat pratinjau parameter API untuk konfigurasi ini, arahkan kursor ke Next: Save Task Settings and Precheck dan klik Preview OpenAPI parameters.
DTS menjalankan pemeriksaan awal sebelum memulai tugas migrasi. Tugas hanya dapat dimulai setelah pemeriksaan awal berhasil.
Jika pemeriksaan awal gagal, klik View Details di sebelah setiap item yang gagal, perbaiki masalahnya, lalu klik Precheck Again.
Jika peringatan dipicu: perbaiki masalah dan periksa ulang, atau klik Confirm Alert Details > Ignore > OK > Precheck Again untuk melanjutkan meskipun ada peringatan. Mengabaikan item peringatan dapat menyebabkan ketidakkonsistenan data.
Langkah 7: Beli instans dan mulai tugas
Tunggu hingga Success Rate mencapai 100%, lalu klik Next: Purchase Instance.
Di halaman Purchase Instance, konfigurasikan parameter berikut.
Parameter Deskripsi Resource Group Kelompok sumber daya untuk instans migrasi. Default: default resource group. Lihat Apa itu Resource Management? Instance Class Kelas instans menentukan kecepatan migrasi. Pilih berdasarkan beban kerja Anda. Lihat Kelas instans migrasi data. Baca dan terima Data Transmission Service (Pay-as-you-go) Service Terms.
Klik Buy and Start, lalu klik OK di dialog konfirmasi.
Tugas migrasi muncul di halaman Data Migration. Pantau progres dari sana.
Sebelum menjalankan tugas migrasi, evaluasi performa database sumber dan tujuan. Jalankan migrasi selama jam sepi bila memungkinkan. Selama migrasi data penuh, DTS menggunakan sumber daya baca dan tulis di kedua database, yang dapat meningkatkan bebannya. Perlu juga diketahui bahwa operasi INSERT konkuren selama migrasi penuh menyebabkan fragmentasi tabel di tujuan. Setelah migrasi penuh selesai, penggunaan ruang di tujuan mungkin lebih besar daripada di sumber.
Pemetaan tipe data
| Tipe data MongoDB | Tipe data PolarDB for MySQL |
|---|---|
| ObjectId | VARCHAR |
| String | VARCHAR |
| Document | VARCHAR |
| DbPointer | VARCHAR |
| Array | VARCHAR |
| Date | DATETIME |
| TimeStamp | DATETIME |
| Double | DOUBLE |
| Integer 32-bit (BsonInt32) | INTEGER |
| Integer 64-bit (BsonInt64) | BIGINT |
| Decimal128 | DECIMAL |
| Boolean | BOOLEAN |
| Null | VARCHAR |
Contoh pemetaan field
Contoh berikut menunjukkan cara memetakan dokumen MongoDB bersarang ke tabel PolarDB for MySQL.
Struktur data MongoDB sumber
{
"_id": "62cd344c85c1ea6a2a9f****",
"person": {
"name": "neo",
"age": 26,
"sex": "male"
}
}Skema tabel PolarDB for MySQL tujuan
| Nama kolom | Tipe |
|---|---|
| mongo_id | varchar (primary key) |
| person_name | varchar |
| person_age | decimal |
Konfigurasi kolom baru
Gunakan jalur bersarang lengkap dalam ekspresi bson_value(). Menggunakan bson_value("person") memetakan seluruh objek person ke satu kolom dan menyebabkan perubahan inkremental pada person.name, person.age, dan person.sex hilang.
| Nama kolom | Tipe | Tetapkan nilai |
|---|---|---|
| mongo_id | STRING | bson_value("_id") |
| person_name | STRING | bson_value("person","name") |
| person_age | DECIMAL | bson_value("person","age") |