A PostgreSQL-adatbázis migrálása memóriakép és visszaállítás használatával

A következőkre vonatkozik: Azure Database for PostgreSQL – Önálló azure database for PostgreSQL – rugalmas kiszolgáló

A pg_dump használatával nyerheti ki PostgreSQL-adatbázisokat memóriaképfájlokba. Az adatbázis visszaállításának módja a választott memóriakép formátumától függ. Ha a memóriakép egyszerű formátumú (ez az alapértelmezett -Fpbeállítás, ezért nincs szükség konkrét beállítás megadására), akkor a visszaállítás egyetlen lehetősége a psql használatával történik, mivel egyszerű szöveges fájlt ad ki. A másik három memóriakép-metódus esetében: egyéni, könyvtár és kátrány, pg_restore kell használni.

Fontos

A cikkben szereplő utasítások és parancsok bash-terminálokban való végrehajtására szolgálnak. Ilyenek például a Linuxos Windows-alrendszer (WSL), az Azure Cloud Shell és más bash-kompatibilis felületek. Győződjön meg arról, hogy bash-terminált használ a lépések végrehajtásához, és hajtsa végre az ebben az útmutatóban részletezett parancsokat. Más típusú terminál- vagy rendszerhéjkörnyezet használata a parancs viselkedésében eltéréseket eredményezhet, és nem feltétlenül eredményezi a kívánt eredményeket.

Ebben a cikkben az egyszerű (alapértelmezett) és a címtárformátumokra összpontosítunk. A címtárformátum hasznos, mivel lehetővé teszi, hogy több magot használjon a feldolgozáshoz, ami jelentősen növelheti a hatékonyságot, különösen a nagy adatbázisok esetében.

Az Azure Portal a Csatlakozás panelen keresztül egyszerűsíti ezt a folyamatot úgy, hogy előre konfigurált, a kiszolgálóra szabott parancsokat kínál a felhasználói adatokkal helyettesített értékekkel. Fontos megjegyezni, hogy a Csatlakozás panel csak rugalmas Azure Database for PostgreSQL-kiszolgálóhoz érhető el, önálló kiszolgálóhoz nem. A következő módon használhatja ezt a funkciót:

  1. Hozzáférés az Azure Portalhoz: Először nyissa meg az Azure Portalt, és válassza a Csatlakozás panelt.

    Screenshot showing the placement of Connect blade in Azure portal.

  2. Válassza ki az adatbázist: A Csatlakozás panelen megtalálja az adatbázisok legördülő listáját. Válassza ki azt az adatbázist, amelyből memóriaképet szeretne létrehozni.

    Screenshot showing the dropdown where specific database can be chosen.

  3. Válassza ki a megfelelő módszert: Az adatbázis méretétől függően két módszer közül választhat:

    • pg_dump > psql – egyedi szövegfájl használata: Ideális kisebb adatbázisokhoz, ez a beállítás egyetlen szövegfájlt használ a memóriakép- és visszaállítási folyamathoz.
    • pg_dump & pg_restore – több mag használata: Nagyobb adatbázisok esetén ez a módszer hatékonyabb, mivel több magot használ a memóriakép és a visszaállítási folyamat kezeléséhez.

    Screenshot showing two possible dump methods.

  4. Parancsok másolása és beillesztése: A portál használatra kész pg_dump és psql parancsokat pg_restore biztosít. Ezek a parancsok a kiválasztott kiszolgáló és adatbázis szerint már helyettesített értékeket tartalmaznak. Másolja és illessze be ezeket a parancsokat.

Előfeltételek

Ha egyetlen kiszolgálót használ, vagy nem rendelkezik hozzáféréssel a rugalmas kiszolgáló portálhoz, olvassa el ezt a dokumentációs oldalt. A portál rugalmas kiszolgálójának Csatlakozás paneljén láthatóhoz hasonló információkat tartalmaz.

Az útmutató végigvezetéséhez a következőkre van szüksége:

  • Egy Azure Database for PostgreSQL-kiszolgáló, beleértve a hozzáférést engedélyező tűzfalszabályokat.
  • pg_dump, psql, pg_restore és pg_dumpall, ha szerepkörökkel és engedélyekkel szeretne migrálni, a parancssori segédprogramok telepítve vannak.
  • Döntse el a memóriakép helyét: Válassza ki azt a helyet, ahonnan a memóriaképet el szeretné végezni. Különböző helyekről, például egy külön virtuális gépről, a cloud shellről (ahol a parancssori segédprogramok már telepítve vannak, de előfordulhat, hogy nem a megfelelő verzióban vannak, ezért mindig ellenőrizze a verziót például psql --version), vagy a saját laptopját. Mindig tartsa szem előtt a PostgreSQL-kiszolgáló és a memóriakép vagy visszaállítás futtatásának helyétől való távolságot és késést.

Fontos

