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 – 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 -Fp
beá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 Connect panelen keresztül egyszerűsíti ezt a folyamatot, ha 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 Connect panel csak a 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:
Hozzáférés az Azure Portalhoz: Először nyissa meg az Azure Portalt, és válassza a Csatlakozás panelt.
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.
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.
Parancsok másolása és beillesztése: A portál használatra kész
pg_dump
éspsql
parancsokatpg_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. Olyan információkat tartalmaz, amelyek hasonlóak ahhoz, amit a Rugalmas kiszolgáló csatlakoztatása panelen a portálon talál.
Feljegyzés
Mivel pg_dump
, psql
pg_restore
és pg_dumpall
a segédprogramok mindegyike a libpq-re támaszkodik, használhatja az általa kínált támogatott környezeti változókat, vagy használhatja a jelszófájlt, hogy elkerülje a jelszó kérését minden alkalommal, amikor bármelyik parancsot futtatja.
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_dump
segé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.
Feljegyzé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 -r
kell.
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
vagyazure_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_superuser
a következőkkel CREATE ROLE replication
azure_pg_admin
kezdődnek, azuresu
és ALTER ROLE replication
eltá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 testdb
van, 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
Feljegyzé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:
Segédprogram használata
createdb
Acreatedb
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ó nevemyuser
és a létrehoznitestdb_copy
kí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 ahelyett
myuser
, hogy a .myuser@mydemoserver
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_copy
adatbá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_copy
van, 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.
Következő lépések
- Ajánlott eljárások pg_dump és pg_restore.
- Az adatbázisok Azure Database for PostgreSQL-be való migrálásával kapcsolatos további információkért tekintse meg az adatbázis-migrálási útmutatót.