Gunakan Data Transmission Service (DTS) untuk menyinkronkan data secara berkelanjutan dari instans ApsaraDB RDS for MySQL ke proyek MaxCompute. DTS mengelola seluruh alur—replikasi skema, pemuatan data historis, dan penangkapan perubahan data berkelanjutan—sehingga Anda dapat membangun sistem analitik real-time tanpa perlu mengelola alur tersebut secara manual.
Apa yang akan Anda lakukan
Siapkan prasyarat (proyek MaxCompute, daftar putih alamat IP, AccessKey).
Konfigurasikan koneksi sumber dan tujuan di DTS.
Pilih objek dan atur opsi sinkronisasi.
Jalankan pemeriksaan awal, lalu beli dan mulai instans.
Penagihan
| Jenis sinkronisasi | Biaya |
|---|---|
| Sinkronisasi skema dan sinkronisasi data penuh | Gratis |
| Sinkronisasi data inkremental | Dikenai biaya. Lihat Ikhtisar penagihan. |
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
Proyek MaxCompute. Lihat Aktifkan MaxCompute dan DataWorks dan Buat proyek MaxCompute.
Daftar putih alamat IP yang dikonfigurasi pada proyek MaxCompute untuk mengizinkan akses dari DTS. Lihat Konfigurasikan daftar putih alamat IP untuk mengizinkan akses dari layanan Alibaba Cloud ke MaxCompute.
Pasangan Kunci Akses untuk akun Alibaba Cloud yang memiliki proyek MaxCompute. Lihat Membuat Pasangan Kunci Akses.
Alih-alih menggunakan AccessKey akun root, Anda dapat membuat RAM user dan menetapkannya sebagai super administrator untuk proyek MaxCompute.
Cara kerja
DTS menyinkronkan data dalam tiga tahap berurutan:
Sinkronisasi skema — DTS mereplikasi skema tabel dari database sumber ke MaxCompute dengan menambahkan
_baseke setiap nama tabel. Misalnya, tabel sumbercustomermenjadicustomer_basedi MaxCompute.Sinkronisasi data penuh — DTS memuat semua data historis dari sumber ke tabel
_base(disebut *tabel garis dasar penuh*). Snapshot ini menjadi titik awal untuk sinkronisasi inkremental.Sinkronisasi data inkremental — DTS membuat tabel
_logyang sesuai untuk setiap tabel yang disinkronkan (misalnya,customer_log) dan terus-menerus menulis event perubahan dari log biner sumber ke dalamnya.
Untuk skema tabel _log, lihat Skema tabel data inkremental.
Operasi SQL yang didukung untuk sinkronisasi inkremental
| Jenis operasi | Pernyataan |
|---|---|
| DML | INSERT, UPDATE, DELETE |
| DDL | ADD COLUMN (ADD COLUMN dengan kolom atribut tidak didukung) |
DTS tidak menyinkronkan kunci asing. Operasi cascade dan delete pada sumber tidak tercermin di tujuan.
Izin yang diperlukan
Akun database untuk instans sumber ApsaraDB RDS for MySQL harus memiliki izin baca dan tulis. Lihat Buat akun dan Ubah izin akun.
Jika akun tersebut tidak dibuat di konsol ApsaraDB RDS for MySQL, berikan izin: REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, dan SELECT.
Batasan
Persyaratan database sumber
Tabel harus memiliki PRIMARY KEY atau kendala UNIK dengan semua bidang unik. Tanpa ini, tujuan mungkin berisi catatan duplikat.
Saat menyinkronkan tabel dengan penggantian nama kolom atau tabel, satu tugas mendukung hingga 1.000 tabel. Jika Anda menjalankan tugas untuk menyinkronkan lebih dari 1.000 tabel, terjadi error permintaan. Gunakan beberapa tugas atau sinkronkan di tingkat database saja.
Jangan menjalankan pernyataan DDL selama sinkronisasi skema atau sinkronisasi data penuh. Melakukannya menyebabkan tugas gagal.
Data yang dihasilkan oleh operasi cascade atau pemulihan backup fisik tidak disinkronkan.
Jika sumber menjalankan MySQL 8.0.23 atau lebih baru dan tabel berisi kolom tak terlihat, kolom tersebut dikecualikan dan terjadi kehilangan data. Jalankan
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;untuk membuatnya terlihat sebelum memulai tugas. Tabel tanpa primary key secara otomatis menerima primary key tak terlihat—buat juga yang ini terlihat. Lihat Invisible Columns dan Generated Invisible Primary Keys.
Persyaratan log biner
Konfigurasikan parameter MySQL berikut sebelum membuat tugas:
| Parameter | Nilai yang diperlukan | Berlaku untuk |
|---|---|---|
binlog_row_image | full | ApsaraDB RDS for MySQL dan MySQL yang dikelola sendiri |
binlog_format | row | Hanya MySQL yang dikelola sendiri |
log_slave_updates | ON | MySQL yang dikelola sendiri dalam klaster dual-primary |
Persyaratan periode retensi log biner:
ApsaraDB RDS for MySQL: simpan log biner minimal 3 hari; disarankan 7 hari.
MySQL yang dikelola sendiri: simpan log biner minimal 7 hari.
Jika log biner dipurge sebelum DTS membacanya, tugas gagal dan ketidakkonsistenan atau kehilangan data mungkin terjadi. Lihat Hapus file log biner untuk cara mengatur periode retensi.
Untuk MySQL yang dikelola sendiri, Anda juga harus mengaktifkan binary logging secara eksplisit. Untuk MySQL yang dikelola sendiri dalam klaster dual-primary, mengatur log_slave_updates ke ON memastikan DTS dapat membaca semua log biner. Lihat Buat akun untuk database MySQL yang dikelola sendiri dan konfigurasikan binary logging.
Batasan lainnya
Lakukan sinkronisasi selama jam sepi. Sinkronisasi data penuh menggunakan resource baca dan tulis di sumber dan tujuan, yang meningkatkan beban server.
Setelah sinkronisasi data penuh selesai, ruang tabel tujuan lebih besar daripada sumber karena fragmentasi dari operasi INSERT bersamaan.
Jangan menjalankan
pt-online-schema-changeatau alat DDL online serupa pada objek yang disinkronkan saat tugas sedang berjalan. Tugas akan gagal.Menulis data dari sumber lain ke tujuan selama sinkronisasi dapat menyebabkan ketidakkonsistenan data.
Jika sumber memiliki EncDB diaktifkan, sinkronisasi data penuh tidak didukung. Enkripsi Data Transparan (TDE) tidak memiliki batasan ini—instans TDE mendukung sinkronisasi skema, penuh, dan inkremental.
Jika tugas DTS gagal, dukungan teknis DTS berupaya memulihkannya dalam waktu 8 jam. Selama periode ini, tugas mungkin dimulai ulang dan parameter tugas (bukan parameter database) mungkin dimodifikasi.
Kasus khusus untuk MySQL yang dikelola sendiri
Alih bencana primary/secondary saat tugas sedang berjalan menyebabkan tugas gagal.
Latensi sinkronisasi dihitung dari timestamp data tersinkronisasi terbaru di tujuan dibandingkan dengan timestamp sumber saat ini. Jika tidak ada operasi DML yang dijalankan di sumber dalam periode panjang, latensi yang ditampilkan mungkin tidak akurat. Untuk memperbaruinya, jalankan operasi DML apa pun di sumber. Jika Anda menyinkronkan seluruh database, buat tabel heartbeat yang menerima pembaruan setiap detik.
DTS secara berkala mengeksekusi
CREATE DATABASE IF NOT EXISTS 'test'di sumber untuk memajukan posisi log biner.
Kasus khusus untuk ApsaraDB RDS for MySQL
Instans ApsaraDB RDS for MySQL 5.6 read-only yang tidak mencatat log transaksi tidak dapat digunakan sebagai sumber.
DTS secara berkala mengeksekusi
CREATE DATABASE IF NOT EXISTS 'test'di sumber untuk memajukan posisi log biner.
Buat tugas sinkronisasi data
Langkah 1: Buka halaman Sinkronisasi Data
Gunakan salah satu konsol berikut untuk membuka halaman konfigurasi tugas.
Konsol DTS
Masuk ke Konsol DTS.
Di panel navigasi kiri, klik Data Synchronization.
Di pojok kiri atas, pilih wilayah tempat instans sinkronisasi akan berada.
Konsol DMS
Jalur navigasi tepatnya bergantung pada mode dan tata letak konsol DMS Anda. Lihat Simple mode dan Sesuaikan tata letak dan gaya konsol DMS.
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.
Langkah 2: Konfigurasikan database sumber dan tujuan
Klik Create Task, lalu konfigurasikan parameter berikut.
| Bagian | Parameter | Deskripsi |
|---|---|---|
| N/A | Task Name | Nama tugas. DTS menghasilkan nama secara otomatis. Tentukan nama deskriptif untuk memudahkan identifikasi—tidak perlu unik. |
| Source Database | Select Existing Connection | Pilih instans database terdaftar untuk mengisi parameter secara otomatis, atau konfigurasikan koneksi secara manual. |
| Database Type | Pilih MySQL. | |
| Access Method | Pilih Alibaba Cloud Instance. | |
| Instance Region | Wilayah instans sumber ApsaraDB RDS for MySQL. | |
| Replicate Data Across Alibaba Cloud Accounts | Pilih No (skenario akun yang sama). | |
| RDS Instance ID | ID instans sumber. | |
| Database Account | Akun dengan izin yang diperlukan. Lihat Izin yang diperlukan. | |
| Database Password | Kata sandi untuk akun database. | |
| Encryption | Pilih Non-encrypted atau SSL-encrypted. Untuk SSL, aktifkan enkripsi SSL pada instans RDS terlebih dahulu. Lihat Gunakan sertifikat cloud untuk mengaktifkan enkripsi SSL. | |
| Destination Database | Select Existing Connection | Pilih instans terdaftar atau konfigurasikan secara manual. |
| Database Type | Pilih MaxCompute. | |
| Access Method | Pilih Alibaba Cloud Instance. | |
| Instance Region | Wilayah proyek MaxCompute. | |
| Project | Nama proyek MaxCompute tujuan. | |
| AccessKey ID of Alibaba Cloud Account | ID AccessKey akun yang memiliki proyek MaxCompute. | |
| AccessKey Secret of Alibaba Cloud Account | Rahasia AccessKey untuk akun tersebut. |
Langkah 3: Uji konektivitas
Klik Test Connectivity and Proceed di bagian bawah halaman.
DTS memerlukan akses ke kedua database. Jika Anda menghubungkan ke database yang dikelola sendiri, blok CIDR DTS harus ditambahkan ke pengaturan keamanannya. Lihat Tambahkan blok CIDR server DTS. Untuk database yang dikelola sendiri yang tidak menggunakan akses Alibaba Cloud Instance, klik Test Connectivity pada dialog CIDR Blocks of DTS Servers.
Klik OK untuk memberikan izin ke akun MaxCompute Anda, lalu klik Test Connectivity and Proceed.
Langkah 4: Konfigurasikan objek
Pada langkah Configure Objects, atur parameter berikut.
| Parameter | Deskripsi |
|---|---|
| Synchronization Types | Pilih Schema Synchronization, Full Data Synchronization, dan Incremental Data Synchronization. Sinkronisasi data penuh memuat data historis sebelum sinkronisasi inkremental dimulai. |
| Naming Rules of Additional Columns | DTS menambahkan kolom metadata ke tabel tujuan. Jika kolom ini bertentangan dengan nama kolom yang sudah ada, tugas gagal. Pilih New Rule atau Previous Rule berdasarkan pengaturan Anda. Periksa konflik sebelum melanjutkan. Lihat Aturan penamaan untuk kolom tambahan. |
| Partition Definition of Incremental Data Table | Pilih nama partisi sesuai kebutuhan Anda. Lihat Partisi. |
| Processing Mode of Conflicting Tables | Precheck and Report Errors (default): gagal dalam pemeriksaan awal jika tujuan memiliki tabel dengan nama yang sama seperti sumber. Ignore Errors and Proceed: melewati pemeriksaan ini. Gunakan dengan hati-hati—jika skema berbeda, hanya beberapa kolom yang mungkin disinkronkan atau tugas mungkin gagal. Jika skema cocok dan catatan memiliki primary key atau unique key yang sama, sinkronisasi penuh mempertahankan catatan tujuan yang sudah ada; sinkronisasi inkremental menimpanya. |
| Capitalization of Object Names in Destination Instance | Mengontrol kapitalisasi nama database, tabel, dan kolom di MaxCompute. Default: DTS default policy. Lihat Tentukan kapitalisasi nama objek di instans tujuan. |
| Source Objects | Pilih objek dan klik ikon panah untuk memindahkannya ke Selected Objects. Anda dapat memilih tabel. |
| Selected Objects | Klik kanan objek untuk mengganti namanya atau memfilter operasi SQL mana yang akan disinkronkan. Untuk mengganti nama beberapa objek, klik Batch Edit. Untuk memfilter baris, klik kanan tabel dan tentukan kondisi WHERE. Lihat Petakan nama objek dan Tentukan kondisi filter. |
Mengganti nama objek dengan pemetaan nama objek dapat menyebabkan objek dependen gagal disinkronkan.
Langkah 5: Konfigurasikan pengaturan lanjutan
Klik Next: Advanced Settings dan konfigurasikan parameter berikut.
| Parameter | Deskripsi |
|---|---|
| Dedicated Cluster for Task Scheduling | Secara default, DTS menjadwalkan tugas ke klaster bersama. Untuk stabilitas lebih tinggi, beli klaster khusus. Lihat Apa itu klaster khusus DTS. |
| Retry Time for Failed Connections | Berapa lama DTS mencoba ulang saat koneksi gagal. Nilai valid: 10–1440 menit. Default: 720 menit. Atur minimal 30 menit. Jika beberapa tugas berbagi sumber atau tujuan, waktu coba ulang terpendek yang berlaku. Selama percobaan ulang, DTS menagih instans. |
| Retry Time for Other Issues | Berapa lama DTS mencoba ulang saat operasi DML atau DDL gagal. Nilai valid: 1–1440 menit. Default: 10 menit. Atur minimal 10 menit. Harus kurang dari Retry Time for Failed Connections. |
| Enable Throttling for Full Data Synchronization | Batasi QPS (permintaan per detik) ke sumber, RPS migrasi data penuh, dan kecepatan migrasi data (MB/s) untuk mengurangi beban. Tersedia hanya jika Full Data Synchronization dipilih. |
| Enable Throttling for Incremental Data Synchronization | Batasi RPS dan kecepatan sinkronisasi data (MB/s) untuk sinkronisasi inkremental guna mengurangi beban tujuan. |
| Environment Tag | Tag opsional untuk mengidentifikasi instans DTS berdasarkan lingkungan (misalnya, produksi atau uji coba). |
| Whether to delete SQL operations on heartbeat tables of forward and reverse tasks | Yes: DTS tidak menulis operasi tabel heartbeat ke sumber. Pembacaan latensi mungkin ditampilkan. No: DTS menulis operasi heartbeat, yang mungkin memengaruhi backup fisik dan kloning sumber. |
| Configure ETL | Yes: mengaktifkan ekstrak, transformasi, dan muat (ETL). Masukkan pernyataan pemrosesan di editor kode. Lihat Konfigurasikan ETL dalam tugas migrasi data atau sinkronisasi data. No: menonaktifkan ETL. |
| Monitoring and Alerting | Yes: mengonfigurasi notifikasi untuk kegagalan tugas atau latensi yang melebihi ambang batas. Atur ambang batas dan kontak notifikasi. Lihat Konfigurasikan pemantauan dan peringatan. No: menonaktifkan peringatan. |
Langkah 6: Jalankan pemeriksaan awal
Klik Next: Save Task Settings and Precheck.
Untuk melihat pratinjau parameter API untuk konfigurasi tugas ini, arahkan kursor ke tombol dan klik Preview OpenAPI parameters sebelum melanjutkan.
DTS menjalankan pemeriksaan awal sebelum tugas dapat dimulai.
Jika suatu item gagal, klik View Details untuk melihat penyebabnya. Perbaiki masalah tersebut dan klik Precheck Again.
Jika suatu item memicu peringatan yang dapat diabaikan, klik Confirm Alert Details, lalu klik Ignore di dialog, dan klik OK. Klik Precheck Again untuk melanjutkan. Mengabaikan peringatan dapat menyebabkan ketidakkonsistenan data.
Langkah 7: 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 jangka waktu tetap. Lebih hemat biaya untuk penggunaan jangka panjang. Pay-as-you-go: ditagih per jam. Cocok untuk penggunaan jangka pendek—rilis instans setelah selesai untuk menghentikan tagihan. |
| Resource Group Settings | Kelompok sumber daya untuk instans. Default: default resource group. Lihat Apa itu Resource Management? |
| Instance Class | Menentukan kecepatan sinkronisasi. Lihat Kelas instans untuk instansi sinkronisasi data. |
| Subscription Duration | Tersedia untuk metode penagihan subscription. Opsi: 1–9 bulan, 1 tahun, 2 tahun, 3 tahun, atau 5 tahun. |
Baca dan terima Data Transmission Service (Pay-as-you-go) Service Terms.
Klik Buy and Start. Di dialog konfirmasi, klik OK.
Tugas muncul di daftar tugas. Anda dapat memantau perkembangannya di sana.
Skema tabel data inkremental
Sebelum mengkueri tabel data inkremental, jalankan perintah berikut di MaxCompute untuk mengizinkan pemindaian tabel penuh:
set odps.sql.allow.fullscan=true;Setiap tabel _log menyimpan event perubahan dari sumber. Selain data kolom asli, DTS menambahkan bidang metadata berikut ke setiap baris:
| Bidang | Deskripsi |
|---|---|
record_id | Pengidentifikasi unik untuk entri log. Bertambah otomatis untuk setiap entri baru. Untuk operasi UPDATE, DTS menghasilkan dua entri (sebelum dan sesudah perubahan) dengan record_id yang sama. |
operation_flag | Jenis operasi: I (INSERT), D (DELETE), U (UPDATE). |
utc_timestamp | Timestamp operasi dalam UTC, sesuai dengan timestamp file log biner. |
before_flag | Y jika baris berisi nilai sebelum pembaruan; N jika tidak. |
after_flag | Y jika baris berisi nilai setelah pembaruan; N jika tidak. |
Membaca event UPDATE: DTS menulis dua baris untuk setiap UPDATE—satu dengan before_flag=Y (nilai asli) dan satu dengan after_flag=Y (nilai baru). Kedua baris tersebut memiliki record_id yang sama.