On-premises PostgreSQL-database migreren naar Azure

Voltooid

Zodra een bedrijf de beslissing neemt om over te stappen op Azure Database for PostgreSQL, is de volgende stap het plannen van het migreren van on-premises databases en het kiezen van de hulpprogramma's om hun gegevens te verplaatsen.

Nadat u hebt verkend hoe Azure Database for PostgreSQL PostgreSQL ondersteunt en schaalt in Azure, wilt u nu overwegen hoe u uw bestaande on-premises databases migreert.

In deze les ziet u hoe u een exemplaar van de Azure Database for PostgreSQL-service maakt met behulp van Azure Portal. Als u veel exemplaren van deze service moet maken, kunt u het proces scripten met behulp van de Azure CLI.

Een flexibele Azure Database for PostgreSQL-servers maken

Typ in De Azure-portal flexibele servers van Azure Database for PostgreSQL in het zoekvak en selecteer flexibele Servers van Azure Database for PostgreSQL.

Schermopname van het item Flexibele Servers van Azure Database for PostgreSQL in Azure Portal.

Selecteer Maken op de hoofdblade flexibele server en voer de details voor de service in. Deze details omvatten:

  • Resourcegroep. Resourcegroep voor de server.

  • Server name (Servernaam). Moet een unieke naam tussen 3 en 63 tekens zijn, met alleen kleine letters, cijfers en afbreekstreepjes.

  • Regio. Regio voor de server.

  • PostgreSQL-versie: selecteer de versie die overeenkomt met de on-premises database die u migreert.

  • Type werkbelasting. Selecteer de optie op basis van uw workload.

    • Berekening en opslag. Selecteer Server configureren om de prijscategorie in te stellen en geef de resources op die u nodig hebt voor de service. De opties zijn besproken in les 1. Houd er rekening mee dat als u de prijscategorieën Algemeen of Geoptimaliseerd voor geheugen selecteert, u het aantal virtuele processorkernen later omhoog en omlaag kunt schalen. U kunt de hoeveelheid opslagruimte echter niet verminderen. Deze kan alleen toenemen nadat de server is gemaakt.
  • Gebruikersnaam van beheerder. De naam van een gebruikersaccount dat u maakt met beheerdersbevoegdheden. Azure maakt enkele accounts voor eigen gebruik. U kunt geen azure_superuser, azure_pg_admin, beheerder, hoofdbeheerder, gast, openbaar of een naam gebruiken die begint met pg_.

  • Wachtwoord. Moet tussen de 8 en 128 tekens zijn. Het moet een combinatie van hoofdletters en kleine letters, cijfers en niet-alfanumerieke tekens bevatten.

Schermopname van een voorbeeldconfiguratie voor een flexibele Azure Database for PostgreSQL-server in Azure Portal.

Klik op Controleren en maken om de service te implementeren. De implementatie duurt enkele minuten.

Nadat de service is geïmplementeerd, selecteert u de optie Verbindingsbeveiliging en voegt u de juiste firewallregels toe om clients in staat te stellen verbinding te maken, zoals beschreven in het onderwerp Clientconnectiviteit in Les 1. U moet ook de optie Toegang tot Azure-services toestaan selecteren.

Een Azure Database for PostgreSQL-exemplaar maken met behulp van de Azure CLI

U kunt een exemplaar van Azure Database for PostgreSQL maken met behulp van de az postgres flexible-server create opdracht. In de onderstaande instructie ziet u een voorbeeld waarmee een exemplaar van een flexibele server wordt gemaakt. De meeste parameters zijn verklarend, met uitzondering van het volgende:

  • sku-naam. U maakt dit op basis van een combinatie van de prijscategorie (B voor Basic, GP voor Algemeen gebruik en MO voor Geoptimaliseerd voor geheugen), de berekeningsgeneratie (Gen4 of Gen5) en het aantal virtuele CPU-kernen. In het onderstaande voorbeeld wordt de server gemaakt met behulp van de prijscategorie Algemeen gebruik, met 4 CPU-kernen van de Gen5-generatie.
  • opslaggrootte. Dit is de hoeveelheid schijfopslag die is vereist, opgegeven in megabytes. In het volgende voorbeeld wordt 10 gigabyte toegewezen:
    az postgres flexible-server create \
    --location northeurope --resource-group testGroup \
    --name testserver --admin-user username --admin-password password \
    --sku-name Standard_B1ms --tier Burstable --public-access 153.24.26.117 --storage-size 128 \
    --tags "key=value" --version 13 --high-availability Enabled --zone 1 \
    --standby-zone 3
    

