Øvelse: Overfør en PostgreSQL-database i det lokale miljø til Azure Database for PostgreSQL

Fuldført

I denne øvelse skal du overføre en PostgreSQL-database til Azure. Du skal overføre en eksisterende PostgreSQL-database, der kører på en virtuel maskine, til Azure Database for PostgreSQL.

Du arbejder som databaseudvikler for AdventureWorks-organisationen. AdventureWorks har i mere end ti år solgt cykler og cykeldele direkte til slutbrugere og distributører. Deres systemer gemmer oplysninger i en database, der i øjeblikket kører ved hjælp af PostgreSQL på en Virtuel Azure-maskine. Som en del af en hardwarerationalisering vil AdventureWorks flytte databasen til en Azure-administreret database. Du er blevet bedt om at udføre denne migrering.

Vigtigt!

Azure Data Migration Service understøttes ikke i det gratis Azure-sandkassemiljø. Du kan udføre disse trin i dit eget personlige abonnement eller bare følge med for at forstå, hvordan du overfører din database.

Konfigurer miljøet

Kør disse Azure CLI-kommandoer i Cloud Shell for at oprette en virtuel maskine, der kører PostgreSQL, med en kopi af databasen adventureworks. De sidste kommandoer udskriver IP-adressen på den nye virtuelle maskine.

az account list-locations -o table

az group create \
    --name migrate-postgresql \
    --location <CHOOSE A LOCATION FROM ABOVE NEAR YOU>

az vm create \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --admin-username azureuser \
    --admin-password Pa55w.rdDemo \
    --image Ubuntu2204 \
    --public-ip-address-allocation static \
    --public-ip-sku Standard \
    --vnet-name postgresqlvnet \
    --nsg ""

az vm run-command invoke \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --command-id RunShellScript \
    --scripts "
# Install PostgreSQL
sudo echo deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main > /etc/apt/sources.list.d/pgdg.list
sudo wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get -y update
sudo apt-get -y install postgresql-10
# Clone exercise code
sudo git clone https://github.com/MicrosoftLearning/DP-070-Migrate-Open-Source-Workloads-to-Azure.git /home/azureuser/workshop    
# Configure PostgreSQL
sudo service postgresql stop
sudo bash << EOF
    printf \"listen_addresses = '*'\nwal_level = logical\nmax_replication_slots = 5\nmax_wal_senders = 10\n\" >> /etc/postgresql/10/main/postgresql.conf
    printf \"host    all             all             0.0.0.0/0               md5\n\" >> /etc/postgresql/10/main/pg_hba.conf
EOF
sudo service postgresql start

# Add the azureuser role and adventure works
sudo bash << EOF
su postgres << EOC
printf \"create role azureuser with login;alter role azureuser createdb;alter role azureuser password 'Pa55w.rd';alter role azureuser superuser;create database adventureworks;grant all privileges on database adventureworks to azureuser; \" | psql
EOC
EOF

PGPASSWORD=Pa55w.rd psql -h localhost -U azureuser adventureworks -E -q -f /home/azureuser/workshop/migration_samples/setup/postgresql/adventureworks/adventureworks.sql
"

az vm open-port \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --priority 200 \
    --port '22'

az vm open-port \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --priority 300 \
    --port '5432'

echo Setup Complete

SQLIP="$(az vm list-ip-addresses \
    --resource-group migrate-postgresql \
    --name postgresqlvm \
    --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
    --output tsv)"

echo $SQLIP

Det tager ca. 5 minutter at udføre disse kommandoer. Du behøver ikke at vente. Du kan fortsætte med nedenstående trin.

