Migrace místní databáze PostgreSQL do Azure

Dokončeno

Jakmile se společnost rozhodne přejít na Azure Database for PostgreSQL, dalším krokem je naplánovat migraci místních databází a zvolit nástroje pro přesun dat.

Když jste se seznámili s tím, jak Azure Database for PostgreSQL podporuje a škáluje PostgreSQL v Azure, teď chcete zvážit, jak budete migrovat stávající místní databáze.

V této lekci se dozvíte, jak vytvořit instanci služby Azure Database for PostgreSQL pomocí webu Azure Portal. Pokud potřebujete vytvořit mnoho instancí této služby, můžete proces skriptovat pomocí Azure CLI.

Vytvoření flexibilních serverů Azure Database for PostgreSQL

Na webu Azure Portal zadejte flexibilní servery Azure Database for PostgreSQL do vyhledávacího pole a vyberte flexibilní servery Azure Database for PostgreSQL.

Screenshot showing the Azure Database for PostgreSQL flexible servers item in the Azure portal.

V hlavním okně flexibilního serveru vyberte Vytvořit, zadejte podrobnosti o službě. Mezi tyto podrobnosti patří:

  • Skupina prostředků. Skupina prostředků pro server

  • Název serveru: Musí být jedinečný název mezi 3 a 63 znaky, který obsahuje pouze malá písmena, číslice a pomlčky.

  • Oblast. Oblast pro server.

  • Verze PostgreSQL: Vyberte verzi, která odpovídá místní databázi, kterou migrujete.

  • Typ úlohy Vyberte možnost na základě vaší úlohy.

    • Výpočty + úložiště: Vyberte Konfigurovat server , aby nastavil cenovou úroveň, a zadejte prostředky, které pro službu požadujete. Možnosti byly popsány v lekci 1. Mějte na paměti, že pokud vyberete cenovou úroveň Pro obecné účely nebo Optimalizováno pro paměť, můžete vertikálně navýšit a snížit počet jader virtuálních procesorů později. Nemůžete ale snížit velikost úložiště – může se zvyšovat až po vytvoření serveru.
  • Uživatelské jméno správce: Název uživatelského účtu, který vytvoříte s oprávněními správce. Azure vytvoří některé účty pro vlastní použití. Nemůžete použít azure_superuser, azure_pg_admin, správce, správce, kořen, hosta, veřejné ani žádné jméno, které začíná pg_.

  • Heslo. Musí mít délku 8 až 128 znaků. Musí obsahovat kombinaci velkých a malých písmen, číslic a jiných než alfanumerických znaků.

Screenshot showing a sample configuration for Azure Database for PostgreSQL flexible server in the Azure portal.

Kliknutím na Zkontrolovat a vytvořit službu nasadíte. Nasazení bude trvat několik minut.

Po nasazení služby vyberte možnost zabezpečení Připojení a přidejte příslušná pravidla brány firewall pro povolení připojení klientů, jak je popsáno v tématu Klient Připojení ivity v lekci 1. Musíte také vybrat možnost Povolit přístup ke službám Azure.

Vytvoření instance Azure Database for PostgreSQL pomocí Azure CLI

Pomocí příkazu můžete vytvořit instanci Azure Database for PostgreSQL az postgres flexible-server create . Následující příkaz ukazuje příklad, který vytvoří flexibilní instanci serveru. Většina parametrů je sama vysvětlující, s výjimkou následujících:

  • název skladové položky. Vytvoříte to z kombinace cenové úrovně (B pro Basic, GP pro obecné účely a MO pro optimalizováno pro paměť), generování výpočetních prostředků (Gen4 nebo Gen5) a počtu virtuálních jader procesoru. V následujícím příkladu se server vytvoří pomocí cenové úrovně Pro obecné účely se 4 jádry procesoru generace Gen5.
  • velikost úložiště. Toto je množství požadovaného diskového úložiště zadaného v megabajtech. Následující příklad přiděluje 10 gigabajtů:
    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
    

