Share via


Uw PostgreSQL-database migreren met behulp van dump en herstel

VAN TOEPASSING OP: Azure Database for PostgreSQL - Flexibele server

U kunt deze pg_dump gebruiken om een PostgreSQL-database te extraheren in een dumpbestand. De methode voor het herstellen van de database is afhankelijk van de indeling van de dump die u kiest. Als uw dump wordt genomen met de indeling zonder opmaak (dit is de standaardindeling -Fp, dus er hoeft geen specifieke optie te worden opgegeven), is de enige optie om deze te herstellen met behulp van psql, omdat er een tekstbestand zonder opmaak wordt uitgevoerd. Voor de andere drie dumpmethoden: aangepast, directory en tar moet pg_restore worden gebruikt.

Belangrijk

De instructies en opdrachten in dit artikel zijn ontworpen om te worden uitgevoerd in bash-terminals. Dit omvat omgevingen zoals Windows-subsysteem voor Linux (WSL), Azure Cloud Shell en andere bash-compatibele interfaces. Zorg ervoor dat u een bash-terminal gebruikt om de stappen te volgen en de opdrachten uit te voeren die in deze handleiding worden beschreven. Het gebruik van een ander type terminal- of shellomgeving kan leiden tot verschillen in opdrachtgedrag en levert mogelijk niet de beoogde resultaten op.

In dit artikel richten we ons op de gewone (standaard) en mapindelingen. De mapindeling is handig omdat u hiermee meerdere kernen kunt gebruiken voor verwerking, waardoor de efficiëntie aanzienlijk kan worden verbeterd, met name voor grote databases.

Azure Portal stroomlijnt dit proces via de blade Verbinding maken door vooraf geconfigureerde opdrachten aan te bieden die zijn afgestemd op uw server, met waarden die worden vervangen door uw gebruikersgegevens. Het is belangrijk te weten dat de blade Verbinding maken alleen beschikbaar is voor Azure Database for PostgreSQL - Flexible Server en niet voor één server. U kunt deze functie als volgt gebruiken:

  1. Toegang tot Azure Portal: ga eerst naar Azure Portal en kies de blade Verbinding maken.

    Schermopname van de plaatsing van de blade Verbinding maken in Azure Portal.

  2. Selecteer uw database: op de blade Verbinding maken vindt u een vervolgkeuzelijst met uw databases. Selecteer de database waaruit u een dump wilt uitvoeren.

    Schermopname van de vervolgkeuzelijst waarin een specifieke database kan worden gekozen.

  3. Kies de juiste methode: Afhankelijk van de grootte van uw database kunt u kiezen tussen twee methoden:

    • pg_dump & psql - gebruik van enkelvoudig tekstbestand: Ideaal voor kleinere databases, deze optie maakt gebruik van één tekstbestand voor het dump- en herstelproces.
    • pg_dump & pg_restore - het gebruik van meerdere kernen: Voor grotere databases is deze methode efficiënter omdat er meerdere kernen worden gebruikt voor het verwerken van het dump- en herstelproces.

    Schermopname van twee mogelijke dumpmethoden.

  4. Opdrachten voor kopiëren en plakken: de portal biedt u de mogelijkheden om deze te gebruiken en psql of pg_restore opdrachten te gebruikenpg_dump. Deze opdrachten worden geleverd met waarden die al zijn vervangen door de server en database die u hebt gekozen. Kopieer en plak deze opdrachten.

Vereisten

Als u één server gebruikt of geen toegang hebt tot de flexibele serverportal, leest u deze documentatiepagina. Het bevat informatie die vergelijkbaar is met wat wordt weergegeven op de blade Verbinding maken voor Flexibele server in de portal.

Notitie

Omdat pg_dump, pg_restore en pg_dumpall hulpprogramma's allemaal afhankelijk zijn van libpq, kunt u een van de ondersteunde omgevingsvariabelen gebruiken die het biedt, of u kunt het wachtwoordbestand gebruiken om te voorkomen dat telkens wanneer u een van deze opdrachten uitvoert, psqlwordt gevraagd om het wachtwoord.