Opret azure-databasen til PostgreSQL-fleksibel server

  1. Åbn en ny fane ved hjælp af en webbrowser, og naviger til Azure Portal.

  2. I søgefeltet skal du skrive Azure Database for PostgreSQL flexible servers.

  3. Vælg + Opretpå siden Fleksible Azure Database til PostgreSQL-fleksible servere.

  4. Angiv følgende oplysninger på siden Fleksibel server, og vælg derefter Gennemse + opret:

    Egenskab Værdi
    Ressourcegruppe migrerings-postgresql-
    Servernavn adventureworksnnn, hvor nnn er et suffiks efter eget valg for at gøre servernavnet entydigt
    Lokation Vælg den nærmeste placering
    PostgreSQL-version 13
    Beregning + lager Vælg Konfigurer server, vælg prisniveauet Grundlæggende, og vælg derefter OK
    Brugernavn til administrator awadmin
    Adgangskode Pa55w.rdDemo
    Bekræft adgangskode Pa55w.rdDemo
  5. Vælg Opretpå siden Gennemse + opret . Vent på, at tjenesten oprettes, før du fortsætter.

  6. Når tjenesten er oprettet, skal du vælge Gå til ressource.

  7. Vælg Forbindelsessikkerhed.

  8. På siden Forbindelsessikkerhedskal du angive Tillad adgang til Azure-tjenester til Ja.

  9. På listen over firewallregler skal du tilføje en regel med navnet VM-og angive START IP-ADRESSE og IP-ADRESSE til IP-adressen på den virtuelle maskine, der kører den PostgreSQL-server, du oprettede tidligere.

  10. Vælg Tilføj aktuel klient-IP-adressefor at gøre det muligt for klientcomputeren at oprette forbindelse til databasen.

  11. Gem, og vent på, at firewallreglerne opdateres.

  12. Kør følgende kommando ved Cloud Shell-prompten for at oprette en ny database i din Azure Database for PostgreSQL-tjeneste. Erstat [nnn] med det suffiks, du brugte, da du oprettede Azure Database for PostgreSQL-tjenesten. Erstat [ressourcegruppe] med navnet på den ressourcegruppe, du har angivet for tjenesten:

    az postgres flexible-server create \
      --name azureadventureworks \
      --resource-group migrate-postgresql
    

    Hvis databasen er oprettet, får du vist en meddelelse, der ligner følgende:

    {
      "charset": "UTF8",
      "collation": "English_United States.1252",
      "name": "azureadventureworks",
      "resourceGroup": "migrate-postgresql",
      "type": "Microsoft.DBforPostgreSQL/servers/databases"
    }
    

Eksportér det skema, der skal bruges på destinationsdatabasen

Du skal nu oprette forbindelse til din eksisterende PostgreSQL-VM ved hjælp af Cloud Shell til at eksportere databaseskemaet.

  1. Kør denne Azure CLI-kommando for at se IP-adressen for din eksisterende VM.

    SQLIP="$(az vm list-ip-addresses \
        --resource-group migrate-postgresql \
        --name postgresqlvm \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $SQLIP
    
  2. Opret forbindelse til din gamle databaseserver ved hjælp af SSH. Angiv Pa55w.rdDemo- for adgangskoden.

    ssh azureuser@$SQLIP
    
  3. Kør følgende kommando for at oprette forbindelse til databasen på den virtuelle maskine. Adgangskoden for den azureuser bruger på PostgreSQL-serveren, der kører på den virtuelle maskine, er Pa55w.rd:

    psql adventureworks
    
  4. Tildel replikeringstilladelse til azureuser:

    ALTER ROLE azureuser REPLICATION;
    
  5. Luk værktøjet psql med kommandoen \q.

  6. Kør følgende kommando ved bashprompten for at eksportere skemaet for adventureworks database til en fil med navnet adventureworks_schema.sql

    pg_dump -o  -d adventureworks -s > adventureworks_schema.sql
    

Importér skemaet til destinationsdatabasen

  1. Kør følgende kommando for at oprette forbindelse til azureadventureworks[nnn]-serveren. Erstat de to forekomster af [nnn] med suffikset for tjenesten. Bemærk, at brugernavnet har @adventureworks[nnn] suffiks. I adgangskodeprompten skal du angive Pa55w.rdDemo.

    psql -h adventureworks[nnn].postgres.database.azure.com -U awadmin@adventureworks[nnn] -d postgres
    
  2. Kør følgende kommandoer for at oprette en bruger med navnet azureuser, og angiv adgangskoden for denne bruger til at Pa55w.rd. Den tredje sætning giver azureuser brugeren de nødvendige rettigheder til at oprette og administrere objekter i azureadventureworks database. Rollen azure_pg_admin gør det muligt for den azureuser bruger at installere og bruge udvidelser i databasen.

    CREATE ROLE azureuser WITH LOGIN;
    ALTER ROLE azureuser PASSWORD 'Pa55w.rd';
    GRANT ALL PRIVILEGES ON DATABASE azureadventureworks TO azureuser;
    GRANT azure_pg_admin TO azureuser;
    
  3. Luk værktøjet psql med kommandoen \q.

  4. Importér skemaet for databasen adventureworks til den azureadventureworks database, der kører på din Azure Database for PostgreSQL-tjeneste. Du udfører importen som azureuser, så angiv adgangskoden Pa55w.rd, når du bliver bedt om det.

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -E -q -f adventureworks_schema.sql
    

    Du får vist en række meddelelser, når hvert element oprettes. Scriptet skal fuldføres uden fejl.

  5. Kør følgende kommando. Det findkeys.sql script opretter et andet SQL-script med navnet dropkeys.sql, der fjerner alle fremmede nøgler fra tabellerne i azureadventureworks database. Du skal køre dropkeys.sql scriptet om lidt:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f workshop/migration_samples/setup/postgresql/adventureworks/findkeys.sql -o dropkeys.sql -t
    
  6. Kør følgende kommando. Det createkeys.sql script genererer et andet SQL-script med navnet addkeys.sql, der genskaber alle fremmede nøgler. Du skal køre addkeys.sql scriptet, når du har overført databasen:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f workshop/migration_samples/setup/postgresql/adventureworks/createkeys.sql -o addkeys.sql -t
    
  7. Kør dropkeys.sql-scriptet:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f dropkeys.sql
    

    Du får vist en serie ALTER TABLE meddelelser, efterhånden som de fremmede nøgler slippes.

  8. Statér psql-værktøjet igen, og opret forbindelse til azureadventureworks database.

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks
    
  9. Kør følgende forespørgsel for at finde oplysninger om eventuelle resterende fremmede nøgler:

    SELECT constraint_type, table_schema, table_name, constraint_name
    FROM information_schema.table_constraints
    WHERE constraint_type = 'FOREIGN KEY';
    

    Denne forespørgsel skal returnere et tomt resultatsæt. Men hvis der stadig findes fremmede nøgler, skal du køre følgende kommando for hver fremmede nøgle:

    ALTER TABLE [table_schema].[table_name] DROP CONSTRAINT [constraint_name];
    
  10. Når du har fjernet eventuelle resterende fremmede nøgler, skal du udføre følgende SQL-sætning for at få vist udløserne i databasen:

    SELECT trigger_name
    FROM information_schema.triggers;
    

    Denne forespørgsel skal også returnere et tomt resultatsæt, der angiver, at databasen ikke indeholder nogen udløsere. Hvis databasen indeholder udløsere, skal du deaktivere dem, før du overfører dataene og aktivere dem igen bagefter.

  11. Luk værktøjet psql med kommandoen \q.

