Cvičení: Migrace místní databáze PostgreSQL do Služby Azure Database for PostgreSQL

Dokončeno

V tomto cvičení provedete migraci databáze PostgreSQL do Azure. Do Služby Azure Database for PostgreSQL budete migrovat existující databázi PostgreSQL spuštěnou na virtuálním počítači.

Pracujete jako vývojář databáze pro organizaci AdventureWorks. AdventureWorks prodává jízdní kola a jízdní díly přímo koncovým spotřebitelům a distributorům po dobu více než desetiletí. Jejich systémy ukládají informace do databáze, která aktuálně běží pomocí PostgreSQL na virtuálním počítači Azure. V rámci cvičení racionalizace hardwaru chce AdventureWorks přesunout databázi do spravované databáze Azure. Byli jste požádáni o provedení této migrace.

Důležité

Služba Azure Data Migration Service se nepodporuje v bezplatném sandboxovém prostředí Azure. Tyto kroky můžete provést ve vlastním osobním předplatném nebo si jen projděte, abyste pochopili, jak migrovat databázi.

Nastavení prostředí

Spuštěním těchto příkazů Azure CLI v Cloud Shellu vytvořte virtuální počítač se systémem PostgreSQL s kopií databáze adventureworks. Poslední příkazy vytisknou IP adresu nového virtuálního počítače.

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

Dokončení těchto příkazů bude trvat přibližně 5 minut. Nemusíte čekat, můžete pokračovat pomocí následujícího postupu.

Vytvoření flexibilního serveru Azure Database for PostgreSQL

  1. Ve webovém prohlížeči otevřete novou kartu a přejděte na web Azure Portal.

  2. Na panelu hledání zadejte flexibilní servery Azure Database for PostgreSQL.

  3. Na stránce flexibilních serverů Azure Database for PostgreSQL vyberte + Vytvořit.

  4. Na stránce Flexibilní server zadejte následující podrobnosti a pak vyberte Zkontrolovat a vytvořit:

    Vlastnost Hodnota
    Skupina prostředků migrate-postgresql
    Název serveru adventureworksnnn, kde nnn je přípona podle vašeho výběru, aby byl název serveru jedinečný.
    Umístění Vyberte nejbližší umístění.
    Verze PostgreSQL 13
    Výpočty + úložiště Vyberte Konfigurovat server, vyberte cenovou úroveň Basic a pak vyberte OK.
    Uživatelské jméno správce awadmin
    Password Pa55w.rdDemo
    Potvrdit heslo Pa55w.rdDemo
  5. Na stránce Zkontrolovat a vytvořit vyberte Vytvořit. Než budete pokračovat, počkejte na vytvoření služby.

  6. Po vytvoření služby vyberte Přejít k prostředku.

  7. Vyberte zabezpečení Připojení.

  8. Na stránce zabezpečení Připojení ion nastavte Povolit přístup ke službám Azure na Ano.

  9. V seznamu pravidel brány firewall přidejte pravidlo s názvem virtuální počítač a nastavte POČÁTEČNÍ IP adresu a KONCOVou IP ADRESU na IP adresu virtuálního počítače se serverem PostgreSQL, který jste vytvořili dříve.

  10. Vyberte Přidat aktuální IP adresu klienta, aby se klientský počítač mohl připojit k databázi.

  11. Uložte a počkejte na aktualizaci pravidel brány firewall.

  12. Na příkazovém řádku Cloud Shellu spusťte následující příkaz, který vytvoří novou databázi ve službě Azure Database for PostgreSQL. Nahraďte [nnn] příponou, kterou jste použili při vytváření služby Azure Database for PostgreSQL. Nahraďte [skupinu prostředků] názvem skupiny prostředků, kterou jste zadali pro službu:

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

    Pokud se databáze úspěšně vytvořila, měla by se zobrazit zpráva podobná této:

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

Export schématu pro použití v cílové databázi

Teď se připojíte k existujícímu virtuálnímu počítači PostgreSQL pomocí Cloud Shellu k exportu schématu databáze.

  1. Spuštěním tohoto příkazu Azure CLI zobrazte IP adresu vašeho existujícího virtuálního počítače.

    SQLIP="$(az vm list-ip-addresses \
        --resource-group migrate-postgresql \
        --name postgresqlvm \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $SQLIP
    
  2. Připojení k původnímu databázovému serveru pomocí SSH. Jako heslo zadejte Pa55w.rdDemo .

    ssh azureuser@$SQLIP
    
  3. Spuštěním následujícího příkazu se připojte k databázi na virtuálním počítači. Heslo pro uživatele azureuser na serveru PostgreSQL spuštěném na virtuálním počítači je Pa55w.rd:

    psql adventureworks
    
  4. Udělení oprávnění replikace azureuser:

    ALTER ROLE azureuser REPLICATION;
    
  5. Ukončete nástroj psql pomocí příkazu \q .

  6. Na příkazovém řádku Bash spuštěním následujícího příkazu exportujte schéma databáze adventureworks do souboru s názvem adventureworks_schema.sql.

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