Azokat a pg_dumpsegédprogramokat psqlés pg_dumpall segédprogramokat kell használni, pg_restore amelyek azonos főverziójúak vagy magasabb főverziók, mint az adatbázis-kiszolgáló, amelybe adatokat exportál vagy adatokat importál. Ennek elmulasztása sikertelen adatmigrálást eredményezhet. Ha a célkiszolgáló nagyobb főverzióval rendelkezik, mint a forráskiszolgáló, használjon olyan segédprogramokat, amelyek azonos főverziójúak vagy magasabbak a célkiszolgálónál.

Megjegyzés:

Fontos tisztában lenni azzal, hogy pg_dump egyszerre csak egy adatbázis exportálható. Ez a korlátozás a választott módszertől függetlenül érvényes, függetlenül attól, hogy egyes fájlokat vagy több magot használ.

Felhasználók és szerepkörök memóriaképe a pg_dumpall -r

pg_dump PostgreSQL-adatbázis memóriaképfájlba való kinyerésére szolgál. Fontos azonban megérteni, hogy pg_dump a szerepkörök és a felhasználók definíciói nem jelennek meg, mivel ezek globális objektumoknak számítanak a PostgreSQL-környezetben. Az átfogó migráláshoz, beleértve a felhasználókat és a szerepköröket, használnia pg_dumpall -rkell. Ez a parancs lehetővé teszi az összes szerepkör- és felhasználói információ rögzítését a PostgreSQL-környezetből. Ha ugyanazon a kiszolgálón lévő adatbázisokon belül migrál, nyugodtan hagyja ki ezt a lépést, és lépjen az Új adatbázis létrehozása szakaszra.

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

Ha például egy kiszolgáló neve mydemoserver és egy felhasználó neve myuser fut, futtassa a következő parancsot:

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

Ha egyetlen kiszolgálót használ, a felhasználónév tartalmazza a kiszolgálónév összetevőt. Ezért ahelyettmyuser, hogy a .myuser@mydemoserver

Memóriakép-szerepkörök rugalmas kiszolgálóról

Rugalmas kiszolgálói környezetben a továbbfejlesztett biztonsági intézkedések azt jelentik, hogy a felhasználók nem férnek hozzá a pg_authid táblához, amely a szerepkörjelszavak tárolására szolgál. Ez a korlátozás hatással van a szerepkör-memóriakép végrehajtására, mivel a standard pg_dumpall -r parancs jelszóval próbál hozzáférni a táblához, és engedély hiányában meghiúsul.

Ha rugalmas kiszolgálóról hoz létre szerepköröket, fontos, hogy a parancsba belefoglalja pg_dumpall a --no-role-passwords lehetőséget. Ez a beállítás megakadályozza pg_dumpall , hogy hozzáférjen a pg_authid táblához, amelyet biztonsági korlátozások miatt nem tud olvasni.

A rugalmas kiszolgáló szerepköreinek sikeres kivételéhez használja a következő parancsot:

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

Ha például egy kiszolgáló neve mydemoserver, egy felhasználó neve myuser, futtassa a következő parancsot:

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

A szerepkörök memóriaképének tisztítása

A kimeneti fájl roles.sql migrálása olyan szerepköröket és attribútumokat tartalmazhat, amelyek nem alkalmazhatók vagy nem engedélyezettek az új környezetben. Az alábbiakat kell figyelembe vennie:

  • Olyan attribútumok eltávolítása, amelyeket csak a felügyelők állíthatnak be: Ha olyan környezetbe migrál, ahol nem rendelkezik superuser jogosultságokkal, távolítsa el a szerepkör-memóriaképhez hasonló és NOBYPASSRLS ehhez hasonló NOSUPERUSER attribútumokat.

  • Szolgáltatásspecifikus felhasználók kizárása: Egykiszolgálós szolgáltatásfelhasználók kizárása, például azure_superuser vagy azure_pg_admin. Ezek a szolgáltatásra vonatkoznak, és automatikusan létrejönnek az új környezetben.

A szerepkörök memóriaképének törléséhez használja az alábbi sed parancsot:

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

Ez a parancs törli azokat a sorokat, amelyek azure_superusera következőkkel CREATE ROLE replicationazure_pg_adminkezdődnek, azuresués ALTER ROLE replicationeltávolítják azokat és NOBYPASSRLS az attribútumokat az NOSUPERUSER utasításokbólALTER ROLE.

A betöltendő adatokat tartalmazó memóriaképfájl létrehozása

Ha a meglévő PostgreSQL-adatbázist a helyszínen vagy egy virtuális gépen sql-szkriptfájlba szeretné exportálni, futtassa a következő parancsot a meglévő környezetben:

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

Ha például egy kiszolgáló neve mydemoserver, egy felhasználó neve myuser és egy adatbázis neve testdbvan, futtassa a következő parancsot:

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

Ha egyetlen kiszolgálót használ, a felhasználónév tartalmazza a kiszolgálónév összetevőt. Ezért ahelyettmyuser, hogy a .myuser@mydemoserver

Adatok visszaállítása a céladatbázisba

Szerepkörök és felhasználók visszaállítása

