Memigrasikan database PostgreSQL Anda menggunakan dump and restore

BERLAKU UNTUK: Azure Database for PostgreSQL - Server Tunggal Azure Database for PostgreSQL - Server Fleksibel

Anda dapat menggunakan pg_dump untuk mengekstrak database PostgreSQL ke file dump. Metode untuk memulihkan database tergantung pada format cadangan yang Anda pilih. Jika cadangan Anda diambil dengan format biasa (yang merupakan default -Fp, jadi tidak ada opsi khusus yang perlu ditentukan), maka satu-satunya opsi untuk memulihkannya adalah dengan menggunakan psql, karena menghasilkan file teks biasa. Untuk tiga metode cadangan lainnya: kustom, direktori, dan tar, pg_restore harus digunakan.

Penting

Instruksi dan perintah yang disediakan dalam artikel ini dirancang untuk dijalankan di terminal bash. Ini termasuk lingkungan seperti Subsistem Windows untuk Linux (WSL), Azure Cloud Shell, dan antarmuka lain yang kompatibel dengan bash. Pastikan Anda menggunakan terminal bash untuk mengikuti langkah-langkah dan menjalankan perintah yang dirinci dalam panduan ini. Menggunakan jenis terminal atau lingkungan shell yang berbeda dapat mengakibatkan perbedaan perilaku perintah dan mungkin tidak menghasilkan hasil yang dimaksudkan.

Dalam artikel ini, kami berfokus pada format biasa (default) dan direktori. Format direktori berguna karena memungkinkan Anda menggunakan beberapa inti untuk pemrosesan, yang dapat secara signifikan meningkatkan efisiensi, terutama untuk database besar.

portal Azure menyederhanakan proses ini melalui bilah Koneksi dengan menawarkan perintah yang telah dikonfigurasi sebelumnya yang disesuaikan dengan server Anda, dengan nilai yang diganti dengan data pengguna Anda. Penting untuk dicatat bahwa bilah Koneksi hanya tersedia untuk Azure Database for PostgreSQL - Server Fleksibel dan bukan untuk Server Tunggal. Berikut cara menggunakan fitur ini:

  1. Akses portal Azure: Pertama, buka portal Azure dan pilih bilah Koneksi.

    Screenshot showing the placement of Connect blade in Azure portal.

  2. Pilih database Anda: Di bilah Koneksi, Anda menemukan daftar dropdown database Anda. Pilih database tempat Anda ingin melakukan pencadangan.

    Screenshot showing the dropdown where specific database can be chosen.

  3. Pilih metode yang sesuai: Bergantung pada ukuran database Anda, Anda dapat memilih di antara dua metode:

    • pg_dump & psql - menggunakan file teks tunggal: Ideal untuk database yang lebih kecil, opsi ini menggunakan satu file teks untuk proses pencadangan dan pemulihan.
    • pg_dump & pg_restore - menggunakan beberapa inti: Untuk database yang lebih besar, metode ini lebih efisien karena menggunakan beberapa inti untuk menangani proses pencadangan dan pemulihan.

    Screenshot showing two possible dump methods.

  4. Perintah salin dan tempel: Portal memberi Anda perintah dan atau psqlpg_restore siap digunakanpg_dump. Perintah ini dilengkapi dengan nilai yang sudah diganti sesuai dengan server dan database yang Telah Anda pilih. Salin dan tempel perintah ini.

Prasyarat

Jika Anda menggunakan Server Tunggal, atau tidak memiliki akses ke portal Server Fleksibel, baca halaman dokumentasi ini. Ini berisi informasi yang mirip dengan apa yang disajikan di bilah Koneksi untuk Server Fleksibel di portal.

Untuk menelusuri panduan cara kerja ini, Anda perlu:

  • Server Azure Database for PostgreSQL, termasuk aturan firewall untuk mengizinkan akses.
  • pg_dump, psql, pg_restore, dan pg_dumpall jika Anda ingin bermigrasi dengan peran dan izin, utilitas baris perintah terinstal.
  • Tentukan lokasi untuk cadangan: Pilih tempat tempat Anda ingin melakukan pencadangan. Ini dapat dilakukan dari berbagai lokasi, seperti VM terpisah, cloud shell (di mana utilitas baris perintah sudah diinstal, tetapi mungkin tidak dalam versi yang sesuai, jadi selalu periksa versi menggunakan, misalnya, psql --version), atau laptop Anda sendiri. Selalu ingat jarak dan latensi antara server PostgreSQL dan lokasi tempat Anda menjalankan cadangan atau pemulihan.

Penting

Sangat penting untuk menggunakan pg_dumputilitas , psql, pg_restore dan pg_dumpall yang merupakan versi utama yang sama atau versi utama yang lebih tinggi daripada server database tempat Anda mengekspor data atau mengimpor data. Gagal melakukannya dapat mengakibatkan migrasi data yang gagal. Jika server target Anda memiliki versi utama yang lebih tinggi daripada server sumber, gunakan utilitas yang merupakan versi utama yang sama atau lebih tinggi dari server target.