Import schématu do cílové databáze

  1. Spuštěním následujícího příkazu se připojte k serveru azureadventureworks[nnn]. Nahraďte dvě instance [nnn] příponou vaší služby. Všimněte si, že uživatelské jméno má příponu @adventureworks[nnn]. Na příkazovém řádku hesla zadejte Pa55w.rdDemo.

    psql -h adventureworks[nnn].postgres.database.azure.com -U awadmin@adventureworks[nnn] -d postgres
    
  2. Spuštěním následujících příkazů vytvořte uživatele azureuser a nastavte heslo tohoto uživatele na Pa55w.rd. Třetí příkaz uživateli azureuser poskytne potřebná oprávnění k vytváření a správě objektů v databázi azureadventureworks. Role azure_pg_admin umožňuje uživateli azureuser instalovat a používat rozšíření v databázi.

    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. Ukončete nástroj psql pomocí příkazu \q .

  4. Naimportujte schéma databáze adventureworks do databáze azureadventureworks spuštěné ve službě Azure Database for PostgreSQL. Import provádíte jako azureuser, takže po zobrazení výzvy zadejte heslo Pa55w.rd .

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

    Při vytváření každé položky se zobrazí řada zpráv. Skript by se měl dokončit bez chyb.

  5. Spusťte následující příkaz: Skript findkeys.sql vygeneruje další skript SQL s názvem dropkeys.sql , který odebere všechny cizí klíče z tabulek v databázi azureadventureworks . Krátce spustíte dropkeys.sql script:

    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. Spusťte následující příkaz: Skript createkeys.sql vygeneruje další skript SQL s názvem addkeys.sql , který znovu vytvoří všechny cizí klíče. Po migraci databáze spustíte skript addkeys.sql :

    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. Spusťte dropkeys.sql script:

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

    Zobrazí se řada zpráv ALTER TABLE , protože cizí klíče se zahodí.

  8. Znovu nastat nástroj psql a připojit se k databázi azureadventureworks .

    psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks
    
  9. Spuštěním následujícího dotazu vyhledejte podrobnosti o všech zbývajících cizích klíčích:

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

    Tento dotaz by měl vrátit prázdnou sadu výsledků. Pokud však existují nějaké cizí klíče, spusťte pro každý cizí klíč následující příkaz:

    ALTER TABLE [table_schema].[table_name] DROP CONSTRAINT [constraint_name];
    
  10. Po odebrání zbývajících cizích klíčů spusťte následující příkaz SQL, který zobrazí triggery v databázi:

    SELECT trigger_name
    FROM information_schema.triggers;
    

    Tento dotaz by také měl vrátit prázdnou sadu výsledků označující, že databáze neobsahuje žádné aktivační události. Pokud databáze obsahovala triggery, museli byste je před migrací dat zakázat a potom je znovu povolit.

  11. Ukončete nástroj psql pomocí příkazu \q .

