Övning: Migrera en lokal PostgreSQL-databas till Azure Database for PostgreSQL

Slutförd

I den här övningen migrerar du en PostgreSQL-databas till Azure. Du migrerar en befintlig PostgreSQL-databas som körs på en virtuell dator till Azure Database for PostgreSQL.

Du arbetar som databasutvecklare för AdventureWorks-organisationen. AdventureWorks har sålt cyklar och cykeldelar direkt till slutkonsumenter och distributörer i över ett decennium. Deras system lagrar information i en databas som för närvarande körs med PostgreSQL på en virtuell Azure-dator. Som en del av en maskinvaru rationaliseringsövning vill AdventureWorks flytta databasen till en Hanterad Azure-databas. Du har blivit ombedd att utföra den här migreringen.

Viktigt!

Azure Data Migration Service stöds inte i den kostnadsfria Sandbox-miljön i Azure. Du kan utföra de här stegen i din egen personliga prenumeration eller bara följa med för att förstå hur du migrerar databasen.

Konfigurera miljön

Kör dessa Azure CLI-kommandon i Cloud Shell för att skapa en virtuell dator som kör PostgreSQL med en kopia av databasen adventureworks. De sista kommandona skriver ut IP-adressen för den nya virtuella datorn.

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

Dessa kommandon tar cirka 5 minuter att slutföra. Du behöver inte vänta, du kan fortsätta med stegen nedan.

Skapa en flexibel Azure Database for PostgreSQL-server

  1. Öppna en ny flik med hjälp av en webbläsare och gå till Azure-portalen.

  2. I sökfältet skriver du Flexibla Azure Database for PostgreSQL-servrar.

  3. På sidan Azure Database for PostgreSQL – flexibla servrar väljer du + Skapa.

  4. På sidan Flexibel server anger du följande information och väljer sedan Granska + skapa:

    Property Värde
    Resursgrupp migrate-postgresql
    Servernamn adventureworksnnn, där nnn är ett suffix som du väljer för att göra servernamnet unikt
    Plats Välj din närmaste plats
    PostgreSQL-version 13
    Beräkning och lagring Välj Konfigurera server, välj prisnivån Basic och välj sedan OK
    Användarnamn för administratör awadmin
    Password Pa55w.rdDemo
    Bekräfta lösenord Pa55w.rdDemo
  5. På sidan Granska + skapa väljer du Skapa. Vänta tills tjänsten har skapats innan du fortsätter.

  6. När tjänsten har skapats väljer du Gå till resurs.

  7. Välj Anslut ionssäkerhet.

  8. På Anslut ionssäkerhetssidan anger du Tillåt åtkomst till Azure-tjänster till Ja.

  9. I listan över brandväggsregler lägger du till en regel med namnet VM och anger START IP-ADRESS och SLUT-IP-ADRESS till IP-adressen för den virtuella dator som kör PostgreSQL-servern som du skapade tidigare.

  10. Välj Lägg till aktuell klient-IP-adress för att aktivera klientdatorn för att ansluta till databasen.

  11. Spara och vänta tills brandväggsreglerna har uppdaterats.

  12. I Cloud Shell-prompten kör du följande kommando för att skapa en ny databas i din Azure Database for PostgreSQL-tjänst. Ersätt [nnn] med suffixet du använde när du skapade Azure Database for PostgreSQL-tjänsten. Ersätt [resursgrupp] med namnet på den resursgrupp som du angav för tjänsten:

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

    Om databasen har skapats bör du se ett meddelande som liknar följande:

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

Exportera schemat som ska användas i måldatabasen

Nu ska du ansluta till din befintliga virtuella PostgreSQL-dator med hjälp av Cloud Shell för att exportera databasschemat.

  1. Kör det här Azure CLI-kommandot för att se IP-adressen för din befintliga virtuella dator.

    SQLIP="$(az vm list-ip-addresses \
        --resource-group migrate-postgresql \
        --name postgresqlvm \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $SQLIP
    
  2. Anslut till den gamla databasservern med hjälp av SSH. Ange Pa55w.rdDemo som lösenord.

    ssh azureuser@$SQLIP
    
  3. Kör följande kommando för att ansluta till databasen på den virtuella datorn. Lösenordet för azureuser-användaren på PostgreSQL-servern som körs på den virtuella datorn är Pa55w.rd:

    psql adventureworks
    
  4. Bevilja replikeringsbehörighet till azureuser:

    ALTER ROLE azureuser REPLICATION;
    
  5. Stäng psql-verktyget med kommandot \q.

  6. I bash-kommandotolken kör du följande kommando för att exportera schemat för adventureworks-databasen till en fil med namnet adventureworks_schema.sql

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

