Sdílet prostřednictvím


Migrace místního MySQL do služby Azure Database for MySQL: Migrace dat

Migrace dat je klíčovým aspektem přechodu databází MySQL z místních prostředí do databází Azure for MySQL. Tento článek se zabývá složitými migracemi dat a nabízí komplexního průvodce různými technikami a osvědčenými postupy, které zajistí bezproblémový přenos dat. Strategii migrace můžete efektivně naplánovat a spustit tak, že pochopíte různé metody migrace dat, jako je logická a fyzická migrace, a vyřešíte potenciální problémy, jako je integrita dat a výpadek. Tato příručka vám poskytne znalosti pro zpracování velkých datových sad, minimalizaci přerušení a použití robustních funkcí Azure k optimalizaci výkonu a spolehlivosti databáze. Bez ohledu na to, jestli chcete modernizovat infrastrukturu nebo vylepšit možnosti správy dat, tento článek vám poskytne přehledy potřebné pro úspěšnou migraci dat.

Požadavky

Migrace místního MySQL do služby Azure Database for MySQL: Standardní hodnoty výkonu

Zálohování databáze

Jako obezřetný krok před upgradem nebo migrací dat exportujte databázi před upgradem pomocí aplikace MySQL Workbench nebo ručně pomocí mysqldump příkazu.

Offline vs. online

Před výběrem nástroje pro migraci by se mělo určit, jestli má být migrace online nebo offline.

  • Offline migrace způsobí, že během migrace dojde k výpadku systému. Tato možnost zajišťuje, že nedojde k žádným transakcím a stav dat je přesně to, co se očekává při obnovení v Azure.

  • Online migrace migruje data téměř v reálném čase. Tato možnost je vhodná v případě, že uživatelům nebo aplikacím využívajícím datové úlohy dojde k malému výpadku. Proces zahrnuje replikaci dat pomocí metody replikace, například binlog nebo podobné.

Pro WWI má jejich prostředí několik složitých síťových a bezpečnostních požadavků, které neumožňují použít příslušné změny pro příchozí a odchozí připojení v cílovém časovém rámci migrace. Tyto složitosti a požadavky v podstatě eliminují online přístup z hlediska.

Poznámka:

Další podrobnosti o offline a online migraci najdete v částech Plánování a posouzení.

Posun dat

Offline strategie migrace mají potenciál pro posun dat. Posun dat nastane, když se nově upravená zdrojová data stanou mimo synchronizaci s migrovanými daty. V takovém případě je potřeba úplný export nebo rozdílový export. Tento problém můžete zmírnit zastavením veškerého provozu do databáze a následným provedením exportu. Pokud není možné zastavit veškerý provoz úprav dat, je potřeba počítat s posunem.

Určení změn může být složité, pokud databázové tabulky nemají sloupce, jako jsou číselné primární klíče, nebo nějaký typ úpravy a vytvoření data v každé tabulce, která je potřeba migrovat.

Pokud je například k dispozici číselný primární klíč a migrace se importuje v pořadí řazení, je poměrně jednoduché určit, kde se import zastavil, a restartovat ho z této pozice. Pokud neexistuje žádný číselný klíč, může být možné použít úpravu a vytvoření data a znovu provést import seřazeným způsobem, abyste mohli migraci restartovat z posledního data, které vidíte v cíli.

Doporučení k výkonu

Export

  • Použití nástroje pro export, který se dá spustit v režimu s více vlákny, jako je například mydumper

  • Při použití MySQL 8.0 použijte dělené tabulky , pokud je to vhodné ke zvýšení rychlosti exportu.

Import

  • Po načtení dat vytvořte clusterované indexy a primární klíče. Načtěte data v pořadí primárního klíče nebo jiné, pokud primární klíč obsahuje sloupec kalendářních dat (například změnit datum nebo vytvořit datum) v seřazeném pořadí.

  • Pozdržte vytváření sekundárních indexů, dokud se data nenačtou. Po načtení vytvořte všechny sekundární indexy.

  • Před načtením zakažte omezení cizího klíče. Zakázání kontrol cizích klíčů poskytuje významné zvýšení výkonu. Povolte omezení a ověřte data po načtení, abyste zajistili referenční integritu.

  • Načtěte data paralelně. Vyhněte se příliš mnoho paralelismu, které by mohly způsobit kolize prostředků a monitorovat prostředky pomocí metrik dostupných na webu Azure Portal.