Provedení online migrace

Online migraci z místní instalace PostgreSQL do služby Azure Database for PostgreSQL můžete provést online pomocí služby Azure Database Migration Service.

V online scénáři služba Azure Database Migration Service zkopíruje všechna vaše stávající data do Azure a pak průběžně provádí operaci synchronizace ze zdrojové databáze. Všechny nové transakce provedené v místním systému se zkopírují do nové databáze v Azure. Tento proces pokračuje, dokud nepřekonfigurujete klientské aplikace tak, aby používaly novou databázi v Azure. V tomto okamžiku ukončíte operaci synchronizace.

Konfigurace zdrojového serveru a export schématu

Prvním krokem při provádění online migrace je příprava zdrojového serveru na podporu úplného protokolování s předstihem pro zápis. Na zdrojovém serveru upravte soubor postgresql.config a nakonfigurujte následující parametry protokolování s předstihem pro zápis. Pokud chcete tyto parametry změnit, restartujte server – stačí, když se očekává, že systém bude nečekaný:

wal_level = logical
max_replication_slots = 5
max_wal_senders = 10

Po restartování serveru vyexportujte schéma zdrojové databáze pomocí nástroje pg_dump:

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

Nakonec vytvořte seznam všech rozšíření, která vaše databáze používá. Tato rozšíření budete muset povolit v cílové databázi. K tomu použijte příkaz \dx plsql nebo spusťte následující dotaz:

SELECT *
FROM pg_extension;

Vytvoření cílové databáze a import schématu

Další fází je vytvoření cílové databáze ve službě Azure Database for PostgreSQL. K připojení k serveru používáte známý nástroj, jako je pg Správa nebo můžete použít Azure CLI v následujícím příkladu:

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

V cílové databázi povolte všechna rozšíření používaná databází zdrojů.

Naimportujte schéma do cílové databáze. Na počítači, který má soubor db_schema.sql, spusťte následující příkaz:

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

Odeberte všechny odkazy na cizí klíč v cílové databázi. Tento krok potřebujete, protože data nemusí být nutně migrována v žádné konkrétní sekvenci, což může vyžadovat porušení referenční integrity, která způsobí selhání procesu migrace. Měli byste ale vytvořit záznam všech cizích klíčů, protože je budete muset později znovu vytvořit. Spuštěním následujícího příkazu SQL pomocí nástroje psql vyhledejte všechny cizí klíče v databázi a vygenerujte skript, který je odebere:

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;

Zakažte všechny triggery v cílové databázi – existují dva důvody:

  • Pomáhá optimalizovat proces migrace při kopírování dat.
  • Triggery se často používají k implementaci složitých forem referenční integrity a z důvodů popsaných výše může tento typ kontroly integrity selhat při přenosu dat. Pomocí následujícího příkazu SQL vyhledejte všechny triggery v databázi a vygenerujte skript, který je zakáže:
    SELECT concat ('alter table ', event_object_table, ' disable trigger ', trigger_name)
    FROM information_schema.triggers;
    

Poznámka:

Text triggeru najdete pomocí příkazu \df+ v psql.

Vytvoření instance služby Azure Database Migration Service

Na webu Azure Portal teď můžete vytvořit instanci služby Azure Database Migration Service.

Než vytvoříte instanci služby Azure Database Migration Service, musíte ve svém předplatném zaregistrovat poskytovatele prostředků Microsoft.DataMigration . Můžete to udělat takto:

  1. V levém řádku nabídek webu Azure Portal vyberte Všechny služby.
  2. Na stránce Všechny služby vyberte Předplatná.
  3. Na stránce Předplatná vyberte své předplatné.
  4. Na stránce předplatného v části Nastavení vyberte poskytovatele prostředků.
  5. Do pole Filtrovat podle názvu zadejte DataMigration a pak vyberte Microsoft.DataMigration.
  6. Vyberte Zaregistrovat a počkejte , až se stav změní na Registrované. Možná budete muset vybrat Aktualizovat , abyste viděli, jaký stav se má změnit.
    Image showing the Resource providers page. The user is registering the Microsoft.DataMigration resource provider