Importera schemat till måldatabasen

  1. Kör följande kommando för att ansluta till azureadventureworks[nnn]-servern. Ersätt de två instanserna av [nnn] med suffixet för din tjänst. Observera att användarnamnet har suffixet @adventureworks[nnn]. I lösenordsprompten anger du Pa55w.rdDemo.

    psql -h adventureworks[nnn].postgres.database.azure.com -U awadmin@adventureworks[nnn] -d postgres
    
  2. Kör följande kommandon för att skapa en användare med namnet azureuser och ange lösenordet för den här användaren till Pa55w.rd. Den tredje instruktionen ger azureuser-användaren de behörigheter som krävs för att skapa och hantera objekt i databasen azureadventureworks . Med azure_pg_admin-rollen kan azureuser-användaren installera och använda tillägg 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. Stäng psql-verktyget med kommandot \q.

  4. Importera schemat för adventureworks-databasen till databasen azureadventureworks som körs på din Azure Database for PostgreSQL-tjänst. Du utför importen som azureuser, så ange lösenordet Pa55w.rd när du uppmanas att göra det.

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

    Du ser en serie meddelanden när varje objekt skapas. Skriptet ska slutföras utan fel.

  5. Kör följande kommando. Skriptet findkeys.sql genererar ett annat SQL-skript med namnet dropkeys.sql som tar bort alla sekundärnycklar från tabellerna i databasen azureadventureworks. Du kommer snart att köra skriptet dropkeys.sql :

    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öljande kommando. Skriptet createkeys.sql genererar ett annat SQL-skript med namnet addkeys.sql som återskapar alla sekundärnycklar. Du kör skriptet addkeys.sql när du har migrerat 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 skriptet dropkeys.sql :

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

    Du ser en serie ALTER TABLE-meddelanden som visas när sekundärnycklarna tas bort.

  8. Skapa psql-verktyget igen och anslut till databasen azureadventureworks .

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks
    
  9. Kör följande fråga för att hitta information om eventuella återstående sekundärnycklar:

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

    Den här frågan ska returnera en tom resultatuppsättning. Men om det fortfarande finns några sekundärnycklar kör du följande kommando för varje sekundärnyckel:

    ALTER TABLE [table_schema].[table_name] DROP CONSTRAINT [constraint_name];
    
  10. När du har tagit bort eventuella återstående sekundärnycklar kör du följande SQL-instruktion för att visa utlösarna i databasen:

    SELECT trigger_name
    FROM information_schema.triggers;
    

    Den här frågan bör också returnera en tom resultatuppsättning som anger att databasen inte innehåller några utlösare. Om databasen innehåller utlösare måste du inaktivera dem innan du migrerar data och återaktivera dem efteråt.

  11. Stäng psql-verktyget med kommandot \q.

