Migrace databáze PostgreSQL pomocí výpisu a obnovení

PLATÍ PRO: Flexibilní server Azure Database for PostgreSQL – Jednoúčelový server Azure Database for PostgreSQL

Pomocí nástroje pg_dump můžete extrahovat databázi PostgreSQL do souboru výpisu. Metoda obnovení databáze závisí na formátu zvoleného výpisu. Pokud je výpis paměti pořízen ve formátu prostého formátu (což je výchozí -Fp, takže není nutné zadat žádnou konkrétní možnost), jedinou možností, jak ji obnovit, je použít psql, protože vypíše soubor ve formátu prostého textu. Pro další tři metody výpisu paměti: vlastní, adresář a tar, pg_restore by se měly použít.

Důležité

Pokyny a příkazy uvedené v tomto článku jsou navrženy tak, aby se spouštěly v terminálech Bash. To zahrnuje prostředí, jako jsou Subsystém Windows pro Linux (WSL), Azure Cloud Shell a další rozhraní kompatibilní s Bash. Ujistěte se, že používáte terminál Bash, abyste mohli postupovat podle kroků a spouštět příkazy popsané v této příručce. Použití jiného typu prostředí terminálu nebo prostředí může vést k rozdílům v chování příkazů a nemusí vést k zamýšleným výsledkům.

V tomto článku se zaměříme na prostý (výchozí) a formáty adresářů. Formát adresáře je užitečný, protože umožňuje použít více jader ke zpracování, což může výrazně zvýšit efektivitu, zejména pro velké databáze.

Azure Portal tento proces zjednodušuje prostřednictvím okna Připojení tím, že nabízí předkonfigurované příkazy přizpůsobené vašemu serveru s hodnotami nahrazenými vašimi uživatelskými daty. Je důležité si uvědomit, že okno Připojení je dostupné jenom pro flexibilní server Azure Database for PostgreSQL, a ne pro jednoúčelový server. Tuto funkci můžete použít takto:

  1. Přístup k webu Azure Portal: Nejprve přejděte na Azure Portal a zvolte okno Připojení.

    Screenshot showing the placement of Connect blade in Azure portal.

  2. Vyberte databázi: V okně Připojení najdete rozevírací seznam databází. Vyberte databázi, ze které chcete provést výpis paměti.

    Screenshot showing the dropdown where specific database can be chosen.

  3. Zvolte příslušnou metodu: V závislosti na velikosti databáze si můžete vybrat mezi dvěma metodami:

    • pg_dump & psql - použití jednotného textového souboru: Ideální pro menší databáze, tato možnost využívá jeden textový soubor pro proces výpisu a obnovení.
    • pg_dump & pg_restore - Použití více jader: U větších databází je tato metoda efektivnější, protože ke zpracování výpisu a obnovení používá více jader.

    Screenshot showing two possible dump methods.

  4. Příkazy pro kopírování a vkládání: Portál umožňuje použití pg_dump a psql příkazy pg_restore . Tyto příkazy jsou již nahrazeny hodnotami podle serveru a databáze, které jste zvolili. Tyto příkazy zkopírujte a vložte.

Požadavky

Pokud používáte jeden server nebo nemáte přístup k portálu flexibilního serveru, přečtěte si tuto stránku dokumentace. Obsahuje informace podobné tomu, co se zobrazuje v okně Připojení pro flexibilní server na portálu.

K procházení tohoto návodu potřebujete:

  • Server Azure Database for PostgreSQL, včetně pravidel brány firewall pro povolení přístupu.
  • pg_dump, psql, pg_restore a pg_dumpall pro případ, že chcete migrovat s rolemi a oprávněními, nainstalovanými nástroji příkazového řádku.
  • Rozhodněte se o umístění výpisu paměti: Zvolte místo, ze kterého chcete výpis paměti provést. Můžete ho provést z různých umístění, jako je samostatný virtuální počítač, Cloud Shell (kde už jsou nainstalované nástroje příkazového řádku, ale nemusí být v příslušné verzi, takže vždy zkontrolujte verzi pomocí, psql --versionnapříklad ) nebo vlastního přenosného počítače. Vždy mějte na paměti vzdálenost a latenci mezi serverem PostgreSQL a umístěním, ze kterého spouštíte výpis nebo obnovení.