Provedení migrace

  • Zálohování databáze

  • Vytvoření a ověření cílové zóny Azure

  • Konfigurace parametrů zdrojového serveru

  • Konfigurace parametrů cílového serveru

  • Export databázových objektů (schéma, uživatelé atd.)

  • Export dat

  • Import databázových objektů

  • Import dat

  • Ověřování

  • Resetování parametrů cílového serveru

  • Migrace jedné nebo více aplikací

Běžné kroky

Navzdory tomu, jaká cesta se provádí, je potřeba provést běžné kroky:

  • Upgrade na podporovanou verzi Azure MySQL

  • Inventarizace databázových objektů

  • Export uživatelů a oprávnění

Migrace na nejnovější verzi MySQL

Vzhledem k tomu, že databáze KONFERENCE WWI běží na verzi 5.5, je nutné provést upgrade. Ředitel IT požádal, aby upgradoval na nejnovější verzi MySQL (aktuálně 8.0).

Existují dva způsoby upgradu na verzi 8.0:

  • Místní

  • Export/import

Při rozhodování o upgradu je důležité spustit nástroj pro kontrolu upgradu, abyste zjistili, jestli nedošlo ke konfliktům. Například při upgradu na MySQL Server 8.0 nástroj kontroluje následující konflikty:

  • Názvy databázových objektů, které jsou v konfliktu s rezervou slov v MySQL 8.0

  • Použití znakové sady utf8mb3

  • Použití atributů typu délky ZEROFILL/display

  • Názvy tabulek, které jsou v konfliktu s tabulkami ve verzi 8.0

  • Využití dočasného typu

  • Názvy omezení cizího klíče delší než 64 znaků

Pokud kontrola upgradu hlásí žádné problémy, je bezpečné provést místní upgrade nahrazením binárních souborů MySQL. Databáze s problémy je potřeba exportovat a vyřešit problémy.

Scénář WWI

Po úspěšné migraci instance MySQL na verzi 8.0 si tým migrace WWI uvědomil, že původní místní cesta Migrace MySQL do služby Azure Database for MySQL se už nedá použít jako nástroj DMS aktuálně podporuje jenom verze 5.6 a 5.7. DMS vyžadoval přístup k síti. Tým pro migraci WWI nebyl připravený na řešení složitých problémů se sítí. Tyto problémy s prostředím zúžily volbu nástroje pro migraci na MySQL Workbench.

Databázové objekty

Jak je uvedeno v části Testovací plány, měli byste před migrací a po migraci provést inventář databázových objektů, abyste měli jistotu, že jste migrovali všechno.

Pokud chcete spustit uloženou proceduru pro vygenerování těchto informací, můžete použít něco podobného jako následující:

DELIMITER //
CREATE PROCEDURE `Migration_PerformInventory`(IN schemaName CHAR(64))
BEGIN

        DECLARE finished INTEGER DEFAULT 0;
          DECLARE tableName varchar(100) DEFAULT "";

        #get all tables
            DECLARE curTableNames
                CURSOR FOR
                    SELECT TABLE_NAME FROM information_schema.tables where TABL
