Topik ini menjelaskan cara memigrasikan data inkremental dari database PostgreSQL yang dikelola sendiri ke instance ApsaraDB RDS for PostgreSQL menggunakan Data Transmission Service (DTS). DTS mendukung migrasi skema, migrasi data penuh, dan migrasi data inkremental. Saat memigrasikan data dari database PostgreSQL yang dikelola sendiri ke Alibaba Cloud, Anda dapat memilih semua jenis migrasi yang didukung untuk memastikan kontinuitas layanan.
Topik ini menjelaskan cara mengonfigurasi tugas migrasi data inkremental. Dalam contoh ini, User-Created Database with Public IP Address dipilih. Untuk informasi tentang cara melakukan migrasi data penuh, lihat Migrasi Data Penuh dari Database PostgreSQL yang Dikelola Sendiri ke Instance ApsaraDB RDS for PostgreSQL.
Prasyarat
Database PostgreSQL yang dikelola sendiri adalah versi 9.4.8 atau lebih baru, termasuk PostgreSQL 9.5, PostgreSQL 9.6, atau PostgreSQL 10.0.
Ruang penyimpanan yang tersedia di instance ApsaraDB RDS for PostgreSQL lebih besar daripada total ukuran data di database PostgreSQL yang dikelola sendiri.
Port layanan database PostgreSQL yang dikelola sendiri dapat diakses melalui Internet.
Catatan penggunaan
DTS menggunakan sumber daya baca dan tulis dari database sumber dan tujuan selama migrasi data penuh. Hal ini dapat meningkatkan beban pada server database. Jika performa database tidak baik, spesifikasinya rendah, atau volume datanya besar, layanan database mungkin tidak tersedia. Sebagai contoh, DTS menggunakan sejumlah besar sumber daya baca dan tulis dalam kasus berikut: banyak kueri SQL lambat dilakukan pada database sumber, tabel tidak memiliki kunci utama, atau terjadi deadlock di database tujuan. Sebelum memigrasikan data, evaluasi dampak migrasi data terhadap performa database sumber dan tujuan. Kami menyarankan Anda memigrasikan data selama jam-jam sepi. Sebagai contoh, Anda dapat memigrasikan data ketika utilisasi CPU database sumber dan tujuan kurang dari 30%.
Jika Anda memilih skema sebagai objek yang akan dimigrasikan dan membuat tabel di skema atau menjalankan pernyataan RENAME untuk mengganti nama tabel selama migrasi data inkremental, Anda harus menjalankan pernyataan
ALTER TABLE schema.table REPLICA IDENTITY FULL;sebelum menulis data ke tabel.CatatanGantikan variabel
schemadantabledalam pernyataan di atas dengan nama skema dan nama tabel Anda.Tabel yang akan dimigrasikan di database sumber harus memiliki batasan PRIMARY KEY atau UNIQUE dan semua bidang harus unik. Jika tidak, database tujuan mungkin berisi catatan data duplikat.
Jika tugas migrasi data gagal dan berhenti, DTS secara otomatis melanjutkan tugas tersebut. Sebelum memindahkan beban kerja Anda ke instance tujuan, hentikan atau lepaskan tugas migrasi data. Jika tidak, data di database sumber akan menimpa data di instance tujuan setelah tugas dilanjutkan.
Jika satu atau lebih transaksi jangka panjang ada di database sumber dan data inkremental dimigrasikan dalam tugas migrasi data, log write-ahead logging (WAL) yang dihasilkan sebelum transaksi jangka panjang di database sumber dikomit mungkin menumpuk. Akibatnya, ruang disk database sumber mungkin tidak mencukupi.
Batasan
Tugas migrasi data hanya dapat memigrasikan data dari satu database. Untuk memigrasikan data dari beberapa database, Anda harus membuat tugas migrasi data untuk setiap database.
Nama database sumber tidak boleh mengandung tanda hubung (-). Sebagai contoh, dts-testdata tidak diperbolehkan.
Jika pergantian primer/sekunder dilakukan pada database sumber selama migrasi data inkremental, transmisi tidak dapat dilanjutkan.
Data mungkin tidak konsisten antara node primer dan sekunder database sumber karena latensi sinkronisasi. Oleh karena itu, Anda harus menggunakan node primer sebagai sumber data saat memigrasikan data.
CatatanKami menyarankan Anda memigrasikan data selama jam-jam sepi. Anda dapat memodifikasi laju transfer migrasi data penuh berdasarkan performa baca dan tulis database sumber. Untuk informasi lebih lanjut, lihat Modifikasi Laju Transfer Migrasi Data Penuh.
DTS tidak memeriksa validitas metadata seperti urutan. Anda harus secara manual memeriksa validitas metadata.
Setelah beban kerja Anda dipindahkan ke database tujuan, urutan yang baru ditulis tidak bertambah dari nilai maksimum urutan di database sumber. Oleh karena itu, Anda harus menanyakan nilai maksimum urutan di database sumber sebelum memindahkan beban kerja Anda ke database tujuan. Kemudian, Anda harus menentukan nilai maksimum yang diquery sebagai nilai awal urutan di database tujuan. Anda dapat menjalankan pernyataan berikut untuk menanyakan nilai maksimum urutan di database sumber:
do language plpgsql $$ declare nsp name; rel name; val int8; begin for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S' loop execute format($_$select last_value from %I.%I$_$, nsp, rel) into val; raise notice '%', format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1); end loop; end; $$;Untuk memastikan bahwa tugas migrasi data berjalan sesuai harapan, Anda hanya dapat melakukan pergantian primer/sekunder pada instance ApsaraDB RDS for PostgreSQL 11. Dalam hal ini, Anda harus mengatur parameter
rds_failover_slot_modekesync. Untuk informasi lebih lanjut, lihat Logical Replication Slot Failover.PeringatanJika Anda melakukan pergantian primer/sekunder pada database PostgreSQL yang dikelola sendiri atau instance ApsaraDB RDS for PostgreSQL versi lain selain 11, tugas migrasi data berhenti.
Selama migrasi data inkremental, DTS hanya memigrasikan operasi DML termasuk INSERT, DELETE, dan UPDATE.
CatatanHanya tugas migrasi data yang dibuat setelah 1 Oktober 2020 yang dapat memigrasikan operasi DDL. Anda harus membuat pemicu dan fungsi di database sumber untuk mendapatkan informasi DDL sebelum mengonfigurasi tugas. Untuk informasi lebih lanjut, lihat Gunakan Pemicu dan Fungsi untuk Mengimplementasikan Migrasi DDL Inkremental untuk Database PostgreSQL.
Aturan penagihan
Jenis migrasi | Biaya konfigurasi tugas | Biaya lalu lintas internet |
Migrasi skema dan data penuh | Gratis. | Dikenakan biaya hanya ketika data dimigrasikan dari Alibaba Cloud melalui Internet. Untuk informasi lebih lanjut, lihat Ikhtisar penagihan. |
Migrasi data inkremental | Dikenakan biaya. Untuk informasi lebih lanjut, lihat Ikhtisar penagihan. |
Izin yang diperlukan untuk akun database
Database | Migrasi skema | Migrasi data penuh | Migrasi data inkremental |
Database PostgreSQL yang dikelola sendiri | Izin USAGE pada pg_catalog | Izin SELECT pada objek yang akan dimigrasikan | Izin superuser |
Instance ApsaraDB RDS for PostgreSQL | Izin CREATE dan USAGE pada objek yang akan dimigrasikan | Izin pemilik skema | Izin pemilik skema |
Untuk informasi lebih lanjut tentang cara membuat akun database dan memberikan izin kepada akun, lihat topik-topik berikut.
Database PostgreSQL yang dikelola sendiri: CREATE USER dan GRANT
Instance ApsaraDB RDS for PostgreSQL: Buat Akun
Proses migrasi data
Tabel berikut menjelaskan cara DTS memigrasikan skema dan data database PostgreSQL sumber. Proses ini mencegah kegagalan migrasi data yang disebabkan oleh dependensi antar objek.
Untuk informasi lebih lanjut tentang migrasi skema, migrasi data penuh, dan migrasi data inkremental, lihat Istilah.
Langkah | Deskripsi |
1. Migrasi Skema | DTS memigrasikan skema tabel, tampilan, urutan, fungsi, tipe yang ditentukan pengguna, aturan, domain, operasi, dan agregat ke database tujuan. Catatan DTS tidak memigrasikan plugin. Selain itu, DTS tidak memigrasikan fungsi yang ditulis dalam bahasa pemrograman C. |
2. Migrasi Data Penuh | DTS memigrasikan semua data historis objek ke database tujuan. |
3. Migrasi Skema | DTS memigrasikan skema pemicu dan kunci asing ke database tujuan. |
4. Migrasi Data Inkremental | DTS memigrasikan data inkremental objek ke database tujuan. Migrasi data inkremental memastikan kontinuitas layanan aplikasi yang dikelola sendiri. Catatan
|
Persiapan
Bagian ini menjelaskan operasi pada Linux.
Opsional: Unduh kode sumber PostgreSQL dari situs resmi, dan kompilasi serta instal kode sumber.
CatatanLewati langkah ini jika database PostgreSQL yang dikelola sendiri diinstal menggunakan kode sumber.
Unduh kode sumber dari situs resmi PostgreSQL berdasarkan versi database PostgreSQL yang dikelola sendiri.
Jalankan perintah berikut secara berurutan untuk mengonfigurasi, mengompilasi, dan menginstal kode sumber.
sudo ./configure --prefix=/usr/local/postgresql sudo make sudo make installPentingNilai parameter prefix tidak boleh sama dengan jalur instalasi database PostgreSQL yang dikelola sendiri.
Saat mengompilasi dan menginstal PostgreSQL, versi OS PostgreSQL harus konsisten dengan versi GNU Compiler Collection (GCC).
Jika terjadi kesalahan saat menjalankan perintah
sudo ./configure, Anda dapat memodifikasi perintah berdasarkan pesan kesalahan. Sebagai contoh, jika pesan kesalahan adalahreadline library not found. Use --without-readline to disable readline support., Anda dapat memodifikasi perintah menjadisudo ./configure --without-readline.Jika Anda menggunakan metode lain untuk menginstal PostgreSQL, Anda harus mengompilasi plugin ali_decoding di lingkungan pengujian yang memiliki versi OS dan GCC yang sama.
Kompilasi kode sumber PostgreSQL untuk menghasilkan file ali_decoding baru dan gunakan file tersebut untuk mengganti file ali_decoding di database PostgreSQL yang dikelola sendiri.
Unduh plugin ali_decoding yang disediakan oleh DTS.
CatatanAnda juga dapat menjalankan perintah berikut di Linux untuk mengunduh dan mengekstrak plugin ali_decoding:
sudo wget https://github.com/aliyun/rds_dbsync/archive/refs/heads/master.zip unzip master.zipJalankan perintah berikut dan salin seluruh direktori ali_decoding ke direktori contrib PostgreSQL yang dikompilasi dan diinstal:
sudo cp rds_dbsync-master/ali_decoding /tmp/postgresql-9.4.26/contrib/ -rCatatanGantikan /tmp/postgresql-9.4.26/contrib/ dalam perintah di atas dengan direktori dalam kode sumber PostgreSQL.

