Gunakan Data Transmission Service (DTS) untuk menyinkronkan data secara berkelanjutan dari replica set ApsaraDB for MongoDB ke instans ApsaraDB RDS for MySQL. DTS meratakan struktur dokumen MongoDB menjadi tabel relasional menggunakan ekspresi bson_value(), sehingga setiap field MongoDB dipetakan ke kolom MySQL.
Sebelum memulai
MongoDB dan MySQL menggunakan model data yang sangat berbeda. Sebelum memulai, pahami cara DTS menjembatani perbedaan tersebut:
Sebuah dokumen MongoDB setara dengan satu baris di MySQL.
Koleksi MongoDB setara dengan tabel MySQL.
Field MongoDB bersifat nested (hierarkis), sedangkan kolom MySQL bersifat flat. DTS menggunakan ekspresi
bson_value()untuk memetakan field nested ke kolom individual.
Prasyarat
Sebelum memulai, pastikan bahwa:
Instans ApsaraDB RDS for MySQL tujuan telah dibuat dan memiliki ruang penyimpanan yang cukup — lebih besar daripada ukuran total data di database sumber. Untuk detailnya, lihat Buat instans ApsaraDB RDS for MySQL. Disarankan agar ruang penyimpanan yang tersedia minimal 10% lebih besar daripada ukuran total data di database sumber.
Database dan tabel dengan kolom kunci primer unik yang tidak komposit sudah ada di instans tujuan. Lihat Kelola database.
Tipe kolom tabel tujuan kompatibel dengan tipe data MongoDB yang akan disinkronkan. Misalnya, jika field
_idMongoDB bertipeObjectId, maka kolom MySQL yang sesuai harus bertipevarchar.Tabel tujuan tidak memiliki kolom bernama `_id` atau `_value`.
Jika sumber adalah sharded cluster, endpoint untuk semua node shard telah diajukan, dan semua node shard menggunakan password akun serta endpoint yang sama. Lihat Ajukan endpoint untuk shard.
Izin yang diperlukan
Berikan izin berikut kepada akun database yang digunakan DTS untuk terhubung ke masing-masing database.
| Database | Izin yang diperlukan | Referensi |
|---|---|---|
| Sumber ApsaraDB for MongoDB | Izin baca pada database sumber, database admin, dan database local | Manajemen akun |
| ApsaraDB RDS for MySQL tujuan | Izin baca dan tulis pada database tujuan | Buat akun dan Ubah izin akun |
Batasan
Tinjau batasan berikut sebelum mengonfigurasi tugas.
Batasan database sumber
Server sumber harus memiliki bandwidth outbound yang mencukupi. Bandwidth rendah mengurangi kecepatan sinkronisasi.
Hanya collections yang dapat dipilih sebagai objek sinkronisasi. Anda tidak dapat melakukan sinkronisasi di tingkat database.
Jika Anda mengganti nama koleksi di tujuan, satu tugas dapat menyinkronkan maksimal 1.000 collections. Untuk koleksi lebih banyak, buat beberapa tugas.
DTS tidak dapat terhubung ke MongoDB melalui endpoint SRV.
Tipe sumber berikut tidak didukung: instans ApsaraDB for MongoDB standalone, kluster Azure Cosmos DB for MongoDB, dan kluster elastis Amazon DocumentDB.
Database sumber harus memiliki oplog yang diaktifkan dengan log yang disimpan selama minimal 7 hari, atau change streams yang diaktifkan dan tersedia selama 7 hari terakhir. Gunakan oplog (disarankan) untuk latensi lebih rendah. Change streams memerlukan MongoDB V4.0 atau lebih baru.
Batasan sharded cluster
Field
_iddi setiap koleksi yang akan disinkronkan harus unik.Jumlah node Mongos tidak boleh melebihi 10.
Sumber tidak boleh berisi orphaned documents. Lihat dokumentasi MongoDB dan FAQ tentang penghapusan orphaned documents.
Jangan menjalankan perintah berikut selama sinkronisasi:
shardCollection,reshardCollection,unshardCollection,moveCollection, ataumovePrimary.Jika balancer aktif, latensi dapat terjadi.
Batasan perilaku sinkronisasi
Selama sinkronisasi data penuh, jangan mengubah skema database atau koleksi, atau memodifikasi data bertipe
ARRAY.Jika Anda hanya menjalankan sinkronisasi data penuh, jangan menulis ke database sumber selama tugas berjalan.
Sinkronisasi inkremental hanya mendukung operasi insert, update (melalui
$set), dan delete. Transaksi tidak dipertahankan — mereka dikonversi menjadi catatan individual.Jika data berisi karakter 4-byte (seperti emoji), tabel tujuan harus menggunakan set karakter
utf8mb4. Jika DTS menangani sinkronisasi skema, atur parametercharacter_set_serverdi instans tujuan menjadiutf8mb4.DTS tidak dapat menyinkronkan data dari database
admin,config, ataulocal.Precision
FLOATdefault-nya 38 digit; precisionDOUBLEdefault-nya 308 digit. DTS menerapkanROUND(COLUMN,PRECISION)untuk mengambil nilai. Verifikasi apakah precision default memenuhi kebutuhan Anda.Selama sinkronisasi data penuh, operasi
INSERTkonkuren dapat menyebabkan fragmentasi pada tabel tujuan, sehingga penggunaan penyimpanan lebih tinggi daripada di sumber.DTS mencoba melanjutkan tugas yang gagal dalam 7 hari terakhir. Hentikan atau lepas tugas yang gagal sebelum memindahkan beban kerja ke database tujuan. Atau, cabut izin tulis DTS pada tujuan menggunakan pernyataan
REVOKEuntuk mencegah data sumber menimpa data tujuan saat dilanjutkan.Latensi sinkronisasi inkremental dihitung berdasarkan selisih waktu data terbaru yang telah disinkronkan di tujuan dengan waktu saat ini di sumber. Lakukan update pada sumber untuk memperbarui pembacaan latensi jika tidak ada update dalam periode yang lama.
Penagihan
| Tipe sinkronisasi | Biaya |
|---|---|
| Sinkronisasi data penuh | Gratis |
| Sinkronisasi data inkremental | Dikenai biaya. Lihat Ikhtisar penagihan |
Buat tugas sinkronisasi data
Langkah 1: Buka halaman sinkronisasi data
Buka daftar tugas DTS melalui konsol DTS atau konsol Data Management Service (DMS).
Konsol DTS
Masuk ke konsol DTS.
Di panel navigasi kiri, klik Data Synchronization.
Di pojok kiri atas, pilih wilayah tempat tugas sinkronisasi akan dijalankan.
Konsol DMS
Jalur navigasi tepatnya bervariasi tergantung mode dan tata letak konsol DMS. Lihat Simple mode dan Sesuaikan tata letak dan gaya konsol DMS untuk detailnya.
Masuk ke konsol DMS.
Di bilah navigasi atas, arahkan pointer ke Data + AI lalu pilih DTS (DTS) > Data Synchronization.
Dari daftar drop-down di sebelah kanan Data Synchronization Tasks, pilih wilayah target.
Langkah 2: Konfigurasikan database sumber dan tujuan
Klik Create Task.
(Opsional) Klik New Configuration Page di pojok kanan atas jika diminta. Lewati langkah ini jika Back to Previous Version sudah ditampilkan.
Konfigurasikan parameter berikut.
| Kategori | Parameter | Deskripsi |
|---|---|---|
| N/A | Task Name | DTS membuat nama secara otomatis. Tentukan nama deskriptif agar mudah diidentifikasi. Nama tugas tidak perlu unik. |
| Source Database | Select Existing Connection | Pilih instans terdaftar dari daftar drop-down, atau konfigurasikan parameter koneksi secara manual. |
| Database Type | Pilih MongoDB. | |
| Access Method | Pilih Alibaba Cloud Instance. | |
| Instance Region | Wilayah instans ApsaraDB for MongoDB sumber. | |
| Replicate Data Across Alibaba Cloud Accounts | Pilih No untuk menggunakan instans di akun saat ini. | |
| Architecture | Pilih Replica Set. Jika sumber adalah Sharded Cluster, tentukan juga Shard account dan Shard password. | |
| Migration Method | Pilih Oplog (disarankan) untuk latensi lebih rendah. Pilih ChangeStream jika oplog tidak tersedia. Lihat catatan di bawah untuk batasannya. | |
| Instance ID | ID instans ApsaraDB for MongoDB sumber. | |
| Authentication Database | Database autentikasi yang menyimpan kredensial akun. Default-nya adalah admin. | |
| Database Account | Akun dengan izin baca yang diperlukan. | |
| Database Password | Password untuk akun database. | |
| Encryption | Pilih Non-encrypted, SSL-encrypted, atau Mongo Atlas SSL. Opsi yang tersedia bergantung pada nilai Access Method dan Architecture. Konsol DTS menampilkan opsi yang berlaku. Jika database sumber adalah database MongoDB yang dikelola sendiri dengan arsitektur Replica Set, Access Method-nya bukan Alibaba Cloud Instance, dan Encryption-nya SSL-encrypted, Anda dapat mengunggah sertifikat otoritas sertifikasi (CA) untuk memverifikasi koneksi ke database sumber. | |
| Destination Database | Select Existing Connection | Pilih instans terdaftar atau konfigurasikan parameter koneksi secara manual. |
| Database Type | Pilih MySQL. | |
| Access Method | Pilih Alibaba Cloud Instance. | |
| Instance Region | Wilayah instans ApsaraDB RDS for MySQL tujuan. | |
| Replicate Data Across Alibaba Cloud Accounts | Pilih No untuk menggunakan instans di akun saat ini. | |
| RDS Instance ID | ID instans ApsaraDB RDS for MySQL tujuan. | |
| Database Account | Akun dengan izin baca dan tulis yang diperlukan. | |
| Database Password | Password untuk akun database. | |
| Encryption | Pilih Non-encrypted atau SSL-encrypted. Untuk menggunakan enkripsi SSL, aktifkan SSL terlebih dahulu pada instans RDS tujuan. Lihat Gunakan sertifikat cloud untuk mengaktifkan enkripsi SSL. |
Metode Migrasi kendala:
Oplog adalah opsi default dan disarankan untuk semua instans ApsaraDB for MongoDB yang memiliki oplog diaktifkan. Ini memberikan latensi sinkronisasi lebih rendah karena proses pulling log lebih cepat.
ChangeStream memerlukan MongoDB V4.0 atau lebih baru.
Jika sumber adalah kluster Amazon DocumentDB non-elastis, Anda harus mengaktifkan change streams untuk database tersebut, dan atur Migration Method ke ChangeStream serta Architecture ke Sharded Cluster.
Jika Anda memilih Sharded Cluster untuk parameter Architecture dan mengatur Migration Method ke ChangeStream, Anda tidak perlu mengonfigurasi parameter Shard account dan Shard password.
Jika Architecture adalah Sharded Cluster dan Migration Method adalah Oplog, opsi SSL-encrypted untuk Encryption tidak tersedia.
Klik Test Connectivity and Proceed.
DTS harus dapat mengakses database sumber dan tujuan. Tambahkan blok CIDR server DTS ke pengaturan keamanan masing-masing database. Lihat Tambahkan blok CIDR server DTS. Untuk database yang dikelola sendiri, klik Test Connectivity di kotak dialog CIDR Blocks of DTS Servers.
Langkah 3: Pilih objek dan konfigurasikan pemetaan field
Pada langkah Configure Objects, atur opsi berikut.
| Konfigurasi | Deskripsi |
|---|---|
| Synchronization Types | Incremental Data Synchronization dipilih secara default. Pilih Full Data Synchronization untuk menyinkronkan data historis sebelum memulai sinkronisasi inkremental. Schema Synchronization tidak tersedia. |
| Processing Mode of Conflicting Tables | Precheck and Report Errors: pemeriksaan awal gagal jika instans tujuan memiliki tabel dengan nama yang sama seperti sumber. Gunakan pemetaan nama objek untuk mengganti nama tabel jika diperlukan. Lihat Map object names. Ignore Errors and Proceed: melewati pemeriksaan konflik nama. Selama sinkronisasi penuh, catatan yang bertentangan di tujuan tetap dipertahankan; selama sinkronisasi inkremental, catatan tersebut ditimpa. Gunakan opsi ini dengan hati-hati. |
| Capitalization of Object Names in Destination Instance | Mengontrol kapitalisasi nama database, tabel, dan kolom di instans tujuan. Nilai default-nya adalah DTS default policy. Lihat Specify the capitalization of object names in the destination instance. |
| Source Objects | Pilih satu atau beberapa COLLECTIONS dari Source Objects, lalu klik |
Di Selected Objects, petakan koleksi MongoDB ke tabel MySQL. a. Ganti nama database tujuan: b. Ganti nama tabel tujuan: c. Konfigurasikan pemetaan field: DTS membuat ekspresi
bson_value()secara otomatis untuk setiap field dalam koleksi. Verifikasi bahwa pemetaan sudah benar, lalu atur Column Name, Type, Length, dan Precision untuk setiap kolom.Untuk melihat nama field MongoDB dalam ekspresi: string dalam
""adalah nama field tersebut. Contohnya,bson_value("age")memetakan fieldage.Untuk menghapus field yang tidak perlu disinkronkan: klik
di ujung baris tersebut.Untuk menambahkan field yang memerlukan ekspresi kustom:
Klik
di ujung baris apa pun, lalu klik + Add Column. 
Atur Column Name, Type, Length, dan Precision.
Masukkan ekspresi
bson_value()di Assign Value. Lihat bagian Contoh pemetaan field sebagai referensi.Ulangi untuk setiap kolom tambahan.
Klik kanan koleksi di Selected Objects.