Důležité

Je nezbytné používat pg_dumpnástroje , psqlpg_restore a pg_dumpall nástroje, které jsou buď ze stejné hlavní verze, nebo vyšší hlavní verze než databázový server, ze kterého exportujete data z nebo importujete data do. Pokud to neuděláte, může to vést k neúspěšné migraci dat. Pokud má váš cílový server vyšší hlavní verzi než zdrojový server, použijte nástroje, které mají stejnou hlavní verzi nebo vyšší než cílový server.

Poznámka:

Je důležité si uvědomit, že pg_dump je možné exportovat pouze jednu databázi najednou. Toto omezení platí bez ohledu na zvolenou metodu bez ohledu na to, jestli se používá jednotný soubor nebo více jader.

Dumping uživatelů a rolí pomocí pg_dumpall -r

pg_dump slouží k extrahování databáze PostgreSQL do souboru s výpisem paměti. Je však důležité pochopit, že pg_dump nevypisuje role ani definice uživatelů, protože se považují za globální objekty v rámci prostředí PostgreSQL. Pro komplexní migraci, včetně uživatelů a rolí, musíte použít pg_dumpall -r. Tento příkaz umožňuje zachytit všechny informace o rolích a uživatelech z prostředí PostgreSQL. Pokud migrujete v databázích na stejném serveru, můžete tento krok přeskočit a přejít do části Vytvořit novou databázi .

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

Pokud máte například server pojmenovaný mydemoserver a uživatel s názvem myuser spusťte následující příkaz:

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

Pokud používáte jeden server, vaše uživatelské jméno zahrnuje součást názvu serveru. Proto místo myuser, použít myuser@mydemoserver.

Výpis rolí z flexibilního serveru

V prostředí flexibilního serveru můžou rozšířená bezpečnostní opatření znamenat, že uživatelé nemají přístup k tabulce pg_authid, což je místo, kde se ukládají hesla rolí. Toto omezení má vliv na to, jak provádíte výpis stavu role, protože se standardní pg_dumpall -r příkaz pokusí o přístup k této tabulce pro hesla a kvůli nedostatku oprávnění selžou.

Při dumpingu rolí z flexibilního serveru je důležité zahrnout do --no-role-passwords příkazu pg_dumpall možnost. Tato možnost brání pg_dumpall v pokusu pg_authid o přístup k tabulce, kterou nemůže číst kvůli omezením zabezpečení.

K úspěšnému výpisu rolí z flexibilního serveru použijte následující příkaz:

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

Pokud máte například server s názvem , uživatel s mydemoservernázvem myuser, spusťte následující příkaz:

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

Vyčištění výpisu stavu rolí

Při migraci výstupního souboru roles.sql můžou být určité role a atributy, které nejsou v novém prostředí použitelné nebo přípustné. Tady je postup, který je potřeba vzít v úvahu:

  • Odebrání atributů, které můžou nastavit jenom superuživatelé: Pokud migrujete do prostředí, kde nemáte oprávnění superuživatele, odeberte atributy jako NOSUPERUSER a NOBYPASSRLS z výpisu stavu rolí.

  • Vyloučení uživatelů specifických pro službu: Vyloučit uživatele služby s jedním serverem, například azure_superuser nebo azure_pg_admin. Ty jsou specifické pro službu a automaticky se vytvoří v novém prostředí.

K vyčištění výpisu stavu rolí použijte následující sed příkaz:

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

Tento příkaz odstraní řádky obsahující azure_superuser, , azure_pg_admin, azuresuřádky začínající CREATE ROLE replication a ALTER ROLE replicationa odebere NOSUPERUSER a NOBYPASSRLS atributy z ALTER ROLE příkazů.

Vytvoření souboru s výpisem paměti, který obsahuje data, která se mají načíst

Pokud chcete exportovat existující místní databázi PostgreSQL nebo do souboru skriptu SQL, spusťte ve stávajícím prostředí následující příkaz:

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

Pokud máte například server s názvem mydemoserver, uživatel s názvem myuser a databázi s názvem testdb, spusťte následující příkaz:

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

Pokud používáte jeden server, vaše uživatelské jméno zahrnuje součást názvu serveru. Proto místo myuser, použít myuser@mydemoserver.