Catatan

Penting untuk diketahui bahwa pg_dump hanya dapat mengekspor satu database pada satu waktu. Batasan ini berlaku terlepas dari metode yang telah Anda pilih, baik menggunakan file tunggal atau beberapa inti.

Mencadangkan pengguna dan peran dengan pg_dumpall -r

pg_dump digunakan untuk mengekstrak database PostgreSQL ke dalam file cadangan. Namun, sangat penting untuk dipahami bahwa pg_dump tidak membuang peran atau definisi pengguna, karena ini dianggap sebagai objek global dalam lingkungan PostgreSQL. Untuk migrasi komprehensif, termasuk pengguna dan peran, Anda perlu menggunakan pg_dumpall -r. Perintah ini memungkinkan Anda untuk mengambil semua peran dan informasi pengguna dari lingkungan PostgreSQL Anda. Jika Anda bermigrasi dalam database di server yang sama, jangan ragu untuk melewati langkah ini dan pindah ke bagian Buat database baru.

pg_dumpall -r -h <server name> -U <user name> > roles.sql

Misalnya, jika Anda memiliki server bernama mydemoserver dan pengguna bernama myuser jalankan perintah berikut:

pg_dumpall -r -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

Jika Anda menggunakan Server Tunggal, nama pengguna Anda menyertakan komponen nama server. Oleh karena itu, alih-alih myuser, gunakan myuser@mydemoserver.

Mencadangkan Peran dari Server Fleksibel

Di lingkungan Server Fleksibel, langkah-langkah keamanan yang ditingkatkan berarti pengguna tidak memiliki akses ke tabel pg_authid, di mana kata sandi peran disimpan. Pembatasan ini memengaruhi cara Anda melakukan pembuangan peran, karena perintah standar pg_dumpall -r mencoba mengakses tabel ini untuk kata sandi dan gagal karena kurangnya izin.

Saat mencadangkan peran dari Server Fleksibel, sangat penting untuk menyertakan --no-role-passwords opsi dalam perintah Anda pg_dumpall . Opsi ini mencegah pg_dumpall upaya mengakses pg_authid tabel, yang tidak dapat dibaca karena pembatasan keamanan.

Agar berhasil mencadangkan peran dari Server Fleksibel, gunakan perintah berikut:

pg_dumpall -r --no-role-passwords -h <server name> -U <user name> > roles.sql

Misalnya, jika Anda memiliki server bernama mydemoserver, pengguna bernama myuser, jalankan perintah berikut:

pg_dumpall -r --no-role-passwords -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql

Membersihkan dump peran

Saat memigrasikan file roles.sql output mungkin menyertakan peran dan atribut tertentu yang tidak berlaku atau diizinkan di lingkungan baru. Berikut yang perlu Anda pertimbangkan:

  • Menghapus atribut yang hanya dapat diatur oleh superuser: Jika bermigrasi ke lingkungan di mana Anda tidak memiliki hak istimewa superuser, hapus atribut seperti NOSUPERUSER dan NOBYPASSRLS dari pembuangan peran.

  • Tidak termasuk pengguna khusus layanan: Kecualikan pengguna layanan Server Tunggal, seperti azure_superuser atau azure_pg_admin. Ini khusus untuk layanan dan akan dibuat secara otomatis di lingkungan baru.

Gunakan perintah berikut sed untuk membersihkan cadangan peran Anda:

sed -i '/azure_superuser/d; /azure_pg_admin/d; /azuresu/d; /^CREATE ROLE replication/d; /^ALTER ROLE replication/d; /^ALTER ROLE/ {s/NOSUPERUSER//; s/NOBYPASSRLS//;}' roles.sql

Perintah ini menghapus baris yang berisi azure_superuser, , azure_pg_adminazuresu, baris yang dimulai dengan CREATE ROLE replication dan ALTER ROLE replication, dan menghapus NOSUPERUSER atribut dan NOBYPASSRLS dari ALTER ROLE pernyataan.

Membuat file dump yang berisi data yang akan dimuat

Untuk mengekspor database PostgreSQL yang ada secara lokal atau di VM ke file skrip sql, jalankan perintah berikut di lingkungan Anda yang sudah ada:

pg_dump <database name> -h <server name> -U <user name> > <database name>_dump.sql

Misalnya, jika Anda memiliki server bernama mydemoserver, pengguna bernama myuser dan database yang disebut testdb, jalankan perintah berikut:

pg_dump testdb -h mydemoserver.postgres.database.azure.com -U myuser > testdb_dump.sql

Jika Anda menggunakan Server Tunggal, nama pengguna Anda menyertakan komponen nama server. Oleh karena itu, alih-alih myuser, gunakan myuser@mydemoserver.

Memulihkan data ke dalam database target

Memulihkan peran dan pengguna