Pergi ke direktori ali_decoding dan ganti isi file Makefile dengan skrip berikut:
# contrib/ali_decoding/Makefile MODULE_big = ali_decoding MODULES = ali_decoding OBJS = ali_decoding.o DATA = ali_decoding--0.0.1.sql ali_decoding--unpackaged--0.0.1.sql EXTENSION = ali_decoding NAME = ali_decoding #subdir = contrib/ali_decoding #top_builddir = ../.. #include $(top_builddir)/src/Makefile.global #include $(top_srcdir)/contrib/contrib-global.mk #PG_CONFIG = /usr/pgsql-9.6/bin/pg_config #pgsql_lib_dir := $(shell $(PG_CONFIG) --libdir) #PGXS := $(shell $(PG_CONFIG) --pgxs) #include $(PGXS) # Jalankan perintah berikut untuk menginstal kode sumber: ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else subdir = contrib/ali_decoding top_builddir = ../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endifOpsional: Jika versi database PostgreSQL yang dikelola sendiri berada dalam rentang 9.4.8 hingga 9.4.26, Anda harus menghapus parameter false dari fungsi set_config_option di file ali_decoding.c. Berikut adalah kode untuk fungsi yang telah dimodifikasi:
if (extra_float_digits < 3) (void) set_config_option("extra_float_digits", "3", PGC_USERSET, PGC_S_SESSION, GUC_ACTION_SAVE, true, 0);Pergi ke direktori ali_decoding, jalankan perintah
sudo makedansudo make installsecara berurutan untuk mengompilasi ali_decoding dan menghasilkan file yang diperlukan untuk menginstal plugin ali_decoding.
Salin file ali_decoding yang dihasilkan ke database PostgreSQL yang dikelola sendiri dan ganti file ali_decoding asli di jalur berikut:
CatatanGantikan /usr/local/postgresql dalam jalur berikut dengan jalur instalasi database PostgreSQL yang dikelola sendiri.
/usr/local/postgresql/lib/ali_decoding.so /usr/local/postgresql/share/extension/ali_decoding.control /usr/local/postgresql/share/extension/ali_decoding--0.0.1.sql /usr/local/postgresql/share/extension/ali_decoding--unpackaged--0.0.1.sql
Buat database dan skema di instance ApsaraDB RDS for PostgreSQL tujuan berdasarkan informasi database dan skema tentang objek yang akan dimigrasikan. Nama skema di database sumber dan tujuan harus sama. Untuk informasi lebih lanjut, lihat Buat Database dan Kelola Akun Menggunakan Skema.
Prosedur
Masuk ke Konsol DTS.
CatatanJika Anda dialihkan ke konsol Data Management (DMS), Anda dapat mengklik ikon
di
untuk kembali ke versi sebelumnya dari konsol DTS.Di panel navigasi di sebelah kiri, klik Data Migration.
Di bagian atas halaman Migration Tasks, pilih wilayah tempat instance RDS berada.
Di pojok kanan atas halaman, klik Create Migration Task.
Konfigurasikan database sumber dan tujuan untuk tugas migrasi data.