Obnovení dat do cílové databáze

Obnovení rolí a uživatelů

Před obnovením databázových objektů se ujistěte, že jste správně vypsali a vyčistili role. Pokud migrujete v databázích na stejném serveru, nemusí být potřeba obě role zahazovat a obnovovat. Pro migrace mezi různými servery nebo prostředími je ale tento krok zásadní.

Pokud chcete obnovit role a uživatele do cílové databáze, použijte následující příkaz:

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

Nahraďte <server_name> názvem cílového serveru a <user_name> uživatelským jménem. Tento příkaz pomocí psql nástroje spustí příkazy SQL obsažené v roles.sql souboru a efektivně obnoví role a uživatele do cílové databáze.

Pokud máte například server s názvem , uživatel s mydemoservernázvem myuser, spusťte následující příkaz:

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

Pokud používáte jeden server, vaše uživatelské jméno zahrnuje součást názvu serveru. Proto místo myuser, použít myuser@mydemoserver.

Poznámka:

Pokud už máte uživatele se stejnými názvy na jednoúčelovém serveru nebo na místním serveru, ze kterého migrujete, a cílový server, mějte na paměti, že tento proces obnovení může změnit hesla pro tyto role. V důsledku toho můžou všechny následné příkazy, které je potřeba provést, vyžadovat aktualizovaná hesla. To neplatí, pokud je váš zdrojový server flexibilním serverem, protože flexibilní server neumožňuje uživatelům vypisovat hesla z důvodu vylepšených bezpečnostních opatření.

Vytvoření nové databáze

Před obnovením databáze možná budete muset vytvořit novou prázdnou databázi. K tomu musí mít CREATEDB uživatel, který používáte, oprávnění. Tady jsou dvě běžně používané metody:

  1. Použití createdb nástrojecreatedb Program umožňuje vytvoření databáze přímo z příkazového řádku Bash, aniž by bylo nutné se přihlásit k PostgreSQL nebo opustit prostředí operačního systému. Například:

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

    Pokud máte například server s názvem mydemoserver, uživatel s názvem myuser a novou databázi, kterou chcete vytvořit, je testdb_copy, spusťte následující příkaz:

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

    Pokud používáte jeden server, vaše uživatelské jméno zahrnuje součást názvu serveru. Proto místo myuser, použít myuser@mydemoserver.

  2. Pomocí příkazu SQL vytvoříte databázi pomocí příkazu SQL, budete se muset připojit k serveru PostgreSQL pomocí rozhraní příkazového řádku nebo nástroje pro správu databáze. Po připojení můžete k vytvoření nové databáze použít následující příkaz SQL:

CREATE DATABASE <new database name>;

Nahraďte <new database name> názvem, který chcete dát nové databázi. Pokud například chcete vytvořit databázi s názvem testdb_copy, příkaz by byl:

CREATE DATABASE testdb_copy;

Obnovení výpisu paměti

Po vytvoření cílové databáze můžete obnovit data do této databáze ze souboru s výpisem paměti. Během obnovení zapíšete do souboru všechny chyby errors.log a po dokončení obnovení zkontrolujte jeho obsah.

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

Pokud máte například server s názvem , uživatel s mydemoservernázvem myuser a novou databázi s názvem testdb_copy, spusťte následující příkaz:

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

Kontrola po obnovení

Po dokončení procesu obnovení je důležité zkontrolovat errors.log v souboru všechny chyby, ke kterým mohlo dojít. Tento krok je zásadní pro zajištění integrity a úplnosti obnovených dat. Vyřešte všechny problémy zjištěné v souboru protokolu, abyste zachovali spolehlivost databáze.

Optimalizace procesu migrace

Při práci s velkými databázemi může být proces výpisu a obnovení zdlouhavý a může vyžadovat optimalizaci, aby se zajistila efektivita a spolehlivost. Je důležité vědět o různých faktorech, které můžou ovlivnit výkon těchto operací, a provést kroky k jejich optimalizaci.

Podrobné pokyny k optimalizaci procesu výpisu a obnovení najdete v článku o osvědčených postupech pro pg_dump a pg_restore . Tento prostředek poskytuje komplexní informace a strategie, které mohou být užitečné pro zpracování velkých databází.

Další kroky