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):
- 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.
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.