Migrera lokal PostgreSQL-databas till Azure

Slutförd

När ett företag har bestämt sig för att flytta till Azure Database for PostgreSQL är nästa steg att planera hur man migrerar lokala databaser och väljer verktygen för att flytta sina data.

När du har utforskat hur Azure Database for PostgreSQL stöder och skalar PostgreSQL i Azure vill du nu fundera på hur du ska migrera dina befintliga lokala databaser.

I den här lektionen får du se hur du skapar en instans av Tjänsten Azure Database for PostgreSQL med hjälp av Azure Portal. Om du behöver skapa många instanser av den här tjänsten kan du skripta processen med hjälp av Azure CLI.

Skapa en flexibel Azure Database for PostgreSQL-server

I Azure Portal skriver du flexibla Azure Database for PostgreSQL-servrar i sökrutan och väljer flexibla Azure Database for PostgreSQL-servrar.

Skärmbild som visar objektet Azure Database for PostgreSQL – flexibla servrar i Azure Portal.

Välj Skapahuvudbladet Flexibel server och ange information för tjänsten. I den här informationen ingår bland annat följande:

  • Resursgrupp. Resursgrupp för servern.

  • Servernamn. Måste vara ett unikt namn mellan 3 och 63 tecken, som endast innehåller gemener, siffror och bindestreck.

  • Region. Region för servern.

  • PostgreSQL-version: Välj den version som motsvarar den lokala databas som du migrerar.

  • Arbetsbelastningstyp. Välj alternativet baserat på din arbetsbelastning.

    • Beräkning och lagring. Välj Konfigurera server för att ange prisnivån och ange de resurser som du behöver för tjänsten. Alternativen beskrevs i lektion 1. Kom ihåg att om du väljer prisnivåerna Generell användning eller Minnesoptimerad kan du skala upp och ned antalet virtuella processorkärnor senare. Du kan dock inte minska mängden lagringsutrymme – det kan bara öka när servern har skapats.
  • Användarnamn för administratör. Namnet på ett användarkonto som du skapar med administratörsbehörighet. Azure skapar vissa konton för eget bruk. Du kan inte använda azure_superuser, azure_pg_admin, administratör, administratör, rot, gäst, offentlig eller något namn som börjar med pg_.

  • Lösenord. Måste vara mellan 8 och 128 tecken. Den måste innehålla en blandning av versaler och gemener, siffror och icke-alfanumeriska tecken.

Skärmbild som visar en exempelkonfiguration för flexibel Azure Database for PostgreSQL-server i Azure Portal.

Klicka på Granska + Skapa för att distribuera tjänsten. Distributionen tar flera minuter.

När tjänsten har distribuerats väljer du alternativet Anslutningssäkerhet och lägger till lämpliga brandväggsregler så att klienter kan ansluta enligt beskrivningen i avsnittet Klientanslutning i lektion 1. Du måste också välja alternativet Tillåt åtkomst till Azure-tjänster .

Skapa en Azure Database for PostgreSQL-instans med hjälp av Azure CLI

Du kan skapa en instans av Azure Database for PostgreSQL med hjälp av az postgres flexible-server create kommandot . Instruktionen nedan visar ett exempel som skapar en flexibel serverinstans. De flesta parametrarna är självförklarande, förutom följande:

  • sku-name. Du skapar detta från en kombination av prisnivån (B för Basic, GP för Generell användning och MO för minnesoptimerad), beräkningsgenereringen (Gen4 eller Gen5) och antalet virtuella CPU-kärnor. I exemplet nedan skapas servern med hjälp av prisnivån Generell användning, med 4 processorkärnor i Gen5-generationen.
  • lagringsstorlek. Det här är mängden disklagring som krävs, som anges i megabyte. I följande exempel allokeras 10 gigabyte:
    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
    

Utföra onlinemigrering

Du kan utföra en onlinemigrering från en lokal PostgreSQL-installation till Azure Database for PostgreSQL med Azure Database Migration Service.

I onlinescenariot kopierar Azure Database Migration Service alla dina befintliga data till Azure och utför sedan kontinuerligt en synkroniseringsåtgärd från källdatabasen. Alla nya transaktioner som utförs mot det lokala systemet kopieras till den nya databasen i Azure. Den här processen fortsätter tills du har konfigurerat om klientprogrammen för att använda den nya databasen i Azure, då du avslutar synkroniseringsåtgärden.

Konfigurera källservern och exportera schemat

Det första steget i att utföra en onlinemigrering är att förbereda källservern för att stödja fullständig loggning framåt. På källservern redigerar du filen postgresql.config och konfigurerar följande loggningsparametrar för framåtskrivning. Om du vill ändra dessa parametrar startar du om servern – gör bara detta när systemet förväntas vara quiescent:

wal_level = logical
max_replication_slots = 5
max_wal_senders = 10

När du har startat om servern exporterar du schemat för källdatabasen med hjälp av verktyget pg_dump:

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

Slutligen skapar du en lista över alla tillägg som databasen använder. Du måste aktivera dessa tillägg i måldatabasen. För att göra detta använder du antingen kommandot \dx plsql eller kör följande fråga:

