Mentranspor basis data PostgreSQL antara instans DB - Layanan Basis Data Relasional Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mentranspor basis data PostgreSQL antara instans DB

Dengan menggunakan basis data PostgreSQL yang dapat ditranspor untuk Amazon RDS, Anda dapat memindahkan basis data PostgreSQL antara dua instans DB. Ini adalah cara yang sangat cepat untuk memigrasikan basis data besar antara instans DB yang berbeda. Untuk menggunakan pendekatan ini, instans DB Anda harus menjalankan PostgreSQL versi utama.

Kemampuan ini mengharuskan Anda menginstal ekstensi pg_transport di instans DB sumber dan tujuan. Ekstensi pg_transport menyediakan mekanisme transportasi fisik yang memindahkan file basis data dengan pemrosesan minimal. Mekanisme ini memindahkan data jauh lebih cepat daripada proses dump dan load tradisional, dengan waktu henti yang lebih sedikit.

catatan

Basis data PostgreSQL yang dapat ditranspor tersedia dalam RDS for PostgreSQL 11.5 dan yang lebih tinggi, dan RDS for PostgreSQL versi 10.10 dan yang lebih tinggi.

Untuk mentranspor instans DB PostgreSQL dari satu instans DB RDS for PostgreSQL ke instans DB lainnya, pertama-tama siapkan instans sumber dan tujuan sebagaimana dijelaskan dalam Menyiapkan instans DB untuk transportasi. Anda kemudian dapat mentranspor basis data menggunakan fungsi yang dijelaskan dalam Mentranspor basis data PostgreSQL.

Batasan dalam penggunaan basis data PostgreSQL yang dapat ditranspor

Basis data yang dapat ditranspor memiliki batasan berikut:

  • Replika baca – Anda tidak dapat menggunakan basis data yang dapat ditranspor pada replika baca atau instans induk replika baca.

  • Jenis kolom yang tidak didukung – Anda tidak dapat menggunakan jenis data reg dalam tabel basis data apa pun yang akan Anda transportasikan dengan metode ini. Jenis ini bergantung pada ID objek (OID) katalog sistem, yang sering berubah selama transportasi.

  • Tablespace – Semua objek basis data sumber harus dalam tablespace pg_default default.

  • Kompatibilitas – Instans DB sumber dan tujuan harus menjalankan PostgreSQL dalam versi utama yang sama.

  • Ekstensi — Instans DB sumber hanya dapat memiliki penginstalan pg_transport.

  • Peran dan ACL – Informasi hak istimewa akses dan kepemilikan basis data sumber tidak dibawa ke basis data tujuan. Semua objek basis data dibuat dan dimiliki oleh pengguna tujuan transportasi lokal.

  • Transportasi bersamaan — Instans DB tunggal dapat mendukung hingga 32 transportasi bersamaan, termasuk impor dan ekspor, jika proses pekerja telah dikonfigurasi dengan benar.

  • Khusus instans DB RDS for PostgreSQL - Basis data PostgreSQL yang dapat ditranspor didukung hanya pada instans DB RDS for PostgreSQL. Anda tidak dapat menggunakannya dengan basis data on-premise atau basis data yang berjalan di Amazon EC2.

Bersiap untuk mentranspor basis data PostgreSQL

Sebelum memulai, pastikan bahwa instans DB RDS for PostgreSQL Anda memenuhi persyaratan berikut:

  • Instans DB RDS for PostgreSQL untuk sumber dan tujuan harus menjalankan versi PostgreSQL yang sama.

  • DB tujuan tidak dapat memiliki basis data dengan nama yang sama dengan DB sumber yang ingin Anda transportasikan.

  • Akun yang Anda gunakan untuk menjalankan transportasi membutuhkan hak istimewa rds_superuser pada DB sumber dan DB tujuan.

  • Grup keamanan untuk instans DB sumber harus mengizinkan akses masuk dari instans DB tujuan. Izin ini mungkin sudah ada jika instans DB sumber dan tujuan Anda berada di VPC. Untuk mengetahui informasi selengkapnya tentang grup keamanan, lihat Mengontrol akses dengan grup keamanan.