Onlinemigratie uitvoeren

U kunt een onlinemigratie uitvoeren vanaf een on-premises PostgreSQL-installatie naar Azure Database for PostgreSQL met de Azure Database Migration Service.

In het onlinescenario kopieert De Azure Database Migration Service al uw bestaande gegevens naar Azure en voert vervolgens continu een synchronisatiebewerking uit vanuit de brondatabase. Nieuwe transacties die worden uitgevoerd op basis van het on-premises systeem, worden gekopieerd naar de nieuwe database in Azure. Dit proces gaat door totdat u uw clienttoepassingen opnieuw hebt geconfigureerd voor het gebruik van de nieuwe database in Azure, waarna u de synchronisatiebewerking beëindigt.

De bronserver configureren en het schema exporteren

De eerste stap bij het uitvoeren van een onlinemigratie is het voorbereiden van de bronserver ter ondersteuning van volledige logboekregistratie voor write-ahead. Bewerk het postgresql.config-bestand op de bronserver en configureer de volgende parameters voor logboekregistratie voor write-ahead. Als u deze parameters wilt wijzigen, start u de server opnieuw op. Doe dit alleen wanneer het systeem naar verwachting stil ligt:

wal_level = logical
max_replication_slots = 5
max_wal_senders = 10

Nadat u de server opnieuw hebt opgestart, exporteert u het schema voor de brondatabase met behulp van het hulpprogramma pg_dump:

pg_dump -o -h [server host] -U [user name] -d [database name] -s > db_schema.sql

Maak ten slotte een lijst met alle extensies die door uw database worden gebruikt. U moet deze extensies inschakelen in de doeldatabase. Hiervoor gebruikt u de opdracht \dx plsql of voert u de volgende query uit:

SELECT *
FROM pg_extension;

Een doeldatabase maken en het schema importeren

De volgende fase is het maken van een doeldatabase in uw Azure Database for PostgreSQL-service. U gebruikt een vertrouwd hulpprogramma zoals pgAdmin om verbinding te maken met de server, of u kunt de Azure CLI in het volgende voorbeeld gebruiken:

az postgres db create \
  --name [database name] \
  --server-name [server name] \
  --resource-group [azure resource group]

Schakel op de doeldatabase alle extensies in die door de brondatabase worden gebruikt.

Importeer het schema in de doeldatabase. Voer op de computer met het db_schema.sql-bestand de volgende opdracht uit:

psql -h [Azure Database for PostgreSQL host] -U [user name] -d [database name] -f db_schema.sql

Verwijder alle refererende-sleutelverwijzingen in de doeldatabase. U hebt deze stap nodig omdat de gegevens niet noodzakelijkerwijs in een specifieke volgorde worden gemigreerd, waardoor mogelijk referentiële integriteitsschendingen worden gevraagd die ervoor zorgen dat het migratieproces mislukt. U moet echter een record maken van alle refererende sleutels, omdat u deze later opnieuw moet maken. Voer de volgende SQL-instructie uit met behulp van het psql-hulpprogramma om alle refererende sleutels in uw database te vinden en een script te genereren waarmee ze worden verwijderd:

SELECT Queries.tablename
       ,concat('alter table ', Queries.tablename, ' ', STRING_AGG(concat('DROP CONSTRAINT ', Queries.foreignkey), ',')) as DropQuery
            ,concat('alter table ', Queries.tablename, ' ',
                                            STRING_AGG(concat('ADD CONSTRAINT ', Queries.foreignkey, ' FOREIGN KEY (', column_name, ')', 'REFERENCES ', foreign_table_name, '(', foreign_column_name, ')' ), ',')) as AddQuery
    FROM
    (SELECT
    tc.table_schema,
    tc.constraint_name as foreignkey,
    tc.table_name as tableName,
    kcu.column_name,
    ccu.table_schema AS foreign_table_schema,
    ccu.table_name AS foreign_table_name,
    ccu.column_name AS foreign_column_name
FROM
    information_schema.table_constraints AS tc
    JOIN information_schema.key_column_usage AS kcu
      ON tc.constraint_name = kcu.constraint_name
      AND tc.table_schema = kcu.table_schema
    JOIN information_schema.constraint_column_usage AS ccu
      ON ccu.constraint_name = tc.constraint_name
      AND ccu.table_schema = tc.table_schema
WHERE constraint_type = 'FOREIGN KEY') Queries
  GROUP BY Queries.tablename;

Schakel triggers in de doeldatabase uit: er zijn twee redenen hiervoor:

  • Het helpt bij het optimaliseren van het migratieproces wanneer gegevens worden gekopieerd.
  • Triggers worden vaak gebruikt om complexe vormen van referentiële integriteit te implementeren. Om de hierboven beschreven redenen kan dit type integriteitscontrole mislukken terwijl gegevens worden overgedragen. Gebruik de volgende SQL-instructie om alle triggers in uw database te vinden en een script te genereren waarmee ze worden uitgeschakeld:
    SELECT concat ('alter table ', event_object_table, ' disable trigger ', trigger_name)
    FROM information_schema.triggers;
    

Notitie

U vindt de tekst voor een trigger met behulp van de opdracht \df+ in psql.

Een Azure Database Migration Service-exemplaar maken

In Azure Portal kunt u nu een exemplaar van de Azure Database Migration Service maken.

Voordat u een exemplaar van de Azure Database Migration Service maakt, moet u de Microsoft.DataMigration-resourceprovider registreren bij uw abonnement. U kunt dit als volgt doen:

  1. Selecteer Alle services in de linkermenubalk van Azure Portal.
  2. Selecteer Abonnementen op de pagina Alle services.
  3. Selecteer uw abonnement op de pagina Abonnementen .
  4. Selecteer op uw abonnementspagina onder Instellingen de optie Resourceproviders.
  5. Typ DataMigration in het vak Filteren op naam en selecteer Vervolgens Microsoft.DataMigration.
  6. Selecteer Registreren en wacht totdat de status is gewijzigd in Geregistreerd. Mogelijk moet u Vernieuwen selecteren om te zien welke status u wilt wijzigen.
    Afbeelding van de pagina Resourceproviders. De gebruiker registreert de resourceprovider Microsoft.DataMigration

Wanneer de resourceprovider is geregistreerd, kunt u de service maken. Selecteer de opdracht Een resource maken in de linkermenubalk en zoek naar Azure Database Migration Service.

Afbeelding van de eerste pagina bij het maken van de Azure Database Migration Service

Voer op de pagina Migratieservice maken een naam in voor uw exemplaar van de service, geef het abonnement op. Dit moet hetzelfde abonnement zijn waarop u de resourceprovider hebt geregistreerd: de resourcegroep en de locatie. U moet ook een virtueel netwerk opgeven omdat de Database Migration Service afhankelijk is van een firewall die voor dit virtuele netwerk is gemaakt om de benodigde beveiliging te bieden. Als u databases migreert van virtuele Azure-machines, kunt u de Database Migration Service mogelijk in hetzelfde virtuele netwerk plaatsen dat door deze virtuele machines wordt gebruikt. De prijscategorie bepaalt het aantal virtuele processorkernen dat beschikbaar is voor de service. Als u een onlinemigratie wilt uitvoeren, moet u de Premium-laag selecteren. De Standard-laag biedt alleen ondersteuning voor offlinemigratie.