Udfør en onlineoverførsel ved hjælp af databaseoverførselstjenesten

  1. Skift tilbage til Azure Portal.

  2. Vælg Alle tjenester, vælg Abonnementer, og vælg derefter dit abonnement.

  3. Vælg Ressourceudbydereunder Indstillingerpå abonnementssiden .

  4. Skriv DataMigrationi feltet Filtrer efter navn , og vælg derefter Microsoft.DataMigration.

  5. Hvis Microsoft.DataMigration- ikke er registreret, skal du vælge Registrerog vente på, at status ændres til Registreret. Det kan være nødvendigt at vælge Opdater for at se statusændringen.

  6. Vælg Opret en ressourcei feltet Søg i feltet MarketplaceAzure Database Migration Service, og tryk derefter på Enter.

  7. Vælg Opretpå siden Azure Database Migration Service .

  8. På siden Create Migration Service skal du angive følgende oplysninger og derefter vælge Næste: Netværk>>.

    Egenskab Værdi
    Vælg en ressourcegruppe migrerings-postgresql-
    Tjenestenavn adventureworks_migration_service
    Lokation Vælg den nærmeste placering
    Tjenestetilstand Azure
    Prisniveau Premium med fire vCores-
  9. På siden Networking skal du vælge postgresqlvnet/posgresqlvmSubnet virtuelle netværk. Dette netværk blev oprettet som en del af konfigurationen.

  10. Vælg Gennemse + opret, og vælg derefter Opret. Vent, mens databaseoverførselstjenesten oprettes. Dette vil tage et par minutter.

  11. Når tjenesten er oprettet, skal du vælge Gå til ressource.

  12. Vælg Nyt overførselsprojekt.

  13. På siden Nyt overførselsprojekt skal du angive følgende oplysninger og derefter vælge Opret og kør aktivitet.

    Egenskab Værdi
    Projektnavn adventureworks_migration_project
    Kildeservertype PostgreSQL
    Destinationsdatabase for PostgreSQL Azure Database til PostgreSQL-
    Vælg aktivitetstype onlineoverførsel af data
  14. Når guiden migrering starter, skal du angive følgende oplysninger på siden Vælg kilde og derefter vælge Næste: Vælg mål>>.

    Egenskab Værdi
    Navn på kildeserver nn.nn.nn.nn (IP-adressen på den virtuelle Azure-maskine, der kører PostgreSQL)
    Serverport 5432
    Database eventyrarbejde
    Brugernavn azureuser
    Adgangskode Pa55w.rd
    Hav tillid til servercertifikat markerede
    Kryptér forbindelse markerede
  15. På siden Vælg destination skal du angive følgende oplysninger og derefter vælge Næste: Vælg databaser>>.

    Egenskab Værdi
    Azure PostgreSQL adventureworks[nnn]
    Database azureadventureworks
    Brugernavn azureuser@adventureworks[nnn]
    Adgangskode Pa55w.rd
  16. På siden Vælg databaser skal du vælge databasen adventureworks og knytte den til azureadventureworks. Fjern markeringen af databasen postgres. Vælg Næste: Vælg tabeller>>.

  17. På siden Vælg tabeller skal du vælge Næste: Konfigurer overførselsindstillinger>>.

  18. På siden Konfigurer overførselsindstillinger skal du udvide rullelisten adventureworks, udvide rullelisten Avancerede indstillinger for onlineoverførsel, kontrollere, at maksimale antal forekomster, der skal indlæses parallelt er angivet til 5, og derefter vælge Næste: Oversigt>>.

  19. Skriv AdventureWorks_Migration_Activityi feltet Aktivitetsnavn på siden oversigt , og vælg derefter Start overførsel.

  20. På siden AdventureWorks_Migration_Activity skal du vælge Opdater med 15 sekunders intervaller. Du kan se status for migreringshandlingen, efterhånden som den skrider frem. Vent, indtil MIGRATION DETAILS kolonne ændres til Ready to cutover.

  21. Skift tilbage til Cloud Shell.

  22. Kør følgende kommando for at genoprette de fremmede nøgler i azureadventureworks database. Du oprettede addkeys.sql scriptet tidligere:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f addkeys.sql
    

    Du kan se en række ALTER TABLE sætninger, efterhånden som de fremmede nøgler tilføjes. Du får muligvis vist en fejl i tabellen SpecialOfferProduct, som du kan ignorere indtil videre. Dette skyldes en ENTYDIG-begrænsning, der ikke overføres korrekt. I den virkelige verden skal du hente oplysningerne om denne begrænsning fra kildedatabasen ved hjælp af følgende forespørgsel:

    SELECT constraint_type, table_schema, table_name, constraint_name
    FROM information_schema.table_constraints
    WHERE constraint_type = 'UNIQUE';
    

    Du kan derefter manuelt genindsætte denne begrænsning i måldatabasen i Azure Database for PostgreSQL.

    Der bør ikke være andre fejl.