Provedení online migrace pomocí služby Database Migration Service

  1. Vraťte se na Azure Portal.

  2. Vyberte Všechny služby, vyberte Předplatná a pak vyberte své předplatné.

  3. Na stránce předplatného v části Nastavení vyberte poskytovatele prostředků.

  4. Do pole Filtrovat podle názvu zadejte DataMigration a pak vyberte Microsoft.DataMigration.

  5. Pokud microsoft.DataMigration není zaregistrovaný, vyberte Zaregistrovat a počkejte, až se stav změní na Registrováno. Možná bude potřeba vybrat Aktualizovat , aby se změna stavu zobrazila.

  6. Vyberte Vytvořit prostředek, do pole Hledat na Marketplace zadejte Azure Database Migration Service a stiskněte Enter.

  7. Na stránce Azure Database Migration Service vyberte Vytvořit.

  8. Na stránce Vytvořit službu migrace zadejte následující podrobnosti a pak vyberte Další: Sítě>>.

    Vlastnost Hodnota
    Výběr skupiny prostředků migrate-postgresql
    Service name adventureworks_migration_service
    Umístění Vyberte nejbližší umístění.
    Režim služby Azure
    Cenová úroveň Premium s 4 virtuálními jádry
  9. Na stránce Sítě vyberte virtuální síť postgresqlvnet/posgresqlvmSubnet. Tato síť byla vytvořena jako součást instalace.

  10. Vyberte Zkontrolovat a vytvořit a potom Vytvořit. Počkejte, než se vytvoří služba Database Migration Service. Bude to několik minut trvat.

  11. Po vytvoření služby vyberte Přejít k prostředku.

  12. Vyberte Nový projekt migrace.

  13. Na stránce Nový projekt migrace zadejte následující podrobnosti a pak vyberte Vytvořit a spustit aktivitu.

    Vlastnost Hodnota
    Název projektu adventureworks_migration_project
    Typ zdrojového serveru PostgreSQL
    Cílová databáze pro PostgreSQL Azure Database for PostgreSQL
    Zvolte typ aktivity Online migrace dat
  14. Po spuštění Průvodce migrací na stránce Vybrat zdroj zadejte následující podrobnosti a pak vyberte Další: Vybrat cíl>>.

    Vlastnost Hodnota
    Název zdrojového serveru nn.nn.nn.nn (IP adresa virtuálního počítače Azure s PostgreSQL)
    Port serveru 5432
    Databáze Adventureworks
    Uživatelské jméno azureuser
    Password Pa55w.rd
    Důvěřovat certifikátu serveru Vybrané
    Šifrovat připojení Vybrané
  15. Na stránce Vybrat cíl zadejte následující podrobnosti a pak vyberte Další: Vybrat databáze>>.

    Vlastnost Hodnota
    Azure PostgreSQL adventureworks[nnn]
    Databáze azureadventureworks
    Uživatelské jméno azureuser@adventureworks[nnn]
    Password Pa55w.rd
  16. na stránce Vybrat databáze vyberte databázi adventureworks a namapujte ji na azureadventureworks. Zrušte výběr databáze postgres . Vyberte Další: Vyberte tabulky>>.

  17. Na stránce Vybrat tabulky vyberte Další: Konfigurovat nastavení>> migrace.

  18. Na stránce Konfigurovat nastavení migrace rozbalte rozevírací seznam adventureworks, rozbalte rozevírací seznam Upřesnit nastavení online migrace, ověřte, že maximální počet instancí, které se mají načíst paralelně, je nastaven na 5 a pak vyberte Další: Souhrn>>.

  19. Na stránce Souhrn zadejte do pole Název aktivity AdventureWorks_Migration_Activity a pak vyberte Zahájit migraci.

  20. Na stránce AdventureWorks_Migration_Activity vyberte Aktualizovat v 15sekundových intervalech. Při pokroku se zobrazí stav operace migrace. Počkejte, až se sloupec PODROBNOSTI MIGRACE změní na Připraveno k přímé migraci.

  21. Přepněte zpět do Cloud Shellu.

  22. Spuštěním následujícího příkazu znovu vytvořte cizí klíče v databázi azureadventureworks . Vygenerovali jste dříve skript addkeys.sql :

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

    Při přidání cizích klíčů se zobrazí řada příkazů ALTER TABLE . Může se zobrazit chyba týkající se tabulky SpecialOfferProduct , kterou prozatím můžete ignorovat. Důvodem je omezení UNIQUE, které se nepřenese správně. V reálném světě byste měli pomocí následujícího dotazu načíst podrobnosti o tomto omezení ze zdrojové databáze:

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

    Toto omezení pak můžete ručně obnovit v cílové databázi ve službě Azure Database for PostgreSQL.

    Neměly by existovat žádné jiné chyby.

Úprava dat a vyjmutí do nové databáze

  1. Vraťte se na stránku AdventureWorks_Migration_Activity na webu Azure Portal.

  2. Vyberte databázi adventureworks.

  3. Na stránce adventureworks ověřte, že hodnota dokončenéhoúplného načtení je 66 a že všechny ostatní hodnoty jsou 0.

  4. Přepněte zpět do Cloud Shellu.

  5. Spuštěním následujícího příkazu se připojte k databázi adventureworks spuštěné pomocí PostgreSQL na virtuálním počítači:

    psql adventureworks
    
  6. Spuštěním následujících příkazů SQL zobrazte a potom z databáze odeberte objednávky 43659, 43660 a 43661. Všimněte si, že databáze implementuje kaskádové odstranění tabulky salesorderheader , která automaticky odstraní odpovídající řádky z tabulky 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. Ukončete nástroj psql pomocí příkazu \q .

  8. Vraťte se na stránku adventureworks na webu Azure Portal a vyberte Aktualizovat. Ověřte, že byly použity 32 změn.

  9. Vyberte Spustit přímou migraci.

  10. Na stránce Dokončení přímé migrace vyberte Potvrdit a pak vyberte Použít. Počkejte, až se stav změní na Dokončeno.

  11. Vraťte se do Cloud Shellu.

  12. Spuštěním následujícího příkazu se připojte k databázi azureadventureworks spuštěné pomocí služby Azure Database for PostgreSQL:

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

    Heslo je Pa55w.rd.

  13. Spuštěním následujících příkazů SQL zobrazte objednávky a podrobnosti objednávky v databázi. Ukončete po první stránce každé tabulky. Účelem těchto dotazů je ukázat, že se data přenesla:

    SELECT * FROM sales.salesorderheader;
    SELECT * FROM sales.salesorderdetail;
    
  14. Spuštěním následujících příkazů SQL zobrazte objednávky a podrobnosti pro objednávky 43659, 43660 a 43661.

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

    Oba dotazy by měly vracet 0 řádků.

  15. Ukončete nástroj psql pomocí příkazu \q .

Vyčištění prostředků, které jste vytvořili

Důležité

Pokud jste tyto kroky provedli ve vlastním osobním předplatném, můžete prostředky odstranit jednotlivě nebo odstranit skupinu prostředků a odstranit tak celou sadu prostředků. Prostředky, které necháte spuštěné, vás stojí peníze.

  1. Spuštěním tohoto příkazu v Cloud Shellu odstraňte skupinu prostředků:
az group delete --name migrate-postgresql