Topik ini menjelaskan cara menggunakan perintah pg_dumpall, pg_dump, dan pg_restore untuk melakukan migrasi database PostgreSQL yang dikelola sendiri ke .
Jika database sumber Anda adalah instans ApsaraDB RDS for PostgreSQL, lihat Migrasi data dari instans ApsaraDB RDS for PostgreSQL ke kluster PolarDB for PostgreSQL.
Prasyarat
Kluster tujuan harus memiliki ruang penyimpanan yang lebih besar daripada database PostgreSQL yang dikelola sendiri Anda.
Catatan penggunaan
Ini adalah migrasi data penuh. Untuk mencegah ketidaksesuaian data, hentikan semua layanan dan operasi write pada database yang dikelola sendiri sebelum memulai migrasi.
Persiapan
-
Buat instance ECS yang menjalankan Linux. Tutorial ini menggunakan instance ECS yang menjalankan Ubuntu 16.04 64-bit. Untuk informasi selengkapnya, lihat Create an ECS instance.
Catatan-
Instance ECS dan kluster tujuan harus berada dalam virtual private cloud (VPC) yang sama.
-
Anda dapat membuat instance ECS pay-as-you-go dan melepasnya setelah migrasi selesai.
-
-
Instal PostgreSQL pada instance ECS untuk memulihkan data. Untuk informasi selengkapnya, lihat PostgreSQL official documentation.
CatatanPastikan versi PostgreSQL yang Anda instal sama dengan versi database PostgreSQL yang dikelola sendiri Anda.
Langkah 1: Backup database yang dikelola sendiri
-
Pada server database PostgreSQL yang dikelola sendiri, jalankan perintah berikut untuk mencadangkan semua informasi role.
pg_dumpall -U <username> -h <hostname> -p <port> -r -f <filename>Parameter:
-
<username>: Akun login untuk database PostgreSQL yang dikelola sendiri Anda.
-
<hostname>: Titik akhir database PostgreSQL yang dikelola sendiri Anda. Gunakan localhost jika Anda menjalankan perintah di server database.
-
<port>: Nomor port database.
-
<filename>: Nama file backup output.
Contoh:
pg_dumpall -U postgres -h localhost -p 5432 -r -f roleinfo.sql -
-
Saat diminta memasukkan
Password:, masukkan password untuk akun database. -
Gunakan perintah
vimuntuk menggantiSUPERUSERdenganpolar_superuserdalam file backup informasi role.CatatanJika file backup informasi role tidak berisi
SUPERUSER, Anda dapat melewati langkah ini.-- PostgreSQL database cluster dump -- SET default_transaction_read_only = off; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; -- -- Roles -- CREATE ROLE data1; ALTER ROLE data1 WITH NOSUPERUSER INHERIT CREATEROLE CREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md5xxx'; CREATE ROLE manisha; ALTER ROLE manisha WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'mdxxx'; CREATE ROLE postgres; ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'md5xxx'; CREATE ROLE testuser; ALTER ROLE testuser WITH NOSUPERUSER INHERIT NOCREATEROLE CREATEDB LOGIN NOREPLICATION NOBYPASSRLS; -- -- PostgreSQL database cluster dump complete -
Pada server database PostgreSQL yang dikelola sendiri, jalankan perintah berikut untuk mencadangkan data database.
pg_dump -U <username> -h <hostname> -p <port> <dbname> -Fd -j <njobs> -f <dumpdir>Parameter:
-
<username>: Akun login untuk database PostgreSQL yang dikelola sendiri Anda.
-
<hostname>: Titik akhir database PostgreSQL yang dikelola sendiri Anda. Gunakan localhost jika Anda menjalankan perintah di server database.
-
<port>: Nomor port database.
-
<dbname>: Nama database yang akan dicadangkan.
-
<njobs>: Jumlah job konkuren yang digunakan untuk backup.
Catatan-
Nilai parameter yang lebih tinggi mengurangi waktu dump tetapi juga meningkatkan beban pada server database.
-
Jika database PostgreSQL yang dikelola sendiri Anda merupakan versi sebelum 9.2, Anda juga harus menentukan parameter
--no-synchronized-snapshots.
-
-
<dumpdir>: Direktori output untuk file backup.
Contoh:
pg_dump -U postgres -h localhost -p 5432 mytestdata -Fd -j 5 -f postgresdump -
-
Saat diminta memasukkan
Password:, masukkan password untuk akun database. -
Tunggu hingga proses backup selesai. Data dicadangkan ke direktori yang ditentukan, yaitu postgresdump dalam contoh ini.
Langkah 2: Migrasi data ke
-
Unggah direktori yang berisi file backup ke instance ECS.
CatatanIni mencakup file backup informasi role dan file backup database.
-
Pada instance ECS, jalankan perintah berikut untuk mengimpor informasi role dari file backup ke kluster .
psql -U <username> -h <hostname> -p <port> -d <dbname> -f <filename>Parameter:
-
<username>: Akun login untuk database .
-
<hostname>: Titik akhir pribadi primary dari kluster .
-
<port>: Nomor port database. Untuk informasi selengkapnya, lihat View the endpoint and port number.
-
<dbname>: Nama database yang akan dihubungi.
-
<filename>: Nama file backup informasi role.
psql -U gctest -h pc-xxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -d testdb -p 1921 -f roleinfo.sql -
-
Saat diminta memasukkan
Password:, masukkan password untuk akun database. -
Pada instance ECS, jalankan perintah berikut untuk memulihkan data database ke kluster .
pg_restore -U <username> -h <hostname> -p <port> -d <dbname> -j <njobs> <dumpdir>Parameter:
-
<username>: Akun login untuk database .
-
<hostname>: Titik akhir pribadi primary dari kluster . Untuk informasi selengkapnya, lihat View or apply for an endpoint.
-
<port>: Nomor port database. Untuk informasi selengkapnya, lihat View the endpoint and port number.
-
<dbname>: Nama database tujuan tempat data akan dipulihkan.
CatatanDatabase tujuan harus sudah ada. Jika belum, buat terlebih dahulu.
-
<njobs>: Jumlah job konkuren yang digunakan untuk pemulihan.
CatatanOpsi ini mengurangi waktu pemulihan tetapi juga meningkatkan beban pada server database.
-
<dumpdir>: Direktori yang berisi file backup.
Contoh:
pg_restore -U gctest -h pc-mxxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -p 1921 -d mytestdata -j 6 postgresdump -
-
Saat diminta memasukkan
Password:, masukkan password untuk akun database.CatatanJika Anda lupa password, lihat Manage a database account.
Tunggu hingga migrasi data selesai.