Bagian
Parameter
Deskripsi
Tidak Ada
Nama Tugas
Nama tugas yang secara otomatis dibuat oleh DTS. Kami menyarankan Anda menentukan nama yang menunjukkan kebutuhan bisnis Anda agar mudah diidentifikasi. Anda tidak perlu menggunakan nama unik.
Database Sumber
Jenis Instance
Metode akses database sumber. Dalam contoh ini, User-Created Database with Public IP Address dipilih.
CatatanJika database mandiri sumber adalah jenis lain, Anda harus menyiapkan lingkungan yang diperlukan untuk database mandiri tersebut. Untuk informasi lebih lanjut, lihat Ikhtisar Persiapan.
Wilayah Instance
Jika Anda memilih User-Created Database with Public IP Address sebagai jenis instance, Anda tidak perlu mengatur parameter Instance Region.
CatatanJika daftar putih dikonfigurasi untuk database PostgreSQL yang dikelola sendiri, Anda harus menambahkan blok CIDR server DTS ke daftar putih database. Anda dapat mengklik Get IP Address Segment of DTS di sebelah Instance Region untuk mendapatkan blok CIDR server DTS.
Tipe Database
Jenis basis data sumber. Pilih PostgreSQL.
Nama Host atau Alamat IP
Titik akhir yang digunakan untuk terhubung ke database PostgreSQL yang dikelola sendiri. Dalam contoh ini, masukkan alamat IP publik.
Nomor Port
Nomor port layanan database PostgreSQL yang dikelola sendiri. Nomor port default adalah 5432.
Nama Database
Nama database PostgreSQL yang dikelola sendiri.
Akun Database
Akun yang digunakan untuk masuk ke database PostgreSQL yang dikelola sendiri. Untuk informasi tentang izin yang diperlukan untuk akun, lihat Izin yang diperlukan untuk akun database.
Kata Sandi Database
Kata sandi akun database.
CatatanSetelah Anda menentukan informasi tentang database sumber, Anda dapat mengklik Test Connectivity di sebelah Database Password untuk memeriksa apakah informasi tersebut valid. Jika informasi valid, pesan Passed akan muncul. Jika pesan Failed muncul, klik Check di sebelah Failed. Kemudian, modifikasi informasi berdasarkan hasil pemeriksaan.
Database Tujuan
Jenis Instance
Jenis instance database tujuan. Pilih RDS Instance.
Wilayah Instance
Wilayah tempat instance ApsaraDB RDS for PostgreSQL tujuan berada.
ID Instance RDS
ID instance ApsaraDB RDS for PostgreSQL tujuan.
Nama Database
Nama database tujuan ke mana data dimigrasikan di instance ApsaraDB RDS for PostgreSQL. Nama tersebut dapat berbeda dari nama database PostgreSQL yang dikelola sendiri.
CatatanSebelum Anda mengonfigurasi tugas migrasi data, Anda harus membuat database dan skema di instance ApsaraDB RDS for PostgreSQL tujuan. Untuk informasi lebih lanjut, lihat Persiapan.
Akun Database
Akun database instance ApsaraDB RDS for PostgreSQL tujuan. Untuk informasi tentang izin yang diperlukan untuk akun, lihat Izin yang diperlukan untuk akun database
Kata Sandi Database
Kata sandi akun database.
CatatanSetelah Anda menentukan informasi tentang instance RDS, Anda dapat mengklik Test Connectivity di sebelah Database Password untuk memeriksa apakah informasi tersebut valid. Jika informasi valid, pesan Passed akan muncul. Jika pesan Failed muncul, klik Check di sebelah Failed. Kemudian, modifikasi informasi berdasarkan hasil pemeriksaan.
Di pojok kanan bawah halaman, klik Set Whitelist and Next.
PeringatanJika blok CIDR server DTS secara otomatis atau manual ditambahkan ke daftar putih database atau instance, atau ke aturan grup keamanan ECS, risiko keamanan mungkin timbul. Oleh karena itu, sebelum menggunakan DTS untuk memigrasikan data, Anda harus memahami dan mengakui potensi risiko serta mengambil langkah-langkah pencegahan, termasuk tetapi tidak terbatas pada langkah-langkah berikut: tingkatkan keamanan nama pengguna dan kata sandi Anda, batasi port yang diekspos, autentikasi panggilan API, periksa daftar putih atau aturan grup keamanan ECS secara berkala dan larang blok CIDR yang tidak sah, atau hubungkan database ke DTS menggunakan Express Connect, VPN Gateway, atau Smart Access Gateway.
Pilih jenis migrasi dan objek yang ingin Anda migrasikan.