Po registraci poskytovatele prostředků můžete vytvořit službu. V levém řádku nabídek vyberte příkaz Vytvořit prostředek a vyhledejte službu Azure Database Migration Service.

Image showing the initial page when creating the Azure Database Migration Service

Na stránce Vytvořit službu Migration Service zadejte název vaší instance služby, zadejte předplatné – mělo by se jednat o stejné předplatné, pro které jste zaregistrovali poskytovatele prostředků – skupinu prostředků a umístění. Musíte také poskytnout virtuální síť, protože služba Database Migration Service závisí na bráně firewall vytvořené pro tuto virtuální síť, aby byla zajištěna potřebná ochrana. Pokud migrujete databáze z virtuálních počítačů Azure, možná budete moct umístit službu Database Migration Service do stejné virtuální sítě, kterou tyto virtuální počítače používají. Cenová úroveň určuje počet jader virtuálních procesorů, které jsou pro službu k dispozici. Pokud chcete provést online migraci, musíte vybrat úroveň Premium . Úroveň Standard podporuje pouze offline migraci.

Image showing the configuration for the Azure Database Migration Service. The user has selected the Premium pricing tier

Než budete pokračovat, počkejte, než se služba nasadí. Tato operace bude trvat několik minut.

Vytvoření projektu migrace pomocí služby Database Migration Service

K provedení online migrace teď můžete použít instanci služby Database Migration Service. Uděláte to tak, že vytvoříte nový projekt migrace databáze. Přejděte na stránku instance služby migrace a vyberte Nový projekt migrace.

Image showing the newly created Azure Database Migration Service.

Na stránce Nový projekt migrace nastavte typ zdrojového serveru na PostgreSQL, nastavte typ cílového serveru na Azure Database for PostgreSQL a vyberte Online migraci dat. Na stránce Typ aktivity jsou uvedené kroky, které musíte provést na zdrojovém serveru, abyste povolili online migraci. Text v dolní části stránky Nový projekt migrace popisuje proces migrace schématu do cíle.

Image showing the migration project properties and instructions.

Ověřte, že jste dokončili tyto kroky, a pak vyberte Vytvořit a spustit aktivitu.

Vytvoření a spuštění aktivity migrace

Nový projekt migrace spustí průvodce, který vás provede procesem. Zadejte následující podrobnosti:

  • Na stránce Přidat podrobnosti o zdroji adresa zdrojového serveru, zdrojové databáze a účet, který se může připojit k této databázi a načíst data. K provedení migrace musí mít účet oprávnění SUPERUSER .
  • Na stránce Podrobnosti cíle zadejte adresu služby Azure Database for PostgreSQL, databázi, do které chcete migrovat data, a podrobnosti účtu s právy správce.
  • Na stránce Mapovat na cílové databáze vyberte zdrojovou databázi a cílovou databázi. Můžete migrovat jednu databázi nebo více databází.
  • Na stránce Nastavení migrace zadejte všechna další nastavení, která chcete nakonfigurovat, například maximální počet tabulek, které se mají načíst paralelně.
  • Na stránce Souhrn migrace zadejte název aktivity a pak vyberte Spustit migraci.
    Image showing the migration summary page.

Na stránce stavu aktivity se zobrazí průběh migrace a všechny chyby, ke kterým došlo. Pokud se migrace nezdaří, opravíte problémy a zkusíte aktivitu zopakovat. Pokud provádíte online migraci, změní se stav Připraveno k přímé migraci po přenosu existujících dat. Aktivita však nadále běží a přenáší všechny další změny, které se zobrazí, zatímco aplikace stále aktivně používají původní databázi.

Image showing the activity status page for the migration activity. The migration has transferred all the current data, and is ready to cutover to the new database.