Ubah Table Name menjadi nama tabel target di instans MySQL tujuan.

(Opsional) Tentukan kondisi filter untuk menyinkronkan hanya subset data. Lihat Tentukan kondisi filter.

(Opsional) Di Select DDL and DML Operations to Be Synchronized, pilih operasi yang akan disinkronkan selama sinkronisasi data inkremental.

PentingTetapkan
bson_value("_id")ke kolom kunci primer. Untuk field nested, tentukan path lengkap menggunakan argumen yang dipisahkan koma dalambson_value(). Misalnya, gunakanbson_value("person","name")— bukanbson_value("person")— untuk memetakan subfieldname. Menggunakan hanya field induk menyebabkan kehilangan data inkremental untuk semua subfield.Klik OK, lalu klik Next: Advanced Settings.
Langkah 4: Konfigurasikan pengaturan lanjutan
| Konfigurasi | Deskripsi |
|---|---|
| Dedicated Cluster for Task Scheduling | DTS menggunakan klaster bersama secara default. Beli klaster khusus untuk stabilitas lebih tinggi. Lihat Apa itu klaster khusus DTS. |
| Retry Time for Failed Connections | Durasi DTS mencoba kembali setelah kegagalan koneksi. Rentang valid: 10–1.440 menit. Default: 720. Kami menyarankan mengatur nilai ini lebih dari 30. Jika beberapa tugas berbagi sumber atau tujuan yang sama, waktu retry terpendek yang berlaku. |
| Retry Time for Other Issues | Durasi DTS mencoba kembali setelah kegagalan DDL atau DML. Rentang valid: 1–1.440 menit. Default: 10. Kami menyarankan mengatur nilai ini lebih dari 10. Nilai ini harus lebih kecil daripada Retry Time for Failed Connections. |
| Enable Throttling for Full Data Synchronization | Batasi kecepatan baca/tulis DTS selama sinkronisasi penuh untuk mengurangi beban pada server sumber dan tujuan. Konfigurasikan Queries per second (QPS) to the source database, RPS of Full Data Migration, dan Data migration speed for full migration (MB/s). Tersedia hanya jika Full Data Synchronization dipilih. |
| Only one data type for primary key _id in a table of the data to be synchronized | Tersedia hanya jika Full Data Synchronization dipilih. Pilih Yes jika semua nilai _id dalam koleksi memiliki tipe data yang sama (melewati pemindaian tipe). Pilih No untuk memindai tipe campuran. |
| Enable Throttling for Incremental Data Synchronization | Batasi kecepatan DTS selama sinkronisasi inkremental. Konfigurasikan RPS of Incremental Data Synchronization dan Data synchronization speed for incremental synchronization (MB/s). |
| Environment Tag | Tag untuk mengidentifikasi instans DTS ini. Opsional. |
| Configure ETL | Pilih Yes untuk menerapkan transformasi ekstrak, transformasi, muat (ETL). Masukkan pernyataan pemrosesan di editor kode. Lihat Konfigurasikan ETL dalam tugas migrasi data atau sinkronisasi data. |
| Monitoring and Alerting | Pilih Yes untuk mengirim notifikasi ketika tugas gagal atau latensi melebihi ambang batas. Konfigurasikan ambang batas peringatan dan kontak notifikasi. Lihat Konfigurasikan pemantauan dan peringatan saat membuat tugas DTS. |
Langkah 5: Jalankan pemeriksaan awal
Klik Next: Save Task Settings and Precheck.
Untuk melihat pratinjau parameter API untuk konfigurasi tugas ini, arahkan kursor ke Next: Save Task Settings and Precheck lalu klik Preview OpenAPI parameters.
DTS menjalankan pemeriksaan awal sebelum memulai sinkronisasi. Jika ada item yang gagal:
Klik View Details di sebelah item yang gagal.
Selesaikan masalah berdasarkan hasil pemeriksaan.
Klik Precheck Again.
Jika suatu item memicu peringatan yang dapat Anda abaikan:
Klik Confirm Alert Details, lalu klik Ignore di kotak dialog View Details.
Klik OK, lalu klik Precheck Again.
Mengabaikan item peringatan dapat menyebabkan ketidakkonsistenan data. Lanjutkan dengan hati-hati.
Langkah 6: Beli dan mulai instans
Tunggu hingga Success Rate mencapai 100%, lalu klik Next: Purchase Instance.
Di halaman pembelian, konfigurasikan parameter berikut.
| Parameter | Deskripsi |
|---|---|
| Billing Method | Subscription: bayar di muka untuk periode tetap (1–9 bulan, atau 1, 2, 3, atau 5 tahun). Lebih hemat biaya untuk penggunaan jangka panjang. Pay-as-you-go: ditagih per jam. Cocok untuk penggunaan jangka pendek. |
| Resource Group Settings | Kelompok sumber daya untuk instans ini. Default: default resource group. Lihat Apa itu Resource Management? |
| Instance Class | Kelas throughput sinkronisasi. Lihat Kelas instans untuk instansi sinkronisasi data. |
Baca dan pilih Data Transmission Service (Pay-as-you-go) Service Terms.
Klik Buy and Start, lalu klik OK di kotak dialog konfirmasi.
Tugas muncul di daftar tugas. Lacak perkembangannya di sana.
Pemetaan tipe data
DTS memetakan tipe BSON MongoDB ke tipe MySQL sebagai berikut.
| Tipe data MongoDB | Tipe data MySQL |
|---|---|
| ObjectId | VARCHAR |
| String | VARCHAR |
| Document | VARCHAR |
| DbPointer | VARCHAR |
| Array | VARCHAR |
| Date | DATETIME |
| TimeStamp | DATETIME |
| Double | DOUBLE |
| 32-bit integer (BsonInt32) | INTEGER |
| 64-bit integer (BsonInt64) | BIGINT |
| Decimal128 | DECIMAL |
| Boolean | BOOLEAN |
| Null | VARCHAR |
Contoh pemetaan field
Contoh ini menunjukkan cara memetakan dokumen MongoDB nested ke tabel MySQL flat.
Struktur dokumen MongoDB sumber
{
"_id": "62cd344c85c1ea6a2a9f****",
"person": {
"name": "neo",
"age": 26,
"sex": "male"
}
}Skema tabel MySQL tujuan
| Nama kolom | Tipe | Catatan |
|---|---|---|
| mongo_id | varchar | Kolom kunci primer |
| person_name | varchar | |
| person_age | decimal |
Konfigurasi penugasan field
Semua contoh menggunakan bson_value() untuk mengekstrak field individual dari objek nested person.
| Nama kolom | Tipe | Assign Value |
|---|---|---|
| mongo_id | STRING | bson_value("_id") |
| person_name | STRING | bson_value("person","name") |
| person_age | DECIMAL | bson_value("person","age") |
Tentukan path field lengkap menggunakan argumen yang dipisahkan koma. bson_value("person","name") mengekstrak subfield name. Menggunakan hanya bson_value("person") menyebabkan DTS gagal menulis pembaruan inkremental untuk name, age, dan subfield lain dari person.
Langkah selanjutnya
Pantau tugas sinkronisasi di daftar tugas konsol DTS.
Sebelum memindahkan beban kerja ke database tujuan, verifikasi konsistensi data dan hentikan atau lepas tugas yang gagal dalam 7 hari terakhir.
Untuk mencegah DTS menimpa data tujuan jika tugas yang gagal dilanjutkan, gunakan
REVOKEuntuk mencabut akses tulis DTS pada database tujuan.Jika tugas DTS gagal, dukungan teknis DTS berusaha memulihkannya dalam waktu 8 jam. Tugas dapat dimulai ulang dan parameter tugas (bukan parameter database) dapat dimodifikasi selama pemulihan. Parameter yang mungkin berubah dijelaskan di Ubah parameter instans DTS.