Pengaturan
Deskripsi
Pilih Jenis Migrasi
Untuk hanya melakukan migrasi data penuh, pilih Schema Migration dan Full Data Migration.
Untuk memastikan kontinuitas layanan selama migrasi data, pilih Schema Migration, Full Data Migration, dan Incremental Data Migration. Dalam contoh ini, pilih ketiga jenis migrasi.
CatatanJika Incremental Data Migration tidak dipilih, jangan tulis data ke database PostgreSQL yang dikelola sendiri selama migrasi data penuh. Hal ini memastikan konsistensi data antara database mandiri dan instance ApsaraDB RDS for PostgreSQL.
Pilih Objek yang Akan Dimigrasikan
Pilih satu atau lebih objek dari bagian Available dan klik ikon
untuk memindahkan objek ke bagian Selected.CatatanAnda dapat memilih kolom, tabel, atau skema sebagai objek yang akan dimigrasikan.
Secara default, nama objek tetap sama seperti di database PostgreSQL yang dikelola sendiri setelah objek dimigrasikan ke instance ApsaraDB RDS for PostgreSQL. Anda dapat menggunakan fitur pemetaan nama objek untuk mengganti nama objek yang dimigrasikan ke instance ApsaraDB RDS for PostgreSQL tujuan. Untuk informasi lebih lanjut, lihat Pemetaan Nama Objek.
Jika Anda menggunakan fitur pemetaan nama objek untuk mengganti nama objek, objek lain yang bergantung pada objek tersebut mungkin gagal dimigrasikan.
Tentukan Apakah Akan Mengganti Nama Objek
Anda dapat menggunakan fitur pemetaan nama objek untuk mengganti nama objek yang dimigrasikan ke instance tujuan. Untuk informasi lebih lanjut, lihat Pemetaan Nama Objek.
Tentukan Rentang Waktu Percobaan Ulang untuk Koneksi Gagal ke Database Sumber atau Tujuan
Secara default, jika DTS gagal terhubung ke database sumber atau tujuan, DTS mencoba lagi dalam 12 jam ke depan. Anda dapat menentukan rentang waktu percobaan ulang berdasarkan kebutuhan bisnis Anda. Jika DTS tersambung kembali ke database sumber dan tujuan dalam periode waktu yang ditentukan, DTS melanjutkan tugas migrasi data. Jika tidak, tugas migrasi data gagal.
CatatanSaat DTS mencoba koneksi ulang, Anda akan dikenakan biaya untuk instance DTS. Kami menyarankan Anda menentukan rentang waktu percobaan ulang berdasarkan kebutuhan bisnis Anda. Anda juga dapat melepaskan instance DTS sesegera mungkin setelah instance sumber dan tujuan dilepaskan.
Klik Precheck.
CatatanPra-pemeriksaan dilakukan sebelum tugas migrasi dimulai. Tugas migrasi hanya dimulai setelah pra-pemeriksaan berhasil.
Jika pra-pemeriksaan gagal, klik ikon
di sebelah setiap item pemeriksaan yang gagal untuk melihat detail terkait. Perbaiki masalah sesuai petunjuk dan jalankan pra-pemeriksaan lagi.
Klik Next.
Di kotak dialog Confirm Settings, konfigurasikan parameter Channel Specification. Lalu, baca dan pilih Data Transmission Service (Pay-as-you-go) Service Terms.
Klik Buy and Start untuk memulai tugas migrasi data.
Migrasi Data Penuh
Jangan secara manual menghentikan tugas migrasi data penuh. Jika Anda secara manual menghentikan tugas migrasi data penuh, data yang dimigrasikan ke instance RDS mungkin tidak lengkap. Anda dapat menunggu hingga tugas migrasi data berhenti secara otomatis.
Migrasi Data Inkremental
Tugas migrasi data inkremental tidak berhenti secara otomatis. Anda harus secara manual menghentikan tugas tersebut.
CatatanKami menyarankan Anda secara manual menghentikan tugas migrasi data inkremental pada titik waktu yang tepat. Sebagai contoh, Anda dapat menghentikan tugas selama jam-jam sepi atau sebelum Anda memindahkan beban kerja ke instance ApsaraDB RDS for MySQL.
Tunggu hingga Incremental Data Migration dan The data migration task is not delayed ditampilkan di bilah kemajuan tugas migrasi data. Lalu, hentikan penulisan data ke database sumber selama beberapa menit. Latensi incremental data migration mungkin ditampilkan di bilah kemajuan.
Tunggu hingga status Incremental Data Migration berubah menjadi The data migration task is not delayed lagi. Lalu, secara manual hentikan tugas migrasi.

Pindahkan beban kerja Anda ke instance ApsaraDB RDS for PostgreSQL.
Langkah selanjutnya
Akun database yang digunakan untuk migrasi data memiliki izin baca dan tulis. Setelah migrasi data selesai, Anda harus menghapus akun baik dari database PostgreSQL yang dikelola sendiri maupun instance ApsaraDB RDS for PostgreSQL untuk memastikan keamanan.