Migrera lokal PostgreSQL-databas till Azure
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.
Välj Skapa på huvudbladet 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.
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:
- I den vänstra menyraden i Azure Portal väljer du Alla tjänster.
- På sidan Alla tjänster väljer du Prenumerationer.
- På sidan Prenumerationer väljer du din prenumeration.
- På prenumerationssidan går du till Inställningar och väljer Resursprovidrar.
- I rutan Filtrera efter namn skriver du DataMigration och väljer sedan Microsoft.DataMigration.
- 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.
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.
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.
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.
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.
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.
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.
Å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.
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.
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.
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
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.
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]
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
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.
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
Skapa måldatabasen i Azure Database for PostgreSQL:
az postgres db create \ --name [database name] \ --server-name [server name] \ --resource-group [azure resource group] \
Å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