Mentranspor basis data dari instans DB sumber ke instans DB tujuan memerlukan beberapa perubahan pada grup parameter DB yang terkait dengan setiap instans. Artinya Anda harus membuat grup parameter DB kustom untuk instans DB sumber dan membuat grup parameter DB kustom untuk instans DB tujuan.

catatan

Jika instans DB Anda sudah dikonfigurasi menggunakan grup parameter DB kustom, Anda dapat memulai dengan langkah 2 dalam prosedur berikut.

Cara mengonfigurasi parameter grup DB kustom untuk mentranspor basis data

Untuk langkah-langkah berikut, gunakan akun yang memiliki hak istimewa rds_superuser.

  1. Jika instans DB sumber dan tujuan menggunakan grup parameter DB default, Anda perlu membuat grup parameter DB khusus menggunakan versi yang sesuai untuk instance Anda. Ini dilakukan agar Anda dapat mengubah nilai untuk beberapa parameter. Untuk informasi selengkapnya, lihat Menggunakan grup parameter.

  2. Dalam grup parameter DB kustom, ubah nilai untuk parameter berikut:

    • shared_preload_libraries— Tambahkan pg_transport ke daftar pustaka.

    • pg_transport.num_workers – Nilai default-nya adalah 3. Tingkatkan atau kurangi nilai ini sesuai kebutuhan untuk basis data Anda. Untuk basis data 200 GB, kami sarankan tidak lebih dari 8. Perlu diingat bahwa jika Anda meningkatkan nilai default untuk parameter ini, Anda juga harus meningkatkan nilai max_worker_processes.

    • pg_transport.work_mem – Nilai default-nya adalah 128 MB atau 256 MB, tergantung versi PostgreSQL. Pengaturan default biasanya dapat dibiarkan saja.

    • max_worker_processes – Nilai parameter ini perlu diatur menggunakan perhitungan berikut:

      (3 * pg_transport.num_workers) + 9

      Nilai ini diperlukan di tujuan untuk menangani berbagai proses pekerja latar belakang yang terlibat dalam transportasi. Untuk mempelajari lebih lanjut tentang max_worker_processes,, lihat Resource Consumption dalam dokumentasi PostgreSQL.

    Untuk informasi selengkapnya tentang parameter pg_transport, lihat Referensi parameter basis data yang dapat ditranspor .

  3. Boot ulang instans DB RDS for PostgreSQL sumber dan instans tujuan agar pengaturan untuk parameter tersebut berlaku.

  4. Terhubung ke instans DB RDS for PostgreSQL sumber Anda.

    psql --host=source-instance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  5. Hapus ekstensi asing dari skema publik instans DB. Hanya ekstensi pg_transport yang diizinkan selama operasi transportasi aktual.

  6. Instal ekstensi pg_transport sebagai berikut:

    postgres=> CREATE EXTENSION pg_transport; CREATE EXTENSION
  7. Terhubung ke instans DB RDS for PostgreSQL tujuan Anda. Hapus ekstensi asing apa pun, lalu instal ekstensi pg_transport.

    postgres=> CREATE EXTENSION pg_transport; CREATE EXTENSION

Mentranspor basis data PostgreSQL ke tujuan dari sumber

Setelah Anda menyelesaikan proses yang dijelaskan dalam Bersiap untuk mentranspor basis data PostgreSQL, Anda dapat memulai transportasi. Untuk melakukannya, jalankan fungsi transport.import_from_server pada instans DB tujuan. Dalam sintaks berikut ini Anda dapat menemukan parameter fungsi.

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);

Nilai false yang ditunjukkan dalam contoh memberi tahu fungsi bahwa ini bukan dry run. Untuk menguji penyiapan transportasi, Anda dapat menentukan true untuk opsi dry_run saat memanggil fungsi, seperti yang ditunjukkan berikut ini:

postgres=> SELECT transport.import_from_server( 'docs-lab-source-db.666666666666aws-region.rds.amazonaws.com', 5432, 'postgres', '********', 'labdb', '******', true); INFO: Starting dry-run of import of database "labdb". INFO: Created connections to remote database (took 0.03 seconds). INFO: Checked remote cluster compatibility (took 0.05 seconds). INFO: Dry-run complete (took 0.08 seconds total). import_from_server -------------------- (1 row)