SELECT *
FROM pg_extension;

Skapa en måldatabas och importera schemat

Nästa steg är att skapa en måldatabas i din Azure Database for PostgreSQL-tjänst. Du använder ett välbekant verktyg som pgAdmin för att ansluta till servern, eller så kan du använda Azure CLI i följande exempel:

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

Aktivera eventuella tillägg som används av källdatabasen i måldatabasen.

Importera schemat till måldatabasen. Kör följande kommando på den dator som innehåller filen db_schema.sql:

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

Ta bort alla sekundärnyckelreferenser i måldatabasen. Du behöver det här steget eftersom data inte nödvändigtvis migreras i någon specifik sekvens, vilket kan leda till överträdelser av referensintegritet som gör att migreringsprocessen misslyckas. Du bör dock skapa en post med alla sekundärnycklar eftersom du behöver återskapa dem senare. Kör följande SQL-instruktion med psql-verktyget för att hitta alla sekundärnycklar i databasen och generera ett skript som tar bort dem:

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;

Inaktivera utlösare i måldatabasen – det finns två orsaker till detta:

  • Det hjälper till att optimera migreringsprocessen när data kopieras in.
  • Utlösare används ofta för att implementera komplexa former av referensintegritet och av de skäl som beskrevs tidigare kan den här typen av integritetskontroll misslyckas när data överförs. Använd följande SQL-instruktion för att hitta alla utlösare i databasen och generera ett skript som inaktiverar dem:
    SELECT concat ('alter table ', event_object_table, ' disable trigger ', trigger_name)
    FROM information_schema.triggers;
    

Kommentar

Du hittar texten för en utlösare med hjälp av kommandot \df+ i psql.

Skapa en Azure Database Migration Service-instans

I Azure Portal kan du nu skapa en instans av Azure Database Migration Service.

Innan du skapar en instans av Azure Database Migration Service måste du registrera resursprovidern Microsoft.DataMigration med din prenumeration. Du kan göra detta på följande sätt:

  1. I den vänstra menyraden i Azure Portal väljer du Alla tjänster.
  2. På sidan Alla tjänster väljer du Prenumerationer.
  3. På sidan Prenumerationer väljer du din prenumeration.
  4. På prenumerationssidan går du till Inställningar och väljer Resursprovidrar.
  5. I rutan Filtrera efter namn skriver du DataMigration och väljer sedan Microsoft.DataMigration.
  6. Välj Registrera och vänta tills Status har ändrats till Registrerad. Du kan behöva välja Uppdatera för att se vilken status som ska ändras.
    Bild som visar sidan Resursprovidrar. Användaren registrerar resursprovidern Microsoft.DataMigration

När resursprovidern är registrerad kan du skapa tjänsten. Välj kommandot Skapa en resurs i den vänstra menyraden och sök efter Azure Database Migration Service.

Bild som visar den första sidan när du skapar Azure Database Migration Service

På sidan Skapa migreringstjänst anger du ett namn för din instans av tjänsten, anger prenumerationen – det bör vara samma prenumeration som du registrerade resursprovidern mot – resursgrupp och plats. Du måste också ange ett virtuellt nätverk eftersom Database Migration Service är beroende av en brandvägg som skapats för det här virtuella nätverket för att ge det nödvändiga skyddet. Om du migrerar databaser från virtuella Azure-datorer kanske du kan placera Database Migration Service i samma virtuella nätverk som används av dessa virtuella datorer. Prisnivån avgör antalet virtuella processorkärnor som är tillgängliga för tjänsten. Om du vill utföra en onlinemigrering måste du välja Premium-nivån . Standardnivån stöder endast offlinemigrering.

Bild som visar konfigurationen för Azure Database Migration Service. Användaren har valt prisnivån Premium

Vänta tills tjänsten har distribuerats innan du fortsätter. Den här åtgärden tar några minuter.

Skapa ett migreringsprojekt med hjälp av Database Migration Service

Du kan nu använda din Database Migration Service-instans för att utföra en onlinemigrering. Det gör du genom att skapa ett nytt databasmigreringsprojekt. Gå till sidan för migreringstjänstens instans och välj Nytt migreringsprojekt.

Bild som visar den nyligen skapade Azure Database Migration Service.

På sidan Nytt migreringsprojekt anger du källservertypen till PostgreSQL, anger målservertypen till Azure Database for PostgreSQL och väljer Online-datamigrering. På sidan Typ av aktivitet visas de steg som du måste utföra på källservern för att aktivera onlinemigrering. Texten längst ned på sidan Nytt migreringsprojekt beskriver processen för att migrera schemat till målet.

Bild som visar egenskaper och instruktioner för migreringsprojektet.

Kontrollera att du har slutfört de här stegen och välj sedan Skapa och kör aktivitet.

Skapa och köra en migreringsaktivitet