Utföra en onlinemigrering med hjälp av Database Migration Service

  1. Växla tillbaka till Azure Portal.

  2. Välj Alla tjänster, välj Prenumerationer och välj sedan din prenumeration.

  3. På prenumerationssidan går du till Inställningar och väljer Resursprovidrar.

  4. I rutan Filtrera efter namn skriver du DataMigration och väljer sedan Microsoft.DataMigration.

  5. Om Microsoft.DataMigration inte är registrerad väljer du Registrera och väntar tills statusen har ändrats till Registrerad. Du kan behöva välja Uppdatera för att se statusändringen.

  6. Välj Skapa en resurs. I rutan Sök på Marketplace skriver du Azure Database Migration Service och trycker sedan på Retur.

  7. På sidan Azure Database Migration Service väljer du Skapa.

  8. På sidan Skapa migreringstjänst anger du följande information och väljer sedan Nästa: Nätverk>>.

    Property Värde
    Välj en resursgrupp migrate-postgresql
    Servicenamn adventureworks_migration_service
    Plats Välj din närmaste plats
    Tjänstläge Azure
    Prisnivå Premium, med 4 virtuella kärnor
  9. På sidan Nätverk väljer du det virtuella nätverket postgresqlvnet/posgresqlvmSubnet . Det här nätverket skapades som en del av installationen.

  10. Välj Granska + skapa och välj sedan Skapa. Vänta medan Database Migration Service skapas. Det tar bara några minuter.

  11. När tjänsten har skapats väljer du Gå till resurs.

  12. Välj Nytt migreringsprojekt.

  13. På sidan Nytt migreringsprojekt anger du följande information och väljer sedan Skapa och kör aktivitet.

    Property Värde
    Projektnamn adventureworks_migration_project
    Typ av källserver PostgreSQL
    Måldatabas för PostgreSQL Azure Database for PostgreSQL
    Välj aktivitetstyp Datamigrering online
  14. När migreringsguiden startar anger du följande information på sidan Välj källa och väljer sedan Nästa: Välj mål>>.

    Property Värde
    Källservernamn nn.nn.nn.nn (IP-adressen för den virtuella Azure-dator som kör PostgreSQL)
    Serverport 5432
    Databas Adventureworks
    Användarnamn azureuser
    Password Pa55w.rd
    Lita på servercertifikatet Markerade
    Kryptera anslutning Markerade
  15. På sidan Välj mål anger du följande information och väljer sedan Nästa: Välj databaser>>.

    Property Värde
    Azure PostgreSQL adventureworks[nnn]
    Databas azureadventureworks
    Användarnamn azureuser@adventureworks[nnn]
    Password Pa55w.rd
  16. På sidan Välj databaser väljer du databasen adventureworks och mappar den till azureadventureworks. Avmarkera postgres-databasen . Välj Nästa: Välj tabeller>>.

  17. På sidan Välj tabeller väljer du Nästa: Konfigurera migreringsinställningar>>.

  18. På sidan Konfigurera migreringsinställningar expanderar du listrutan adventureworks, expanderar listrutan Avancerade inställningar för onlinemigrering, kontrollerar att Maximalt antal instanser som ska läsas in parallellt är inställt på 5 och väljer sedan Nästa: Sammanfattning>>.

  19. På sidan Sammanfattning skriver du AdventureWorks_Migration_Activity i rutan Aktivitetsnamn och väljer sedan Starta migrering.

  20. På sidan AdventureWorks_Migration_Activity väljer du Uppdatera med 15 sekunders intervall. Du ser status för migreringsåtgärden allt eftersom. Vänta tills kolumnen MIGRERINGSINFORMATION ändras till Klar för snabb användning.

  21. Växla tillbaka till Cloud Shell.

  22. Kör följande kommando för att återskapa sekundärnycklarna i databasen azureadventureworks . Du genererade skriptet addkeys.sql tidigare:

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

    Du ser en serie ALTER TABLE-instruktioner när sekundärnycklarna läggs till. Du kan se ett fel som rör tabellen SpecialOfferProduct , som du kan ignorera för tillfället. Detta beror på en UNIK begränsning som inte överförs korrekt. I verkligheten bör du hämta information om den här begränsningen från källdatabasen med hjälp av följande fråga:

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

    Du kan sedan återställa den här begränsningen manuellt i måldatabasen i Azure Database for PostgreSQL.

    Det får inte finnas några andra fel.

Ändra data och klipp över till den nya databasen

  1. Gå tillbaka till sidan AdventureWorks_Migration_Activity i Azure-portalen.

  2. Välj databasen adventureworks .

  3. På sidan adventureworks kontrollerar du att värdet fullständig belastning är 66 och att alla andra värden är 0.

  4. Växla tillbaka till Cloud Shell.

  5. Kör följande kommando för att ansluta till databasen adventureworks som körs med PostgreSQL på den virtuella datorn:

    psql adventureworks
    
  6. Kör följande SQL-instruktioner för att visa och ta sedan bort order 43659, 43660 och 43661 från databasen. Observera att databasen implementerar en sammanhängande borttagning i tabellen salesorderheader , som automatiskt tar bort motsvarande rader från tabellen salesorderdetail .

    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. Stäng psql-verktyget med kommandot \q.

  8. Gå tillbaka till sidan adventureworks i Azure-portalen och välj Uppdatera. Kontrollera att 32 ändringar har tillämpats.

  9. Välj Starta snabb.

  10. På sidan Fullständig snabb information väljer du Bekräfta och väljer sedan Använd. Vänta tills statusen ändras till Slutförd.

  11. Gå tillbaka till Cloud Shell.

  12. Kör följande kommando för att ansluta till databasen azureadventureworks som körs med din Azure Database for PostgreSQL-tjänst:

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

    Lösenordet är Pa55w.rd.

  13. Kör följande SQL-instruktioner för att visa order- och orderinformationen i databasen. Avsluta efter den första sidan i varje tabell. Syftet med dessa frågor är att visa att data har överförts:

    SELECT * FROM sales.salesorderheader;
    SELECT * FROM sales.salesorderdetail;
    
  14. Kör följande SQL-instruktioner för att visa order och information för order 43659, 43660 och 43661.

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

    Båda frågorna ska returnera 0 rader.

  15. Stäng psql-verktyget med kommandot \q.

Rensa de resurser som du har skapat

Viktigt!

Om du har utfört de här stegen i din egen personliga prenumeration kan du ta bort resurserna individuellt eller ta bort resursgruppen för att ta bort hela uppsättningen resurser. Resurser som fortsätter att köras kostar pengar.

  1. Med hjälp av Cloud Shell kör du det här kommandot för att ta bort resursgruppen:
az group delete --name migrate-postgresql