Rediger data, og klip over til den nye database

  1. Gå tilbage til siden AdventureWorks_Migration_Activity på Azure Portal.

  2. Vælg databasen adventureworks.

  3. På siden adventureworks skal du kontrollere, at værdien for Fuld indlæsning er 66, og at alle andre værdier er 0.

  4. Skift tilbage til Cloud Shell.

  5. Kør følgende kommando for at oprette forbindelse til databasen adventureworks, der kører ved hjælp af PostgreSQL på den virtuelle maskine:

    psql adventureworks
    
  6. Udfør følgende SQL-sætninger for at få vist, og fjern derefter ordrer 43659, 43660 og 43661 fra databasen. Bemærk, at databasen implementerer en overlappende sletning i tabellen salesorderheader tabel, som automatisk sletter de tilsvarende rækker fra tabellen salgsordredetail.

    SELECT * FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    SELECT * FROM sales.salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
    DELETE FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    
  7. Luk værktøjet psql med kommandoen \q.

  8. Gå tilbage til siden adventureworks på Azure Portal, og vælg Opdater. Kontrollér, at der er anvendt 32 ændringer.

  9. Vælg Start cutover.

  10. Vælg Bekræftpå siden Komplet udskæring , og vælg derefter Anvend. Vent, indtil status ændres til Fuldført.

  11. Gå tilbage til Cloud Shell.

  12. Kør følgende kommando for at oprette forbindelse til azureadventureworks database, der kører ved hjælp af din Azure Database for PostgreSQL-tjeneste:

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks
    

    Adgangskoden er Pa55w.rd.

  13. Udfør følgende SQL-sætninger for at få vist ordre- og ordredetaljerne i databasen. Afslut efter den første side i hver tabel. Formålet med disse forespørgsler er at vise, at dataene er blevet overført:

    SELECT * FROM sales.salesorderheader;
    SELECT * FROM sales.salesorderdetail;
    
  14. Kør følgende SQL-sætninger for at få vist ordrerne og detaljerne for ordre 43659, 43660 og 43661.

    SELECT * FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    SELECT * FROM sales.salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
    

    Begge forespørgsler skal returnere 0 rækker.

  15. Luk værktøjet psql med kommandoen \q.

Ryd op i de ressourcer, du har oprettet

Vigtigt!

Hvis du har udført disse trin i dit eget personlige abonnement, kan du slette ressourcerne enkeltvist eller slette ressourcegruppen for at slette hele ressourcesættet. Ressourcer, der er tilbage at køre, kan koste dig penge.

  1. Brug af Cloud Shell til at køre denne kommando for at slette ressourcegruppen:
az group delete --name migrate-postgresql