Afbeelding van de configuratie voor de Azure Database Migration Service. De gebruiker heeft de Prijscategorie Premium geselecteerd

Wacht totdat de service is geïmplementeerd voordat u doorgaat. Deze bewerking duurt enkele minuten.

Een migratieproject maken met behulp van de Database Migration Service

U kunt nu uw Database Migration Service-exemplaar gebruiken om een onlinemigratie uit te voeren. Hiervoor maakt u een nieuw databasemigratieproject. Ga naar de pagina voor uw migratieservice-exemplaar en selecteer Nieuw migratieproject.

Afbeelding van de zojuist gemaakte Azure Database Migration Service.

Stel op de pagina Nieuw migratieproject het bronservertype in op PostgreSQL, stel het doelservertype in op Azure Database for PostgreSQL en selecteer Onlinegegevensmigratie. Op de pagina Type activiteit ziet u de stappen die u moet uitvoeren op de bronserver om onlinemigratie in te schakelen. In de tekst onder aan de pagina Nieuw migratieproject wordt het proces voor het migreren van het schema naar het doel beschreven.

Afbeelding van de eigenschappen en instructies van het migratieproject.

Controleer of u deze stappen hebt voltooid en selecteer vervolgens Activiteit maken en uitvoeren.

Een migratieactiviteit maken en uitvoeren

Het nieuwe migratieproject start een wizard die u door het proces begeleidt. U geeft de volgende gegevens op:

  • Op de pagina Brondetails toevoegen, het adres van de bronserver, de brondatabase en een account dat verbinding kan maken met deze database en de gegevens kan ophalen. Het account moet SUPERUSER-bevoegdheden hebben om de migratie uit te voeren.
  • Geef op de pagina Doeldetails het adres op van uw Azure Database for PostgreSQL-service, de database waarin u de gegevens wilt migreren en de details van een account met beheerdersrechten.
  • Selecteer op de pagina Toewijzen aan doeldatabases de brondatabase en doeldatabase. U kunt één database of meerdere databases migreren.
  • Geef op de pagina Migratie-instellingen eventuele aanvullende instellingen op die u wilt configureren, zoals het maximum aantal tabellen dat parallel moet worden geladen.
  • Voer op de pagina Migratiesamenvatting een naam in voor de activiteit en selecteer Migratie uitvoeren.
    Afbeelding van de overzichtspagina van de migratie.

De pagina activiteitsstatus wordt weergegeven met de voortgang van de migratie en eventuele fouten die zijn opgetreden. Als de migratie mislukt, corrigeert u de problemen en probeert u de activiteit opnieuw uit te voeren. Als u een onlinemigratie uitvoert, wordt de status gewijzigd in Ready to cutover nadat de bestaande gegevens zijn overgedragen. De activiteit blijft echter actief, om eventuele aanvullende wijzigingen die worden weergegeven, over te dragen terwijl toepassingen nog steeds actief gebruikmaken van de oorspronkelijke database.

Afbeelding van de pagina activiteitsstatus voor de migratieactiviteit. De migratie heeft alle huidige gegevens overgedragen en is klaar voor cutover naar de nieuwe database.

Refererende sleutels en triggers opnieuw drijven

Op dit moment hebt u de gegevens overgedragen en kunnen toepassingen deze gaan gebruiken. Maak de refererende sleutels die u hebt verwijderd voordat u de gegevens migreert opnieuw en start eventuele triggers opnieuw op. Als sommige toepassingen nog steeds zijn verbonden met de oorspronkelijke database, zorgt write-ahead-logboekregistratie ervoor dat de doeldatabase in Azure up-to-date blijft. Write-ahead-logboekregistratie wordt niet nadelig beïnvloed door refererende sleutels en triggers.

Oversnijden naar de nieuwe database