Sebelum memulihkan objek database Anda, pastikan Anda telah membuang dan membersihkan peran dengan benar. Jika Anda bermigrasi dalam database di server yang sama, mencadangkan peran dan memulihkannya mungkin tidak diperlukan. Namun, untuk migrasi di berbagai server atau lingkungan, langkah ini sangat penting.

Untuk memulihkan peran dan pengguna ke database target, gunakan perintah berikut:

psql -f roles.sql -h <server_name> -U <user_name>

Ganti <server_name> dengan nama server target Anda dan <user_name> dengan nama pengguna Anda. Perintah ini menggunakan psql utilitas untuk menjalankan perintah SQL yang terkandung dalam roles.sql file, secara efektif memulihkan peran dan pengguna ke database target Anda.

Misalnya, jika Anda memiliki server bernama mydemoserver, pengguna bernama myuser, jalankan perintah berikut:

psql -f roles.sql -h mydemoserver.postgres.database.azure.com -U myuser

Jika Anda menggunakan Server Tunggal, nama pengguna Anda menyertakan komponen nama server. Oleh karena itu, alih-alih myuser, gunakan myuser@mydemoserver.

Catatan

Jika Anda sudah memiliki pengguna dengan nama yang sama di Server Tunggal atau server lokal tempat Anda bermigrasi, dan server target Anda, ketahuilah bahwa proses pemulihan ini mungkin mengubah kata sandi untuk peran ini. Akibatnya, setiap perintah berikutnya yang perlu Anda jalankan mungkin memerlukan kata sandi yang diperbarui. Ini tidak berlaku jika server sumber Anda adalah Server Fleksibel, karena Server Fleksibel tidak mengizinkan pencadangan kata sandi untuk pengguna karena langkah-langkah keamanan yang ditingkatkan.

Buat database baru

Sebelum memulihkan database, Anda mungkin perlu membuat database baru yang kosong. Untuk melakukan ini, pengguna yang Anda gunakan harus memiliki CREATEDB izin. Berikut adalah dua metode yang umum digunakan:

  1. Menggunakan createdb utilitas Program createdb ini memungkinkan pembuatan database langsung dari baris perintah bash, tanpa perlu masuk ke PostgreSQL atau meninggalkan lingkungan sistem operasi. Contohnya:

    createdb <new database name> -h <server name> -U <user name>
    

    Misalnya, jika Anda memiliki server bernama mydemoserver, pengguna bernama myuser dan database baru yang ingin Anda buat adalah testdb_copy, jalankan perintah berikut:

    createdb testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser
    

    Jika Anda menggunakan Server Tunggal, nama pengguna Anda menyertakan komponen nama server. Oleh karena itu, alih-alih myuser, gunakan myuser@mydemoserver.

  2. Menggunakan perintah SQL Untuk membuat database menggunakan perintah SQL, Anda harus terhubung ke server PostgreSQL Anda melalui antarmuka baris perintah atau alat manajemen database. Setelah tersambung, Anda bisa menggunakan perintah SQL berikut untuk membuat database baru:

CREATE DATABASE <new database name>;

Ganti <new database name> dengan nama yang ingin Anda berikan database baru Anda. Misalnya, untuk membuat database bernama testdb_copy, perintahnya adalah:

CREATE DATABASE testdb_copy;

Memulihkan cadangan

Setelah membuat database target, Anda bisa memulihkan data ke database ini dari file cadangan. Selama pemulihan, catat kesalahan apa pun ke errors.log file dan periksa kontennya untuk kesalahan apa pun setelah pemulihan selesai.

psql -f <database name>_dump.sql <new database name> -h <server name> -U <user name> 2> errors.log

Misalnya, jika Anda memiliki server bernama mydemoserver, pengguna bernama myuser dan database baru bernama testdb_copy, jalankan perintah berikut:

psql -f testdb_dump.sql testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser 2> errors.log

Pemeriksaan pasca-pemulihan

Setelah proses pemulihan selesai, penting untuk meninjau errors.log file untuk kesalahan apa pun yang mungkin telah terjadi. Langkah ini sangat penting untuk memastikan integritas dan kelengkapan data yang dipulihkan. Atasi masalah apa pun yang ditemukan dalam file log untuk mempertahankan keandalan database Anda.

Mengoptimalkan proses migrasi

Saat bekerja dengan database besar, proses pencadangan dan pemulihan dapat panjang dan mungkin memerlukan pengoptimalan untuk memastikan efisiensi dan keandalan. Penting untuk mengetahui berbagai faktor yang dapat memengaruhi performa operasi ini dan mengambil langkah-langkah untuk mengoptimalkannya.

Untuk panduan terperinci tentang mengoptimalkan proses pencadangan dan pemulihan, lihat artikel Praktik terbaik untuk pg_dump dan pg_restore . Sumber daya ini menyediakan informasi dan strategi komprehensif yang dapat bermanfaat untuk menangani database besar.

Langkah berikutnya