Det nya migreringsprojektet startar en guide som vägleder dig genom processen. Du anger följande information:

  • På sidan Lägg till källinformation , adressen till källservern, källdatabasen och ett konto som kan ansluta till den här databasen och hämta data. Kontot måste ha SUPERUSER-behörighet för att kunna utföra migreringen.
  • På sidan Målinformation anger du adressen till din Azure Database for PostgreSQL-tjänst, databasen som du vill migrera data till och information om ett konto som har administrativa rättigheter.
  • På sidan Mappa till måldatabaser väljer du källdatabasen och måldatabasen. Du kan migrera en enskild databas eller flera databaser.
  • På sidan Migreringsinställningar anger du eventuella ytterligare inställningar som du vill konfigurera, till exempel det maximala antalet tabeller som ska läsas in parallellt.
  • På sidan Migreringssammanfattning anger du ett namn för aktiviteten och väljer sedan Kör migrering.
    Bild som visar migreringssammanfattningssidan.

Sidan aktivitetsstatus visas som visar migreringens förlopp och eventuella fel som har inträffat. Om migreringen misslyckas korrigerar du problemen och försöker utföra aktiviteten igen. Om du utför en onlinemigrering ändras statusen till Klar att minskas efter att befintliga data har överförts. Aktiviteten fortsätter dock att köras för att överföra eventuella ytterligare ändringar som visas medan program fortfarande aktivt använder den ursprungliga databasen.

Bild som visar aktivitetsstatussidan för migreringsaktiviteten. Migreringen har överfört alla aktuella data och är redo att snabbkopplas till den nya databasen.

Återställ sekundärnycklar och utlösare

Nu har du överfört data och program kan börja använda dem. Du bör återskapa de sekundärnycklar som du tog bort innan du migrerade data och återställa eventuella utlösare. Om vissa program fortfarande är anslutna till den ursprungliga databasen säkerställer loggning före skrivning att måldatabasen i Azure hålls uppdaterad. Loggning före skrivning påverkas inte negativt av sekundärnycklar och utlösare.

Klipp över till den nya databasen

När alla program har växlats till den nya databasen slutför du migreringsprocessen och skär över till den nya databasen. På sidan aktivitetsstatus väljer du namnet på databasen som migreras för att se en sammanfattning av det utförda arbetet.

Bild som visar statistiken för migreringsaktiviteten.

Välj Starta snabbstart. Du ser en sida där du uppmanas att bekräfta att åtgärden är klar. I det här läget töms alla återstående poster från loggen för framåtskrivning för källdatabasen och uppdateringarna stoppas. Eventuella ytterligare ändringar som görs i källdatabasen kommer inte att spridas.

Bild av sidan Fullständig snabbhet.

Utföra offlinemigrering

En offlinemigrering tar en "ögonblicksbild" av källdatabasen vid en viss tidpunkt och kopierar dessa data till måldatabasen. Ändringar som görs i källdata när ögonblicksbilden har tagits återspeglas inte i måldatabasen.

Du har minst två alternativ om du vill utföra en offlinemigrering till Azure Database for PostgreSQL eller till en PostgreSQL-server som körs någon annanstans, till exempel en virtuell Azure-dator:

  • Exportera schemat och data från källdatabasen med hjälp av verktyget pg_dump och importera schemat och data till måldatabasen med hjälp av psql-verktyget. Med den här tekniken kan du ändra, formatera om och rensa schemat och data om det behövs innan du överför dem till måldatabasen.
  • Dumpa data från källdatabasen med hjälp av pg_dump och återställ data till måldatabasen med hjälp av pg_restore. Den här tekniken går snabbare än att använda export och import, men data dumpas i ett format som inte är enkelt att ändra. Använd den här metoden om du inte behöver justera schemat eller data.

Kommentar

Du kan för närvarande inte använda Azure Database Migration Service för att utföra en offlinemigrering av en PostgreSQL-databas.

Migrera med hjälp av export och import

Utför följande steg för att migrera en databas med hjälp av export- och importmetoden.

  1. Exportera schemat med hjälp av kommandot pg_dump från en bash-prompt:

    pg_dump -o -h [source database server] -U [user name] -d [database] -s > db_schema.sql
    
  2. Exportera data till en annan fil med kommandot pg_dump:

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

    I det här läget är db_schema.sql och db_data.sql SQL-skript som du ändrar med hjälp av en textredigerare.

  3. Skapa måldatabasen i Azure Database for PostgreSQL. Det gör du med Azure CLI:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group]
    
  4. Importera schemat till måldatabasen med kommandot psql:

    psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_schema.sql
    
  5. Importera data till måldatabasen med kommandot psql:

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

Migrera med hjälp av säkerhetskopiering och återställning

De här stegen beskriver processen för att migrera en databas med hjälp av säkerhetskopiering och återställning.

  1. Säkerhetskopiera databasen – kör följande kommando från en bash-prompt. Ange namnet på en användare som har de behörigheter som krävs för att säkerhetskopiera databasen:

    pg_dump [database name] -h [source database server] -U [user name] -Fc > database_backup.bak
    
  2. Skapa måldatabasen i Azure Database for PostgreSQL:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group] \
    
  3. Återställ säkerhetskopian till den nya databasen med kommandot pg_restore från en bash-prompt. Ange namnet på en användare med administrativa rättigheter i din Azure Database for PostgreSQL-tjänst:

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