Wanneer alle toepassingen zijn overgeschakeld naar de nieuwe database, voltooit u het migratieproces en knipt u over naar de nieuwe database. Selecteer op de pagina activiteitsstatus de naam van de database die wordt gemigreerd om een overzicht te zien van het uitgevoerde werk.

Afbeelding van de statistieken voor de migratieactiviteit.

Selecteer Cutover starten. U ziet een pagina waarin u wordt gevraagd om te bevestigen dat de bewerking is voltooid. Op dit moment worden alle resterende vermeldingen uit het write-ahead-logboek voor de brondatabase verwijderd en worden updates gestopt. Eventuele verdere wijzigingen in de brondatabase worden niet doorgegeven.

Afbeelding van de pagina Complete cutover.

Offlinemigratie uitvoeren

Een offlinemigratie maakt op een bepaald moment een momentopname van de brondatabase en kopieert die gegevens naar de doeldatabase. Wijzigingen die zijn aangebracht in de brongegevens nadat de momentopname is gemaakt, worden niet doorgevoerd in de doeldatabase.

U hebt ten minste twee opties als u een offlinemigratie naar Azure Database for PostgreSQL wilt uitvoeren of naar een PostgreSQL-server die ergens anders wordt uitgevoerd, zoals een virtuele Azure-machine:

  • Exporteer het schema en de gegevens uit de brondatabase met behulp van het hulpprogramma pg_dump en importeer het schema en de gegevens in de doeldatabase met behulp van het hulpprogramma psql. Met deze techniek kunt u het schema en de gegevens indien nodig wijzigen, opnieuw opmaken en opschonen voordat u het overdraagt naar de doeldatabase.
  • Dump de gegevens uit de brondatabase opnieuw met behulp van pg_dump en herstel de gegevens in de doeldatabase met behulp van pg_restore. Deze techniek is sneller dan exporteren en importeren, maar de gegevens worden gedumpt in een indeling die niet eenvoudig kan worden gewijzigd. Gebruik deze methode als u het schema of de gegevens niet hoeft aan te passen.

Notitie

U kunt momenteel de Azure Database Migration Service niet gebruiken om een offlinemigratie van een PostgreSQL-database uit te voeren.

Migreren met behulp van exporteren en importeren

Voer de volgende stappen uit om een database te migreren met behulp van de export- en importbenadering.

  1. Exporteer het schema met behulp van de opdracht pg_dump vanuit een bash-prompt:

    pg_dump -o -h [source database server] -U [user name] -d [database] -s > db_schema.sql
    
  2. Exporteer de gegevens naar een ander bestand met de opdracht pg_dump:

    pg_dump -o -h [source database server] -U [user name] -d [database] -a > db_data.sql
    

    Op dit moment zijn db_schema.sql en db_data.sql SQL-scripts die u wijzigt met behulp van een teksteditor.

  3. Maak de doeldatabase in Azure Database for PostgreSQL. U doet dit met de Azure CLI:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group]
    
  4. Importeer het schema in de doeldatabase met de psql-opdracht:

    psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_schema.sql
    
  5. Importeer de gegevens in de doeldatabase met de psql-opdracht:

    psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_data.sql
    

Migreren met back-up en herstel

In deze stappen wordt het proces voor het migreren van een database beschreven met behulp van back-up en herstel.

  1. Maak een back-up van de database. Voer vanaf een bash-prompt de volgende opdracht uit. Geef de naam op van een gebruiker met de benodigde bevoegdheden voor het maken van een back-up van de database:

    pg_dump [database name] -h [source database server] -U [user name] -Fc > database_backup.bak
    
  2. Maak de doeldatabase in Azure Database for PostgreSQL:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group] \
    
  3. Herstel de back-up in de nieuwe database met de opdracht pg_restore vanaf een bash-prompt. Geef de naam op van een gebruiker met beheerdersrechten in uw Azure Database for PostgreSQL-service:

    pg_restore -d [target database name] -h [server name in Azure Database for PostgreSQL] -Fc -U [user name] database_backup.bak