Baris INFO adalah output karena parameter pg_transport.timing diatur ke nilai default-nya, true. Atur dry_run ke false ketika Anda menjalankan perintah dan basis data sumber diimpor ke tujuan, seperti yang ditunjukkan berikut:

INFO: Starting import of database "labdb". INFO: Created connections to remote database (took 0.02 seconds). INFO: Marked remote database as read only (took 0.13 seconds). INFO: Checked remote cluster compatibility (took 0.03 seconds). INFO: Signaled creation of PITR blackout window (took 2.01 seconds). INFO: Applied remote database schema pre-data (took 0.50 seconds). INFO: Created connections to local cluster (took 0.01 seconds). INFO: Locked down destination database (took 0.00 seconds). INFO: Completed transfer of database files (took 0.24 seconds). INFO: Completed clean up (took 1.02 seconds). INFO: Physical transport complete (took 3.97 seconds total). import_from_server -------------------- (1 row)

Fungsi ini mengharuskan Anda memberikan kata sandi pengguna basis data. Oleh karena itu, kami menyarankan Anda untuk mengubah kata sandi dari peran pengguna yang Anda gunakan setelah transportasi selesai. Atau, Anda dapat menggunakan variabel terikat SQL untuk membuat peran pengguna sementara. Gunakan peran sementara ini untuk transportasi, lalu buang peran tersebut setelahnya.

Jika transportasi Anda tidak berhasil, Anda mungkin melihat pesan kesalahan yang mirip dengan yang berikut ini:

pg_transport.num_workers=8 25% of files transported failed to download file data

Pesan kesalahan "gagal mengunduh data file" menunjukkan bahwa jumlah proses pekerja tidak diatur dengan benar untuk ukuran basis data. Anda mungkin perlu meningkatkan atau mengurangi nilai yang diatur untuk pg_transport.num_workers. Setiap kegagalan melaporkan persentase penyelesaian, sehingga Anda dapat melihat dampak perubahan Anda. Misalnya, mengubah pengaturan dari 8 menjadi 4 dalam satu kasus menghasilkan hal berikut:

pg_transport.num_workers=4 75% of files transported failed to download file data

Perlu diingat bahwa parameter max_worker_processes juga diperhitungkan selama proses transportasi. Dengan kata lain, Anda mungkin perlu memodifikasi pg_transport.num_workers dan max_worker_processes agar transportasi basis data berhasil dijalankan. Contoh yang ditampilkan akhirnya berfungsi ketika pg_transport.num_workers diatur ke 2:

pg_transport.num_workers=2 100% of files transported

Lihat informasi selengkapnya tentang fungsi transport.import_from_server dan parameternya di Referensi fungsi basis data yang dapat ditranspor.

Apa yang terjadi selama transportasi basis data

Fitur basis data PostgreSQL yang dapat ditranspor menggunakan model tarik untuk mengimpor basis data dari instans DB sumber ke tujuan. Fungsi transport.import_from_server membuat basis data bergerak pada instans DB tujuan. Basis data bergerak tidak dapat diakses pada instans DB tujuan selama durasi transportasi.

Ketika transportasi dimulai, semua sesi saat ini pada basis data sumber berakhir. Setiap basis data selain basis data sumber pada instans DB sumber tidak terpengaruh oleh transportasi.

Basis data sumber dibuat menjadi mode hanya-baca khusus. Saat berada dalam mode ini, Anda dapat terhubung ke basis data sumber dan menjalankan kueri hanya baca. Namun, kueri berkemampuan tulis dan beberapa jenis perintah lainnya diblokir. Hanya basis data sumber spesifik yang ditranspor yang terpengaruh oleh pembatasan ini.

Selama transportasi, Anda tidak dapat memulihkan instans DB tujuan ke suatu titik waktu. Ini karena transportasi tersebut tidak bersifat transaksional dan tidak menggunakan log write-ahead PostgreSQL untuk mencatat perubahan. Jika instans DB tujuan mengaktifkan pencadangan otomatis, pencadangan otomatis diambil setelah transportasi selesai. oint-in-time Pemulihan P tersedia beberapa kali setelah pencadangan selesai.

