Layanan Transmisi Data (DTS) memungkinkan Anda memigrasikan data dari instans ApsaraDB RDS for MySQL ke instans ApsaraMQ for Kafka—mengalirkan data historis yang sudah ada dan perubahan berkelanjutan ke topik Kafka tanpa downtime aplikasi.
Cara kerja
DTS menjalankan migrasi dalam hingga tiga fase berurutan:
Migrasi skema: DTS membaca definisi tabel dari instans MySQL sumber dan menyiapkan tujuan.
Full Data Migration: DTS menyalin semua baris yang ada dari tabel yang dipilih ke topik Kafka yang ditentukan. Operasi INSERT bersamaan selama fase ini dapat menyebabkan ruang tabel tujuan lebih besar daripada sumber.
Incremental Data Migration: Setelah migrasi data penuh selesai, DTS membaca log biner MySQL dan mengalirkan event INSERT, UPDATE, dan DELETE ke topik Kafka secara real time. Fase ini berjalan terus-menerus—tugas tidak akan berhenti otomatis—sehingga aplikasi Anda dapat terus menulis ke sumber tanpa gangguan.
DTS tidak memigrasikan kunci asing. Operasi kaskade dan penghapusan yang dipicu di sumber tidak direplikasi.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Instans ApsaraDB RDS for MySQL (sumber) dan instans ApsaraMQ for Kafka (tujuan), keduanya telah dibuat. Lihat Buat instans ApsaraDB RDS for MySQL jika Anda perlu membuat instans RDS.
Ruang penyimpanan yang tersedia di instans ApsaraMQ for Kafka tujuan yang melebihi ukuran total data sumber.
Topik yang telah dibuat di instans ApsaraMQ for Kafka tujuan untuk menerima data yang dimigrasikan. Lihat bagian "Langkah 1: Buat topik" dalam Langkah 3: Buat resource.
Kluster Kafka yang menjalankan versi 0.10.1.0 hingga 2.0.
Izin baca pada objek yang akan dimigrasikan yang diberikan kepada akun database sumber. Berikan izin yang diperlukan:
GRANT SELECT ON <database_name>.* TO '<dts_user>'@'%';
Batasan
Database sumber
| Kendala | Detail |
|---|---|
| Bandwidth | Server sumber harus memiliki bandwidth keluar yang cukup. Bandwidth rendah mengurangi kecepatan migrasi. |
| Persyaratan kunci utama | Tabel harus memiliki kendala PRIMARY KEY atau UNIQUE dengan nilai bidang unik. Tanpa itu, tujuan mungkin berisi catatan duplikat. |
| Jumlah tabel (saat mengganti nama) | Jika Anda memilih tabel sebagai objek migrasi dan mengganti nama tabel atau kolom di tujuan, satu tugas mendukung hingga 1.000 tabel. Untuk lebih dari 1.000 tabel, bagi menjadi beberapa tugas atau migrasikan seluruh database. |
| Operasi DDL selama migrasi | Jangan menjalankan pernyataan DDL yang mengubah skema database atau tabel selama migrasi skema atau migrasi data penuh. Tugas akan gagal. |
| Penulisan selama migrasi data penuh saja | Jika Anda tidak menyertakan migrasi data inkremental, jangan menulis ke sumber selama migrasi. Untuk menjamin konsistensi, pilih migrasi skema, migrasi data penuh, dan migrasi data inkremental secara bersamaan. |
| Data log biner | Perubahan data yang dihasilkan oleh pemulihan backup fisik atau operasi kaskade tidak dicatat dalam log biner dan tidak akan dimigrasikan. |
| Kolom tak terlihat MySQL 8.0.23+ | DTS tidak dapat membaca kolom tak terlihat—terjadi kehilangan data. Jalankan ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE; sebelum memulai tugas. Tabel tanpa kunci utama secara otomatis menghasilkan kunci utama tak terlihat; buat juga ini terlihat. Lihat Invisible Columns dan Generated Invisible Primary Keys. |
| Presisi FLOAT/DOUBLE | DTS menggunakan ROUND(COLUMN, PRECISION) untuk mengambil nilai. Jika Anda tidak menentukan presisi, DTS mengatur FLOAT ke 38 digit dan DOUBLE ke 308 digit. Verifikasi bahwa nilai default ini memenuhi kebutuhan Anda. |
Persyaratan log biner untuk migrasi inkremental
Sebelum mengaktifkan migrasi data inkremental, verifikasi dan konfigurasikan pengaturan MySQL berikut:
| Pengaturan | Nilai yang diperlukan | Cara memeriksa |
|---|---|---|
binlog_format | row | SHOW GLOBAL VARIABLES LIKE 'binlog_format'; |
binlog_row_image | full | SHOW GLOBAL VARIABLES LIKE 'binlog_row_image'; |
log_slave_updates | ON (hanya untuk kluster dual-primary yang dikelola sendiri) | SHOW GLOBAL VARIABLES LIKE 'log_slave_updates'; |
| Retensi log biner (RDS MySQL) | Minimal 3 hari (disarankan 7 hari) | Lihat Konfigurasikan parameter untuk penghapusan log biner otomatis |
| Retensi log biner (MySQL yang dikelola sendiri) | Minimal 7 hari | SHOW VARIABLES LIKE 'expire_logs_days'; |
Untuk instans MySQL yang dikelola sendiri, Anda dapat memperbaiki pengaturan yang tidak sesuai dengan menjalankan perintah yang sesuai:
-- Atur format log biner
SET GLOBAL binlog_format = 'ROW';
-- Atur gambar baris log biner
SET GLOBAL binlog_row_image = 'FULL';Untuk instans ApsaraDB RDS for MySQL, parameter log biner harus dimodifikasi melalui konsol RDS, bukan dengan menjalankan perintah SET GLOBAL secara langsung. Jika retensi log biner diatur di bawah minimum, DTS mungkin gagal membaca log dan tugas bisa gagal. Dalam kasus luar biasa, ketidaksesuaian atau kehilangan data dapat terjadi. Hal ini memengaruhi Perjanjian Tingkat Layanan (SLA) Anda dengan DTS.
Batasan lainnya
Anda hanya dapat memilih tabel sebagai objek yang akan dimigrasikan.
Lakukan migrasi selama jam sepi untuk mengurangi beban pada server sumber dan tujuan.
Sebelum mengalihkan beban kerja produksi ke tujuan, hentikan atau rilis tugas DTS apa pun yang gagal dalam 7 hari terakhir. DTS mencoba melanjutkan tugas yang gagal secara otomatis, yang dapat menimpa data di tujuan. Sebagai alternatif, cabut izin tulis dari akun DTS di tujuan.
Jika data dari sumber lain ditulis ke tujuan selama migrasi, akan terjadi ketidaksesuaian data.
Jika kluster Kafka tujuan ditingkatkan atau diturunkan spesifikasinya selama migrasi, restart tugas migrasi.
Jika Enkripsi Data Transparan (TDE) diaktifkan pada instans RDS MySQL sumber, migrasi skema, migrasi data penuh, dan migrasi data inkremental semuanya didukung. Jika fitur EncDB diaktifkan sebagai gantinya, migrasi data penuh tidak didukung.
Jika tugas DTS gagal, dukungan teknis DTS akan mencoba memulihkannya dalam waktu 8 jam. Selama pemulihan, tugas mungkin di-restart dan parameter tingkat tugas mungkin dimodifikasi. Parameter database tidak diubah.
Kasus khusus
MySQL yang dikelola sendiri:
Jika terjadi alih bencana primer/sekunder saat tugas sedang berjalan, tugas akan gagal.
Latensi migrasi mungkin tampak tidak akurat jika tidak ada operasi DML yang dijalankan di sumber dalam waktu lama. Jalankan operasi DML apa pun di sumber untuk memperbarui latensi. Jika Anda memigrasikan seluruh database, buat tabel heartbeat yang menerima pembaruan setiap detik.
DTS secara berkala menjalankan
CREATE DATABASE IF NOT EXISTS \test\`` di sumber untuk memajukan posisi log biner.
ApsaraDB RDS for MySQL:
Instans RDS MySQL V5.6 read-only (yang tidak mencatat log transaksi) tidak dapat digunakan sebagai sumber untuk migrasi data inkremental.
DTS secara berkala menjalankan
CREATE DATABASE IF NOT EXISTS \test\`` di sumber untuk memajukan posisi log biner.
Penagihan
| Jenis migrasi | Biaya konfigurasi tugas | Biaya lalu lintas Internet |
|---|---|---|
| Migrasi skema + migrasi data penuh | Gratis | Dikenakan biaya hanya jika data melewati Alibaba Cloud melalui Internet. Lihat Ikhtisar penagihan. |
| Migrasi data inkremental | Dikenakan biaya. Lihat Ikhtisar penagihan. | Sama seperti di atas. |
Operasi SQL yang didukung untuk migrasi inkremental
| Jenis operasi | Pernyataan SQL |
|---|---|
| DML | INSERT, UPDATE, DELETE |
| DDL | CREATE TABLE, ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE |
| CREATE VIEW, ALTER VIEW, DROP VIEW | |
| CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE | |
| CREATE FUNCTION, DROP FUNCTION, CREATE TRIGGER, DROP TRIGGER | |
| CREATE INDEX, DROP INDEX |
Format pesan Kafka
DTS menulis catatan ke Kafka dalam salah satu dari dua format. Pilih format yang sesuai dengan implementasi konsumen Anda.
DTS Avro
Catatan mengikuti definisi skema DTS Avro. Lihat skema di GitHub.
Canal JSON
Catatan ditulis dalam format Canal JSON. Contoh berikut menunjukkan event INSERT khas:
{
"data": [
{
"id": "1",
"name": "example_value",
"updated_at": "2026-01-01 00:00:00"
}
],
"database": "example_db",
"es": 1735689600000,
"id": 1,
"isDdl": false,
"mysqlType": {
"id": "int(11)",
"name": "varchar(255)",
"updated_at": "datetime"
},
"old": null,
"pkNames": ["id"],
"sql": "",
"sqlType": {
"id": 4,
"name": 12,
"updated_at": 93
},
"table": "example_table",
"ts": 1735689600123,
"type": "INSERT"
}Untuk event UPDATE, bidang old berisi nilai pra-gambar (nilai kolom sebelum perubahan).
Untuk detail parameter lengkap dan contoh kode konsumen, lihat Format data Canal JSON.
Buat tugas migrasi
Langkah 1: Buka halaman Migrasi Data
Gunakan salah satu konsol berikut:
Konsol DTS
Masuk ke Konsol DTS.Konsol DTS
Di panel navigasi kiri, klik Data Migration.
Di pojok kiri atas, pilih wilayah tempat instans migrasi akan berada.
Konsol DMS
Masuk 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 akan berada.
Langkah 2: Konfigurasikan database sumber dan tujuan
Klik Create Task.
PeringatanSetelah mengonfigurasi sumber dan tujuan, baca Limits yang ditampilkan di bagian atas halaman sebelum melanjutkan. Melewatkan langkah ini dapat menyebabkan tugas gagal atau ketidaksesuaian data.
Konfigurasikan parameter dalam tabel berikut.
Source Database
| Parameter | Deskripsi |
|---|---|
| Task Name | Nama untuk tugas DTS. DTS menghasilkan nama default. Gunakan nama deskriptif agar tugas mudah diidentifikasi — keunikan tidak diperlukan. |
| Select Existing Connection | Jika instans sumber sudah terdaftar di DTS, pilih dari daftar — DTS mengisi parameter yang tersisa secara otomatis. Jika tidak, konfigurasikan parameter di bawah. |
| Database Type | Pilih MySQL. |
| Connection Type | Pilih Alibaba Cloud Instance. |
| Instance Region | Wilayah tempat instans ApsaraDB RDS for MySQL sumber berada. |
| Cross-account | Pilih No untuk migrasi dalam akun yang sama. |
| RDS Instance ID | ID instans ApsaraDB RDS for MySQL sumber. |
| Database Account | Akun database dengan izin baca pada objek yang akan dimigrasikan. |
| Database Password | Kata sandi untuk akun database. |
| Encryption | Pilih Non-encrypted atau SSL-encrypted. Untuk menggunakan SSL, aktifkan terlebih dahulu enkripsi SSL pada instans RDS. Lihat Gunakan sertifikat cloud untuk mengaktifkan enkripsi SSL. |
Destination Database
| Parameter | Deskripsi |
|---|---|
| Select Existing Connection | Jika instans tujuan sudah terdaftar di DTS, pilih dari daftar. Jika tidak, konfigurasikan parameter di bawah. |
| Database Type | Pilih Kafka. |
| Connection Type | Pilih Alibaba Cloud Instance. |
| Instance Region | Wilayah tempat instans ApsaraMQ for Kafka tujuan berada. |
| Kafka Instance ID | ID instans ApsaraMQ for Kafka tujuan. |
| Encryption | Pilih Non-encrypted atau SCRAM-SHA-256 berdasarkan kebutuhan keamanan Anda. |
| Topic | Topik yang menerima data yang dimigrasikan. Pilih dari daftar drop-down. |
| Topic That Stores DDL Information | Topik yang menyimpan data event DDL. Jika dibiarkan kosong, informasi DDL ditulis ke topik yang ditentukan di Topic. |
| Use Kafka Schema Registry | Apakah akan menggunakan Kafka Schema Registry untuk manajemen skema. Pilih No atau Yespengaturan pemberitahuan peringatan. Jika Yes, masukkan URL atau alamat IP yang terdaftar di Kafka Schema Registry untuk skema Avro Anda. |
Klik Test Connectivity and Proceed.
DTS harus dapat mengakses sumber dan tujuan. Tambahkan blok CIDR server DTS ke pengaturan keamanan kedua database. Lihat Tambahkan blok CIDR server DTS. Jika sumber atau tujuan adalah database yang dikelola sendiri dengan metode akses selain Alibaba Cloud Instance, klik Test Connectivity di kotak dialog CIDR Blocks of DTS Servers.
Langkah 3: Pilih objek migrasi dan konfigurasikan pengaturan
Di halaman Configure Objects, atur parameter berikut.
| Parameter | Deskripsi |
|---|---|
| Migration Types | Pilih jenis migrasi berdasarkan kebutuhan Anda: <br>- Hanya migrasi skema + migrasi data penuh: pilih Schema Migration dan Full Data Migration. <br>- Migrasi tanpa downtime dengan replikasi berkelanjutan: pilih Schema Migration, Full Data Migration, dan Incremental Data Migration. <br><br> Catatan Migrasi skema tidak didukung ketika tujuan adalah instans ApsaraMQ for Kafka. Jika Anda tidak memilih migrasi data inkremental, jangan menulis ke sumber selama migrasi. |
| Processing Mode for Existing Destination Tables | - Precheck and Report Errors: gagal dalam pemeriksaan awal jika tujuan sudah memiliki tabel dengan nama yang sama dengan sumber. Gunakan pemetaan nama objek untuk menyelesaikan konflik penamaan. <br>- Ignore Errors and Proceed: melewati pemeriksaan konflik nama. Selama migrasi data penuh, catatan yang bertentangan di tujuan dipertahankan. Selama migrasi data inkremental, catatan tersebut ditimpa. Gunakan dengan hati-hati. |
| Data Format in Kafka | Format penulisan catatan ke Kafka: <br>- DTS Avro: catatan mengikuti skema DTS Avro. Lihat definisi skema di GitHub. <br>- Canal JSON: catatan ditulis dalam format Canal JSON. Lihat Format data Canal JSON untuk detail parameter dan contoh kode. |
| Kafka Data Compression Format | Algoritma kompresi untuk pesan Kafka: <br>- LZ4 (default): rasio kompresi rendah dan kecepatan kompresi tinggi. <br>- GZIP: rasio kompresi tinggi dan kecepatan kompresi rendah. GZIP mengonsumsi banyak sumber daya CPU. <br>- Snappy: rasio kompresi menengah dan kecepatan kompresi menengah. |
| Policy for Shipping Data to Kafka Partitions | Cara DTS mengarahkan catatan ke partisi Kafka. Lihat Tentukan kebijakan untuk memigrasikan data ke partisi Kafka. |
| Message acknowledgement mechanism | Kebijakan konfirmasi yang digunakan DTS saat menulis ke Kafka. Lihat Mekanisme konfirmasi pesan. |
| Capitalization of Object Names in Destination Instance | Kebijakan huruf besar/kecil untuk nama database, tabel, dan kolom di tujuan. Default adalah DTS default policy. Lihat Tentukan kapitalisasi nama objek. |
| Source Objects | Pilih satu atau beberapa tabel dari Source Objects dan klik ikon panah untuk memindahkannya ke Selected Objects. Hanya tabel yang dapat dipilih. |
| Selected Objects | Untuk mengarahkan tabel sumber ke topik tertentu, mengonfigurasi partisi, atau menetapkan kunci partisi, gunakan fitur pemetaan nama objek. Lihat Gunakan fitur pemetaan nama objek. Untuk memigrasikan operasi DML atau DDL tertentu pada objek, klik kanan objek di Selected Objects dan pilih operasi yang akan disertakan. |
Klik Next: Advanced Settings.
| Parameter | Deskripsi |
|---|---|
| Dedicated Cluster for Task Scheduling | Secara default, DTS menjadwalkan tugas pada kluster bersama. Untuk stabilitas lebih tinggi, beli kluster khusus. Lihat Apa itu kluster khusus DTS. |
| Retry Time for Failed Connections | Berapa lama DTS mencoba lagi setelah kegagalan koneksi. Nilai valid: 10–1.440 menit. Default: 720. Atur minimal 30. Jika DTS terhubung kembali dalam jendela ini, tugas dilanjutkan. Jika tidak, tugas gagal. <br><br> Catatan Saat beberapa tugas berbagi sumber atau tujuan yang sama, waktu coba ulang yang paling baru diatur berlaku. Anda dikenai biaya selama percobaan ulang. |
| Retry Time for Other Issues | Berapa lama DTS mencoba lagi setelah kegagalan operasi DDL atau DML. Nilai valid: 1–1.440 menit. Default: 10. Atur minimal 10. Nilai ini harus kurang dari Retry Time for Failed Connections. |
| Enable Throttling for Full Data Migration | Membatasi throughput baca/tulis selama migrasi data penuh untuk mengurangi beban pada sumber. 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 Migration dipilih. |
| Enable Throttling for Incremental Data Migration | Membatasi throughput selama migrasi data inkremental. Konfigurasikan RPS of Incremental Data Migration dan Data migration speed for incremental migration (MB/s). Tersedia hanya jika Incremental Data Migration dipilih. |
| Whether to delete SQL operations on heartbeat tables of forward and reverse tasks | Mengontrol apakah DTS menulis SQL heartbeat ke sumber: <br>- Yes: DTS tidak menulis SQL heartbeat. Latensi migrasi mungkin tampak meningkat di konsol. <br>- No: DTS menulis SQL heartbeat. Operasi backup fisik dan kloning di sumber mungkin terpengaruh. |
| Environment Tag | Tag opsional untuk mengkategorikan instans DTS berdasarkan lingkungan (misalnya, produksi atau uji coba). |
| Configure ETL | Apakah akan menerapkan transformasi ekstrak, transformasi, dan muat (ETL). Pilih Yes untuk menulis pernyataan pemrosesan data di editor kode. Lihat Konfigurasikan ETL dalam tugas migrasi atau sinkronisasi data. |
| Monitoring and Alerting | Apakah akan mengonfigurasi peringatan untuk kegagalan tugas atau latensi migrasi tinggi. Pilih Yes dan konfigurasikan ambang batas peringatan serta kontak notifikasi. Lihat Konfigurasikan pemantauan dan peringatan. |
Langkah 4: Jalankan pemeriksaan awal
Untuk melihat pratinjau parameter API untuk tugas ini, arahkan kursor ke Next: Save Task Settings and Precheck dan klik Preview OpenAPI parameters.
Klik Next: Save Task Settings and Precheck. DTS menjalankan pemeriksaan awal otomatis sebelum memulai tugas. Jika ada item yang gagal:
Klik View Details di sebelah item yang gagal, perbaiki masalahnya, lalu klik Precheck Again.
Jika item peringatan tidak kritis dan dapat diabaikan, klik Confirm Alert Details > Ignore > OK, lalu klik Precheck Again. Mengabaikan peringatan dapat menyebabkan ketidaksesuaian data.
Langkah 5: Beli instans dan mulai tugas
Tunggu hingga Success Rate mencapai 100%, lalu klik Next: Purchase Instance.
Di halaman Purchase Instance, konfigurasikan hal berikut:
| Bagian | Parameter | Deskripsi |
|---|---|---|
| New Instance Class | Resource Group | Kelompok sumber daya untuk instans migrasi. Default: default resource group. Lihat Apa itu Manajemen Resource? |
| Instance Class | Kelas instans menentukan throughput migrasi. Lihat Kelas instans untuk instans migrasi data. |
Baca dan terima Data Transmission Service (Pay-as-you-go) Service Terms dengan memilih kotak centang.
Klik Buy and Start, lalu klik OK di dialog konfirmasi.
Verifikasi tugas
Di halaman Data Migration, periksa status tugas:
Completed: tugas hanya mencakup migrasi skema dan migrasi data penuh. Tidak ada migrasi inkremental yang berjalan.
Running: tugas mencakup migrasi data inkremental. Tugas berjalan terus-menerus dan tidak berhenti otomatis.
Gunakan fitur pemetaan nama objek
Gunakan fitur ini untuk mengarahkan data tabel sumber ke topik Kafka tertentu, mengontrol jumlah partisi, atau menetapkan kunci partisi untuk pengarahan berbasis hash.
Di bagian Selected Objects, arahkan kursor ke nama tabel.
Klik kanan dan pilih Edit.
Di kotak dialog, konfigurasikan parameter berikut.
| Parameter | Deskripsi |
|---|---|
| Table Name | Nama topik Kafka yang menerima data dari tabel sumber ini. Default mengikuti topik yang ditentukan di pengaturan Destination Database. <br><br> Penting Saat tujuan adalah ApsaraMQ for Kafka, topik harus sudah ada di instans. Untuk kluster Kafka yang dikelola sendiri dengan migrasi skema disertakan, DTS membuat topik secara otomatis. Mengubah nilai ini mengarahkan data tabel ke topik yang ditentukan. |
| Filter Conditions | Kondisi filter SQL untuk memigrasikan baris secara selektif. Lihat Tentukan kondisi filter. |
| Number of Partitions | Jumlah partisi di topik target. |
| Partition Key | Satu atau beberapa kolom yang digunakan untuk menghitung nilai hash untuk pengarahan partisi. Tersedia hanya jika Policy for Shipping Data to Kafka Partitions diatur ke Ship Data to Separate Partitions Based on Hash Values of Primary Keys. Kosongkan Synchronize All Tables sebelum memilih kolom kunci partisi. |
Klik OK.
Jika Anda mengganti nama objek menggunakan pemetaan nama objek, objek lain yang bergantung padanya mungkin gagal dimigrasikan.