E_SCHEMA = schemaName;

            -- declare NOT FOUND handler
            DECLARE CONTINUE HANDLER
                FOR NOT FOUND SET finished = 1;

            DROP TABLE IF EXISTS MIG_INVENTORY;

                CREATE TABLE MIG_INVENTORY
                (
                      REPORT_TYPE VARCHAR(1000),
                      OBJECT_NAME VARCHAR(1000),
                  PARENT_OBJECT_NAME VARCHAR (1000),
                      OBJECT_TYPE VARCHAR(1000),
                      COUNT INT
                )
                ROW_FORMAT=DYNAMIC,
                ENGINE='InnoDB';
              INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
                SELECT
                     'OBJECTCOUNT', 'TABLES', 'TABLES', COUNT(*)
              FROM
                     information_schema.tables
                where
                     TABLE_SCHEMA = schemaName;
                #### Constraints
              INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
                SELECT
                      'OBJECTCOUNT', 'STATISTICS', 'STATISTICS', COUNT(*)
                FROM
                      information_schema.STATISTICS
                WHERE
                      TABLE_SCHEMA = schemaName;
                INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
                SELECT
                      'OBJECTCOUNT', 'VIEWS', 'VIEWS', COUNT(*)
                FROM
                      information_schema.VIEWS
                WHERE
                      ROUTINE_TYPE = 'FUNCTION' and
                      ROUTINE_SCHEMA = schemaName;

                INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
                SELECT
                      'OBJECTCOUNT', 'PROCEDURES', 'PROCEDURES', COUNT(*)
                FROM
                      information_schema.ROUTINES
                WHERE
                      ROUTINE_TYPE = 'PROCEDURE' and
                      ROUTINE_SCHEMA = schemaName;

                INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
                SELECT
                       'OBJECTCOUNT', 'EVENTS', 'EVENTS', COUNT(*)
                FROM
                       information_schema.EVENTS
                WHERE
                       EVENT_SCHEMA = schemaName;

                INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
                SELECT
                       'OBJECTCOUNT', 'USER DEFINED FUNCTIONS', 'USER DEFINED FUNCTIONS'
        , COUNT(*)
                FROM
                        mysql.func;

                INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)
                SELECT
                        'OBJECTCOUNT', 'USERS', 'USERS', COUNT(*)
                FROM
                        mysql.user
                WHERE
                        user <> '' order by user;

                OPEN curTableNames;

                getTableName: LOOP
                        FETCH curTableNames INTO tableName;
                        IF finished = 1 THEN
                              LEAVE getTableName;
                        END IF;

                   SET @s = CONCAT('SELECT COUNT(*) into @TableCount FROM ', schemaName,
'.', tableName);
        #SELECT @s;
            PREPARE stmt FROM @s;
        EXECUTE stmt;
        INSERT INTO MIG_INVENTORY (REPORT_TYPE,OBJECT_NAME, OBJECT_TYPE, COUNT)

                SELECT
                    'TABLECOUNT', tableName, 'TABLECOUNT', @TableCount;
        DEALLOCATE PREPARE stmt;

     END LOOP getTableName;
     CLOSE curTableNames;

   SELECT * FROM MIG_INVENTORY;
END //

DELIMITER ;

CALL Migration_PerformInventory('reg_app');
  • Voláním tohoto postupu ve zdrojové databázi se zobrazí následující (zkrácený výstup):

Snímek obrazovky s zkráceným výstupem

  • Výsledek procedury cílové databáze by měl po dokončení migrace vypadat podobně jako na následujícím obrázku. Všimněte si, že databáze neobsahuje žádné funkce. Funkce byly před migrací odstraněny.

Snímek obrazovky s funkcemi databáze

Uživatelé a oprávnění

Úspěšná migrace vyžaduje migraci přidružených uživatelů a oprávnění do cílového prostředí.

Pomocí následujícího skriptu PowerShellu exportujte všechny uživatele a jejich granty:

$username = "yourusername";
$password = "yourpassword";
mysql -u$username -p$password --skip-column-names -A -e"SELECT CONCAT('SHOW G
RANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" > Show
Grants.sql;

$lines = get-content "ShowGrants.sql"

foreach ($line in $lines)
{
mysql -u$username -p$password --skip-column-names -A -e"$line" >> AllGrants.sql
}
  • Vytvoření nového skriptu PowerShellu pomocí integrovaného skriptovacího prostředí (ISE) PowerShellu (viz dokument nastavení)

  • Nastavení uživatelského jména na root a heslo na heslo uživatele root

Pak můžete spustit AllGrants.sql skript, který cílí na novou službu Azure Database for MySQL:

$username = "yourusername";
$password = "yourpassword";
$server = "serverDNSname";
$lines = get-content "AllGrants.sql"

foreach ($line in $lines)
{
mysql -u$username -p$password -h$server --ssl-ca=c:\temp\BaltimoreCyberTrus
tRoot.crt.cer --skip-column-names -A -e"$line"
}

Uživatele můžete také vytvářet ve službě Azure Database for MySQL pomocí PowerShellu: /en-us/azure/mysql/howto-create-users

Provedení migrace

Se základními komponentami migrace je teď možné pokračovat v migraci dat. Dříve bylo zavedeno několik nástrojů a metod. V případě WWI budou k exportu dat využít cestu MySQL Workbench a pak je naimportují do služby Azure Database for MySQL.

Kontrolní seznam pro migraci dat

  • Porozumíte složitosti prostředí a pokud je možný online přístup.

  • Účet pro posun dat. Zastavení databázové služby může eliminovat potenciální posun dat.

  • Konfigurace zdrojových parametrů pro rychlý export

  • Nakonfigurujte cílové parametry pro rychlý import.

  • Otestujte všechny migrace, které mají jinou zdrojovou verzi a cíl.

  • Migrujte všechny objekty, které nejsou založené na datech, jako jsou uživatelská jména a oprávnění.

  • Ujistěte se, že jsou všechny úkoly zdokumentované a odškrtnuté při provádění migrace.

Další krok