Az adatbázis-objektumok visszaállítása előtt győződjön meg arról, hogy megfelelően dobta ki és tisztította meg a szerepköröket. Ha ugyanazon a kiszolgálón lévő adatbázisokon belül migrál, előfordulhat, hogy a szerepkörök memóriaképe és visszaállítása nem szükséges. A különböző kiszolgálókra vagy környezetekre irányuló migrálások esetében azonban ez a lépés kulcsfontosságú.

A szerepkörök és a felhasználók céladatbázisba való visszaállításához használja a következő parancsot:

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

Cserélje le <server_name> a célkiszolgáló nevére és <user_name> a felhasználónévre. Ez a parancs a psql segédprogrammal hajtja végre a fájlban roles.sql található SQL-parancsokat, hatékonyan visszaállítva a szerepköröket és a felhasználókat a céladatbázisba.

Ha például egy kiszolgáló neve mydemoserver, egy felhasználó neve myuser, futtassa a következő parancsot:

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

Ha egyetlen kiszolgálót használ, a felhasználónév tartalmazza a kiszolgálónév összetevőt. Ezért ahelyettmyuser, hogy a .myuser@mydemoserver

Megjegyzés:

Ha már rendelkezik ugyanazokkal a névvel az önálló kiszolgálón vagy a helyszíni kiszolgálón, ahonnan migrál, és a célkiszolgálón, vegye figyelembe, hogy ez a visszaállítási folyamat megváltoztathatja ezeknek a szerepköröknek a jelszavát. Következésképpen minden további végrehajtandó parancshoz szükség lehet a frissített jelszavakra. Ez nem vonatkozik arra az esetre, ha a forráskiszolgáló rugalmas kiszolgáló, mivel a rugalmas kiszolgáló a fokozott biztonsági intézkedések miatt nem engedélyezi a felhasználók számára a memóriaképek memóriaképét.

Új adatbázis létrehozása

Előfordulhat, hogy az adatbázis visszaállítása előtt létre kell hoznia egy új, üres adatbázist. Ehhez az Ön által használt felhasználónak rendelkeznie kell az CREATEDB engedéllyel. Íme két gyakran használt módszer:

  1. Segédprogram használata createdb A createdb program lehetővé teszi az adatbázis létrehozását közvetlenül a bash parancssorból anélkül, hogy be kellene jelentkeznie a PostgreSQL-be, vagy el kellene hagynia az operációs rendszer környezetét. Ilyenek például a következők:

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

    Ha például egy kiszolgáló neve mydemoserver, egy felhasználó neve myuser és a létrehozni testdb_copykívánt új adatbázis, futtassa a következő parancsot:

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

    Ha egyetlen kiszolgálót használ, a felhasználónév tartalmazza a kiszolgálónév összetevőt. Ezért ahelyettmyuser, hogy a .myuser@mydemoserver

  2. SQL-paranccsal Egy adatbázis SQL-paranccsal történő létrehozásához parancssori felületen vagy adatbázis-kezelő eszközzel kell csatlakoznia a PostgreSQL-kiszolgálóhoz. A csatlakozás után a következő SQL-paranccsal hozhat létre új adatbázist:

CREATE DATABASE <new database name>;

Cserélje le <new database name> az új adatbázis nevét. Egy névvel ellátott testdb_copyadatbázis létrehozásához például a következő parancsot kell megadni:

CREATE DATABASE testdb_copy;

A memóriakép visszaállítása

A céladatbázis létrehozása után visszaállíthatja az adatokat ebbe az adatbázisba a memóriaképfájlból. A visszaállítás során naplózza az esetleges hibákat egy errors.log fájlban, és ellenőrizze annak tartalmát a visszaállítás után.

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

Ha például egy kiszolgáló neve mydemoserver, egy felhasználó neve myuser és egy új adatbázis neve testdb_copyvan, futtassa a következő parancsot:

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

Visszaállítás utáni ellenőrzés

A visszaállítási folyamat befejezése után fontos áttekinteni a fájlt az errors.log esetlegesen előforduló hibák esetén. Ez a lépés elengedhetetlen a visszaállított adatok integritásának és teljességének biztosításához. A naplófájlban található problémák elhárítása az adatbázis megbízhatóságának fenntartása érdekében.

Az áttelepítési folyamat optimalizálása

Nagy adatbázisok használata esetén a memóriakép és a visszaállítási folyamat hosszadalmas lehet, és a hatékonyság és a megbízhatóság biztosítása érdekében optimalizálásra lehet szükség. Fontos tisztában lenni azokkal a tényezőkvel, amelyek befolyásolhatják ezeknek a műveleteknek a teljesítményét, és meg kell tenniük az optimalizálásukhoz szükséges lépéseket.

A memóriakép és a visszaállítási folyamat optimalizálásával kapcsolatos részletes útmutatásért tekintse meg a pg_dump és pg_restore ajánlott eljárásokat. Ez az erőforrás átfogó információkat és stratégiákat biztosít, amelyek hasznosak lehetnek a nagy adatbázisok kezeléséhez.

További lépések