Obnovení cizích klíčů a triggerů

V tuto chvíli jste data přenesli a aplikace je můžou začít používat. Před migrací dat byste měli znovu vytvořit cizí klíče, které jste odebrali, a znovu vytvořit všechny triggery. Pokud jsou některé aplikace stále připojené k původní databázi, protokolování s předstihem pro zápis zajišťuje, že cílová databáze v Azure bude aktuální. Protokolování před zápisem nebude nepříznivě ovlivněno cizími klíči a triggery.

Vyjmutí do nové databáze

Po přepnutí všech aplikací do nové databáze dokončíte proces migrace a přepnete ji do nové databáze. Na stránce se stavem aktivity vyberte název migrované databáze a zobrazte souhrn provedených prací.

Image showing the statistics for the migration activity.

Vyberte Spustit přímou migraci. Zobrazí se stránka s výzvou k potvrzení, že je operace dokončená. V tuto chvíli se vyprázdní všechny zbývající položky z protokolu o zápisu zdrojové databáze a aktualizace se zastaví. Žádné další změny provedené ve zdrojové databázi nebudou rozšířeny.

Image of the Complete cutover page.

Provedení offline migrace

Offline migrace pořídí "snímek" zdrojové databáze v určitém časovém okamžiku a zkopíruje tato data do cílové databáze. Všechny změny provedené ve zdrojových datech po pořízení snímku se v cílové databázi neprojeví.

Pokud chcete provést offline migraci na Azure Database for PostgreSQL nebo na server PostgreSQL spuštěný jinde, například na virtuální počítač Azure, máte alespoň dvě možnosti:

  • Pomocí nástroje pg_dump exportujte schéma a data ze zdrojové databáze a importujte schéma a data do cílové databáze pomocí nástroje psql. Tato technika umožňuje před přenesením do cílové databáze změnit, přeformátovat a vyčistit schéma a data.
  • Vynechte data ze zdrojové databáze, znovu pomocí pg_dump a obnovte data do cílové databáze pomocí pg_restore. Tato technika je rychlejší než použití exportu a importu, ale data se vypisují ve formátu, který se nedá snadno změnit. Tento přístup použijte, pokud nepotřebujete upravovat schéma nebo data.

Poznámka:

Službu Azure Database Migration Service momentálně nemůžete použít k provedení offline migrace databáze PostgreSQL.

Migrace pomocí exportu a importu

Pokud chcete migrovat databázi pomocí přístupu k exportu a importu, proveďte následující kroky.

  1. Export schématu pomocí příkazu pg_dump z příkazového řádku Bash:

    pg_dump -o -h [source database server] -U [user name] -d [database] -s > db_schema.sql
    
  2. Export dat do jiného souboru pomocí příkazu pg_dump:

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

    V tuto chvíli db_schema.sql a db_data.sql jsou skripty SQL, které upravíte pomocí textového editoru.

  3. Vytvořte cílovou databázi ve službě Azure Database for PostgreSQL. Provedete to pomocí Azure CLI:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group]
    
  4. Import schématu do cílové databáze pomocí příkazu psql:

    psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_schema.sql
    
  5. Importujte data do cílové databáze pomocí příkazu psql:

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

Migrace pomocí zálohování a obnovení

Tento postup popisuje proces migrace databáze pomocí zálohování a obnovení.

  1. Zálohujte databázi – z příkazového řádku Bash spusťte následující příkaz. Zadejte jméno uživatele, který má potřebná oprávnění k zálohování databáze:

    pg_dump [database name] -h [source database server] -U [user name] -Fc > database_backup.bak
    
  2. Vytvořte cílovou databázi ve službě Azure Database for PostgreSQL:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group] \
    
  3. Obnovte zálohu do nové databáze pomocí příkazu pg_restore z příkazového řádku Bash. Zadejte jméno uživatele s právy správce ve službě Azure Database for PostgreSQL:

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