Jika transportasi gagal, ekstensi pg_transport berupaya untuk membatalkan semua perubahan ke instans DB sumber dan tujuan. Ini termasuk menghapus basis data yang ditranspor sebagian di tujuan. Bergantung pada jenis kegagalan, basis data sumber dapat terus menolak kueri berkemampuan tulis. Jika ini terjadi, gunakan perintah berikut untuk memungkinkan kueri berkemampuan tulis.

ALTER DATABASE db-name SET default_transaction_read_only = false;

Referensi fungsi basis data yang dapat ditranspor

Fungsi transport.import_from_server mentranspor basis data PostgreSQL dengan mengimpornya dari sumber instans DB ke instans DB tujuan. Hal ini dilakukan menggunakan mekanisme transportasi koneksi basis data fisik.

Sebelum memulai transportasi, fungsi ini memverifikasi bahwa instans DB sumber dan tujuan merupakan versi yang sama dan kompatibel untuk migrasi. Hal ini juga menegaskan bahwa instans DB tujuan memiliki cukup ruang untuk sumbernya.

Sintaks

transport.import_from_server( host text, port int, username text, password text, database text, local_password text, dry_run bool )

Nilai yang Ditampilkan

Tidak ada.

Parameter

Anda dapat menemukan deskripsi parameter fungsi transport.import_from_server dalam tabel berikut.

Parameter Deskripsi
host

Titik akhir instans DB sumber.

port Integer yang mewakili port instans DB sumber.

Instans DB PostgreSQL kerap menggunakan port 5432.

username

Pengguna instans DB sumber. Pengguna ini harus menjadi anggota peran rds_superuser.

password

Kata sandi pengguna instans DB sumber.

database

Nama basis data dalam instans DB sumber untuk ditranspor.

local_password

Kata sandi lokal pengguna saat ini untuk instans DB tujuan. Pengguna ini harus menjadi anggota peran rds_superuser.

dry_run

Nilai Boolean opsional yang menetapkan apakah dry run akan dijalankan. Default-nya adalah false, yang artinya transportasi berlanjut.

Untuk mengonfirmasi kompatibilitas antara instans DB sumber dan tujuan tanpa benar-benar melakukan transportasi, atur dry_run ke true.

Contoh

Sebagai contoh, lihat Mentranspor basis data PostgreSQL ke tujuan dari sumber.

Referensi parameter basis data yang dapat ditranspor

Beberapa parameter mengontrol perilaku ekstensi pg_transport. Selanjutnya, Anda dapat menemukan deskripsi parameter ini.

pg_transport.num_workers

Jumlah pekerja yang akan digunakan dalam proses transportasi. Default-nya adalah 3. Nilai yang valid adalah 1–32. Bahkan transportasi basis data terbesar biasanya membutuhkan kurang dari 8 pekerja. Nilai pengaturan ini pada instans DB tujuan digunakan oleh tujuan dan sumber selama transportasi.

pg_transport.timing

Menentukan apakah akan melaporkan informasi waktu selama transportasi. Default-nya adalah true, artinya informasi waktu dilaporkan. Kami menyarankan agar Anda membiarkan parameter ini diatur ke true agar Anda dapat memantau progresnya. Untuk contoh hasilnya, lihat Mentranspor basis data PostgreSQL ke tujuan dari sumber.

pg_transport.work_mem

Jumlah maksimum memori untuk dialokasikan kepada setiap pekerja. Default-nya adalah 131072 kilobyte (KB) atau 262144 KB (256 MB), tergantung versi PostgreSQL. Nilai minimumnya adalah 64 megabyte (65536 KB). Nilai yang valid adalah kilobyte (KB) sebagai unit basis-2 biner, yaitu 1 KB = 1024 byte.

Transportasi mungkin menggunakan lebih sedikit memori dari yang ditentukan dalam parameter ini. Bahkan transportasi basis data besar biasanya membutuhkan kurang dari 256 MB (262144 KB) memori per pekerja.