Als u deze handleiding wilt doorlopen, hebt u het volgende nodig:

  • Een Azure Database for PostgreSQL-server, inclusief firewallregels om toegang toe te staan.
  • pg_dump, psql, pg_restore en pg_dumpall als u wilt migreren met functies en machtigingen, opdrachtregelprogramma's geïnstalleerd.
  • Bepaal de locatie voor de dump: kies de plaats waaruit u de dump wilt uitvoeren. Het kan worden gedaan vanaf verschillende locaties, zoals een afzonderlijke VM, cloudshell (waarbij de opdrachtregelprogramma's al zijn geïnstalleerd, maar mogelijk niet de juiste versie hebben, dus controleer altijd de versie met bijvoorbeeld psql --version) of uw eigen laptop. Houd altijd rekening met de afstand en latentie tussen de PostgreSQL-server en de locatie van waaruit u de dump of herstel uitvoert.

Belangrijk

Het is essentieel om de pg_dump, psqlpg_restore en pg_dumpall hulpprogramma's te gebruiken die van dezelfde primaire versie of een hogere primaire versie zijn dan de databaseserver waarnaar u gegevens exporteert of waarnaar u gegevens importeert. Als u dit niet doet, kan dit leiden tot een mislukte gegevensmigratie. Als uw doelserver een hogere primaire versie heeft dan de bronserver, gebruikt u hulpprogramma's die dezelfde primaire versie of hoger zijn dan de doelserver.

Notitie

Het is belangrijk om te weten dat pg_dump u slechts één database tegelijk kunt exporteren. Deze beperking geldt ongeacht de methode die u hebt gekozen, ongeacht of deze een enkel bestand of meerdere kernen gebruikt.

Gebruikers en rollen dumpen met pg_dumpall -r

pg_dump wordt gebruikt om een PostgreSQL-database te extraheren in een dumpbestand. Het is echter van cruciaal belang om te begrijpen dat pg_dump rollen of gebruikersdefinities niet worden gedumpt, omdat deze worden beschouwd als globale objecten in de PostgreSQL-omgeving. Voor een uitgebreide migratie, inclusief gebruikers en rollen, moet u gebruiken pg_dumpall -r. Met deze opdracht kunt u alle rol- en gebruikersgegevens uit uw PostgreSQL-omgeving vastleggen. Als u migreert binnen databases op dezelfde server, kunt u deze stap overslaan en naar de sectie Een nieuwe database maken gaan.

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

Als u bijvoorbeeld een server hebt met de naam mydemoserver en een gebruiker met de naam myuser , voert u de volgende opdracht uit:

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

Als u één server gebruikt, bevat uw gebruikersnaam het servernaamonderdeel. Gebruik daarom in plaats van myusermyuser@mydemoserver.

Rollen dumpen vanaf een flexibele server

In een flexibele serveromgeving hebben verbeterde beveiligingsmaatregelen het gevolg dat gebruikers geen toegang hebben tot de pg_authid tabel, waar rolwachtwoorden worden opgeslagen. Deze beperking is van invloed op hoe u een rollendump uitvoert, omdat de standaardopdracht pg_dumpall -r probeert toegang te krijgen tot deze tabel voor wachtwoorden en mislukt vanwege een gebrek aan machtigingen.

Wanneer u rollen van een flexibele server dumpt, is het van cruciaal belang om de --no-role-passwords optie in uw pg_dumpall opdracht op te nemen. Met deze optie voorkomt u dat pg_dumpall u toegang probeert te krijgen tot de pg_authid tabel, die niet kan worden gelezen vanwege beveiligingsbeperkingen.

Gebruik de volgende opdracht om rollen van een flexibele server te dumpen:

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

Als u bijvoorbeeld een server hebt met de naam mydemoserver, een gebruiker met de naam myuser, voert u de volgende opdracht uit:

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

De rollendump opschonen

Bij het migreren van het uitvoerbestand roles.sql kunnen bepaalde rollen en kenmerken zijn opgenomen die niet van toepassing of toegestaan zijn in de nieuwe omgeving. Dit is wat u moet overwegen:

  • Kenmerken verwijderen die alleen door supergebruikers kunnen worden ingesteld: als u migreert naar een omgeving waar u geen supergebruikersbevoegdheden hebt, verwijdert u kenmerken zoals NOSUPERUSER en NOBYPASSRLS uit de rollendump.

  • Servicespecifieke gebruikers uitsluiten: Servicegebruikers met één server uitsluiten, zoals azure_superuser of azure_pg_admin. Deze zijn specifiek voor de service en worden automatisch gemaakt in de nieuwe omgeving.

Gebruik de volgende sed opdracht om uw rollendump op te schonen:

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

Met deze opdracht verwijdert u regels met azure_superuser, , azure_pg_adminregels azuresudie beginnen met CREATE ROLE replication en ALTER ROLE replication, en verwijdert u de NOSUPERUSER en NOBYPASSRLS kenmerken uit ALTER ROLE instructies.

Een dumpbestand maken dat de gegevens bevat die moeten worden geladen

Als u uw bestaande PostgreSQL-database on-premises of in een VM wilt exporteren naar een SQL-scriptbestand, voert u de volgende opdracht uit in uw bestaande omgeving:

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

Als u bijvoorbeeld een server hebt met de naam mydemoserver, een gebruiker met de naam myuser en een database met de naam testdb, voert u de volgende opdracht uit:

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

Als u één server gebruikt, bevat uw gebruikersnaam het servernaamonderdeel. Gebruik daarom in plaats van myusermyuser@mydemoserver.

De gegevens herstellen in de doeldatabase

Rollen en gebruikers herstellen

Voordat u de databaseobjecten herstelt, moet u ervoor zorgen dat u de rollen correct hebt gedumpt en opgeschoond. Als u migreert binnen databases op dezelfde server, zijn de functies mogelijk niet nodig om de functies te dumpen en te herstellen. Voor migraties tussen verschillende servers of omgevingen is deze stap echter van cruciaal belang.

Gebruik de volgende opdracht om de rollen en gebruikers in de doeldatabase te herstellen:

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

Vervang <server_name> door de naam van uw doelserver en <user_name> door uw gebruikersnaam. Deze opdracht maakt gebruik van het hulpprogramma voor het psql uitvoeren van de SQL-opdrachten in het roles.sql bestand, waarbij de rollen en gebruikers effectief worden hersteld naar uw doeldatabase.

Als u bijvoorbeeld een server hebt met de naam mydemoserver, een gebruiker met de naam myuser, voert u de volgende opdracht uit:

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

Als u één server gebruikt, bevat uw gebruikersnaam het servernaamonderdeel. Gebruik daarom in plaats van myusermyuser@mydemoserver.

Notitie

Als u al gebruikers met dezelfde namen op uw enkele server of on-premises server hebt waaruit u migreert en uw doelserver, moet u er rekening mee houden dat dit herstelproces de wachtwoorden voor deze rollen kan wijzigen. Daarom zijn voor eventuele volgende opdrachten die u moet uitvoeren mogelijk de bijgewerkte wachtwoorden vereist. Dit geldt niet als uw bronserver een flexibele server is, omdat flexibele server geen dumpingwachtwoorden toestaat voor gebruikers vanwege verbeterde beveiligingsmaatregelen.

Een nieuwe database maken

Voordat u de database herstelt, moet u mogelijk een nieuwe, lege database maken. Hiervoor moet de gebruiker die u gebruikt, over de CREATEDB machtiging beschikken. Hier volgen twee veelgebruikte methoden:

  1. Het hulpprogramma Het createdb createdb programma maakt het maken van databases rechtstreeks vanaf de bash-opdrachtregel mogelijk, zonder dat u zich hoeft aan te melden bij PostgreSQL of de omgeving van het besturingssysteem te verlaten. Bijvoorbeeld:

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

    Als u bijvoorbeeld een server hebt met de naam mydemoserver, een gebruiker met de naam myuser en de nieuwe database die u wilt maken, is testdb_copy, voert u de volgende opdracht uit:

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

    Als u één server gebruikt, bevat uw gebruikersnaam het servernaamonderdeel. Gebruik daarom in plaats van myusermyuser@mydemoserver.

  2. Met behulp van de SQL-opdracht Een database maken met behulp van een SQL-opdracht, moet u verbinding maken met uw PostgreSQL-server via een opdrachtregelinterface of een databasebeheerprogramma. Zodra u verbinding hebt gemaakt, kunt u de volgende SQL-opdracht gebruiken om een nieuwe database te maken:

CREATE DATABASE <new database name>;

Vervang <new database name> door de naam die u de nieuwe database wilt geven. Als u bijvoorbeeld een database met de naam testdb_copywilt maken, is de opdracht:

CREATE DATABASE testdb_copy;

De dump herstellen

Nadat u de doeldatabase hebt gemaakt, kunt u de gegevens in deze database herstellen vanuit het dumpbestand. Tijdens het herstel kunt u eventuele fouten in een errors.log bestand vastleggen en de inhoud controleren op eventuele fouten nadat de herstelbewerking is voltooid.

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

Als u bijvoorbeeld een server hebt met de naam mydemoserver, een gebruiker met de naam myuser en een nieuwe database met de naam testdb_copy, voert u de volgende opdracht uit:

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

Controle na herstel

Nadat het herstelproces is voltooid, is het belangrijk om het errors.log bestand te controleren op eventuele fouten die zijn opgetreden. Deze stap is van cruciaal belang voor het waarborgen van de integriteit en volledigheid van de herstelde gegevens. Los eventuele problemen in het logboekbestand op om de betrouwbaarheid van uw database te behouden.

Het migratieproces optimaliseren

Wanneer u met grote databases werkt, kan het dump- en herstelproces lang zijn en kan optimalisatie nodig zijn om de efficiëntie en betrouwbaarheid te garanderen. Het is belangrijk om rekening te houden met de verschillende factoren die van invloed kunnen zijn op de prestaties van deze bewerkingen en om stappen uit te voeren om ze te optimaliseren.

Raadpleeg de aanbevolen procedures voor pg_dump en pg_restore artikel voor gedetailleerde richtlijnen voor het optimaliseren van het dump- en herstelproces. Deze resource biedt uitgebreide informatie en strategieën die nuttig kunnen zijn voor het verwerken van grote databases.

Volgende stappen