Velké organizace, které používají databázové platformy MySQL nebo MariaDB, se často potýkají s potřebou provést migraci databáze z jednoho místa na druhé. Bez ohledu na platformu, typ databázového softwaru (například z RDBMS na NoSQL nebo NoSQL s návratem k RDBMS), nebo pokud se jedná pouze o migraci dat, je provedení migrace obrovské množství práce a nákladů.
Migrace databáze bude vždy zahrnovat proces migrace dat z jedné nebo více zdrojových databází do jedné nebo více cílových databází. To může zahrnovat službu migrace databáze nebo mashup sadu nástrojů, které inženýři vytvořili pro vytvoření služby a přizpůsobení tomuto druhu problému.
Očekává se, že migrace databáze neznamená, že zdrojová databázová platforma skončí jako cílová platforma přesně jako zdroj původu. Jakmile je migrace dokončena, datová sada z cílových databází může skončit pravděpodobně restrukturalizována. Po úplném dokončení migrace je nejdůležitější, že klienti přistupující k databázi budou přesměrováni do nově zdrojových databází. Nová zdrojová databáze musí poskytovat přesnou kopii dat ze zdroje a bez dopadů na výkon, který by mohl ovlivnit celkovou uživatelskou zkušenost.
Přesun dat z jedné platformy do cílové cílové platformy je obrovský úkol. To je to, co pokrývá migrace databáze, když se organizace nebo společnost rozhodne z mnoha důvodů vypnout své světlo na současnou platformu. Běžným důvodem migrace dat je efektivnost nákladů na cílovou cílovou platformu nebo její flexibilita při nasazení a škálovatelnost. Zatímco současná platforma hostující aktuální produkční data způsobuje vyšší náklady na její upgrady a škálovatelnost, je jen zatěžující při zavádění malých změn, které lze ve skutečnosti nasadit na platformě mikroslužeb.
V tomto blogu se zaměříme na nejlepší open source nástroje, které můžete použít pro migraci MySQL a MariaDB na homogennější migraci databází.
Zálohovací nástroje pro migraci dat
Nejjednodušší cestou k použití při provádění migrace je použití nástrojů pro zálohování databáze. Podíváme se, co tyto nástroje jsou a jak je můžete použít během migrace.
mysqldump/mysqlpump
Tento nástroj je jedním z nejznámějších nástrojů pro MySQL nebo MariaDB, který správce databáze nebo správce systému připojí k tomuto nástroji k migraci buď úplné databáze, nebo částečné kopie databáze. Správcům databází, kteří nejsou obeznámeni s MySQL/MariaDB, vám tento nástroj umožní vytvořit kopii zálohy, která vygeneruje logickou kopii dat, kterou můžete uložit do cílové databáze.
Běžné nastavení při použití tohoto nástroje je, že kdykoli je cílová databáze umístěna někde jinde a je hostována na jiné platformě než zdrojová, cíl se chová jako slave nebo replika. Použití mysqldump běžně vyvolávaného s --single-transaction na vytíženém systému a s --master-data vám poskytne souřadnice pro nastavení slave v cílové databázi, která bude použita jako hostitel pro migraci dat. Alternativou k mysqldump je také mysqlpump, ale s menší funkcí, přesto může provádět paralelní zpracování databází a objektů v databázích, aby se urychlil proces výpisu. Nevýhodou je, že s mysqlpump neexistuje žádná možnost, kterou byste mohli použít, jako je --master-data, což je velmi užitečné, pokud chcete vytvořit repliku, která bude použita jako cílový cíl pro migraci databáze.
mysqlpump je výhodné, pokud jsou vaše data spíše nečinná nebo jsou uvedena do režimu údržby, takže ve zdrojové databázi neprobíhají žádné zpracované zápisy ani změny. Je rychlejší a rychlejší ve srovnání s mysqldump.
mydumper/myloader
mydumper/myloader je velmi šikovný a účinný nástroj, který můžete použít pro logické zálohování, zejména pro import hromadných dat s vyšší rychlostí zpracování, protože nabízí paralelismus, možnost posílat data po částech, podporuje práh a kontrolu hodnotit počet vláken, řádků, velikost příkazu a komprimovat výsledek. Generuje nebo zahrnuje binární soubor protokolu a pozice protokolu, což je velmi užitečné, pokud nastavíte cílovou cílovou platformu tak, aby fungovala jako replika aktuálního zdrojového a produkčního prostředí.
Mydumper je v podstatě binární soubor a příkaz, který musíte vyvolat přes příkazový řádek pro vytvoření logické zálohy. Zatímco myloader je binární a příkaz, který musíte použít při načítání dat do požadovaného cílového umístění. Jeho flexibilita vám umožňuje spravovat požadovanou rychlost při zpracování akcí, ať už jde o vytváření zálohy nebo načítání dat. Pomocí mydumper můžete také vytvořit úplnou zálohu nebo jen částečnou záložní kopii vaší zdrojové databáze. To je velmi užitečné v případě, že potřebujete velká data nebo schéma, které jste chtěli přesunout pryč od aktuálního hostitele databáze a mírně je přesunout do jiného cílového umístění, zatímco začínáte nastavovat fragmenty nové databáze. Může to být také jeden způsob, jak migrovat velká data stažením velkého segmentu datové sady a jejím přesunem, ale jako nový uzel fragmentu.
mydumper/myloader má také svá omezení. Byly zastaveny aktualizace od původních autorů, ale Max Bube je zachránil, přesto je tento nástroj stále široce používán i pro produkční prostředí.
Percona XtraBackup/MariaDB Backup
Percona XtraBackup je dárek pro správce databází, kteří nechtějí používat a utrácet peníze za podnikový Oracle MySQL Enterprise Backup. Zatímco MariaDB Backup je rozvětvený a odvozený z Percona XtraBackup, mají také MariaDB Enterprise Backup.
Oba tyto nástroje sdílejí stejný koncept při provádění nebo vytváření zálohy. Je to binární záloha, která nabízí horkou online zálohu, PITR, přírůstkovou a úplnou zálohu, částečnou zálohu, také užitečnou pro obnovu dat, protože rozumí obnově tak, že vytváří binární log soubor a pozici, podporuje GTID a mnoho dalšího. Ačkoli MariaDB Backup a Percona XtraBackup jsou v dnešní době dva různé typy softwaru, protože jsou navrženy tak, aby podporovaly databázi zaměřenou na poskytování zálohy. Zálohování MariaDB je určitě použitelné, pokud máte v úmyslu používat nebo provádět zálohy ze zdroje databáze MariaDB. Zatímco Percona XtraBackup je použitelný na Oracle MySQL a také na Percona Server nebo některých odvozených MySQL serverech, jako je Percona XtraDB Server nebo Codership verze Galera Cluster for MySQL.
Obě zálohy jsou velmi výhodné pro migraci databází. Provádění horké online zálohy je rychlejší a rychlejší a vytváří zálohu, kterou můžete přímo použít k načtení do cílové databáze. Častěji je užitečné streamování zálohování, stejně jako můžete provádět online zálohování a streamovat binární data do cílové databáze pomocí socat nebo netcat. To vám umožní zkrátit dobu migrace, protože přesouvání dat do cílové destinace je streamováno přímo.
Nejběžnějším přístupem k migraci dat při použití tohoto nástroje je zkopírování dat ze zdroje a následné streamování dat do cílového cíle. Jakmile jste v cílové databázi, můžete pouze připravit binární zálohu pomocí volby --prepare, kde použije protokoly, které byly zaznamenány během vytváření zálohy, takže zkopíruje úplná data tak, jak jsou a přesně od okamžiku. kde byla záloha pořízena. Poté nastavte cíl cílové databáze jako repliku, aby fungovala jako replika nebo slave existujícího zdrojového clusteru a replikovala všechny změny a transakce, ke kterým došlo z hlavního clusteru.
Samozřejmě existuje také omezení používání tohoto nástroje, ale správci databáze musí vědět, jak tento nástroj používat, a také jak omezit a přizpůsobit použití v souladu s jeho požadovaným použitím. Možná nebudete chtít zahltit svou zdrojovou databázi, pokud váš zdroj od té doby zabírá příliš velký provoz nebo velké zpracování. Jeho omezení také zajišťuje, že se jedná o homogenní nastavení, kde je cílovým zdrojem systém kompatibilní s Linuxem a nikoli v prostředí typu Windows, protože Percona XtraBackup a MariaDB Backup fungují pouze v prostředí Linux.
Nástroje pro migraci schémat databáze
Migrace databáze sama o sobě nevypovídá pouze o konkrétním nástroji a konkrétním úkolu, pak může dojít k migraci. Existuje mnoho úvah a souvisejících následných úkolů, které je třeba provést, aby byla provedena kompletní migrace databáze. Jedním z nich je migrace schématu nebo migrace databáze. Schéma v MySQL/MariaDB je kolekce dat, která se skládá ze skupiny tabulek se sloupci a řádky, událostmi, spouštěči, uloženými procedurami nebo rutinami a funkcemi. Jsou případy, kdy možná budete chtít migrovat pouze schéma nebo pouze tabulku. Řekněme, že konkrétní tabulka ve schématu vyžaduje změnu struktury tabulky a to vyžaduje příkaz DDL. Problém je v tom, že spuštění přímého příkazu DDL, jako je ALTER TABLE ...ENGINE=InnoDB, zablokuje všechny příchozí transakce nebo připojení, která budou také odkazovat nebo používat cílovou tabulku. U některých velkých tabulek, které obsahují dlouhou definici dat a strukturu tabulky, to přidává skutečnou výzvu a také to více komplikuje, zejména pokud je tabulka horká tabulka. Zatímco při migraci databáze může být obtížné zkopírovat přesnou úplnou kopii celé tabulky bez výpadků ze zdroje. Pojďme se tedy podívat, co to je.
pt-online-schema-change
Je součástí slavné sady nástrojů Percona, která původně pochází z Maatkit a Aspersa. Tento nástroj je velmi užitečný při provádění změny definice tabulky, zejména u horké tabulky sestávající z velkého množství dat. U některých běžných, ale naivních přístupů k provádění změny definice tabulky může tuto práci provést spuštění ALTER TABLE. Ačkoli to stačí, ALTER TABLE bez použití ALGORITHM=INPLACE způsobí úplnou kopii tabulky, která získá úplný zámek metadat, což znamená, že se vaše databáze může nahromadit a uzamknout na dlouhou dobu, zvláště pokud je tabulka obrovský. V takovém případě je tento nástroj vytvořen k vyřešení tohoto problému. Tento nástroj je velmi výhodný pro migraci databáze takovým způsobem, že se zjistí nekonzistentní kopie horké tabulky s velmi velkými daty z již nastavené cílové databáze. Namísto provádění zálohy buď pomocí logické nebo binární/fyzické kopie, lze použít pt-online-schema-change, která zkopíruje řádky ze zdrojové tabulky do cílové tabulky kousek po kousku. Příkaz můžete dokonce přizpůsobit pomocí správných volání jeho parametrů v závislosti na vašich požadavcích.
Kromě použití používá pt-online-schema-change také spouštěče. Při použití spouštěčů bude jakýkoli následný nebo pokračující provoz, který se pokouší aplikovat změny v této referenční tabulce, také zkopírován do cílové databáze, která funguje jako replika aktuálního zdrojového databázového clusteru. To zkopíruje všechna data přesně ta, která má zdrojová databáze, do vaší cílové databáze, která leží například na jiné platformě. Použití spouštěčů lze použít pro MySQL a MariaDB, pokud je jejich enginem InnoDB a má na této tabulce přítomnost primárního klíče, což je požadavek. Možná víte, že InnoDB používá mechanismus zamykání řádků, který umožňuje, že pro určitý počet bloků (skupina vybraných záznamů) se pt-online-schema-change pokusí zkopírovat a poté použije příkaz INSERT na cílovou tabulku. . Cílová tabulka je fiktivní tabulka, která funguje jako cílová kopie brzké náhrady stávající zdrojové tabulky. pt-online-schema-change však umožňuje uživateli buď odstranit fiktivní tabulku, nebo pouze nechat fiktivní tabulku na místě, dokud není administrátor připraven tuto tabulku odstranit. Vezměte na vědomí, že zrušením nebo odstraněním tabulky se získá metadatový zámek. Protože získává spouštěče, veškeré následné změny musí být zkopírovány přesně do cílové tabulky, přičemž v cílové nebo fiktivní tabulce nezůstanou žádné nesrovnalosti.
gh-ost
Sdílí stejný koncept jako pt-online-schema-change. Tento nástroj přistupuje odlišně ve srovnání s pt-online-schema-change. Řeknu, že tato migrace nástroje schématu se přibližuje k těm překážkám založeným na produkci, které mohou způsobit zpomalení vaší databáze a možná uvíznutí, což způsobí, že váš databázový klastr upadne do režimu údržby nebo se na neznámou dobu vypne, dokud se problém nevyřeší. vyřešeno. Tento problém je obvykle způsoben spouštěči. Pokud máte zaneprázdněnou nebo horkou tabulku, která prochází změnou schématu nebo změnou definice tabulky, spouštěče mohou způsobit nahromadění databáze kvůli sporům o zámek. Spouštěče MySQL/MariaDB umožňují vaší databázi definovat spouštěče pro INSERT, UPDATE a DELETE. Pokud je cílový stůl na aktivním bodu, může to skončit ošklivě. Vaše databáze se začne zpomalovat, dokud se nezasekne, pokud nejste schopni zabít ty příchozí dotazy nebo nejlépe odstranit spouštěče, ale o tom není ideální přístup.
Kvůli těmto problémům gh-ost řeší tento problém. Chová se, jako by existoval binární protokolový server, kde jsou příchozí události nebo transakce protokolovány ve formátu binárního protokolu, konkrétně pomocí RBR (Row Based Replication). Ve skutečnosti je to velmi bezpečné a méně starostí, pokud jde o dopad, kterému musíte čelit. Ve skutečnosti máte také možnost provést test nebo běh nasucho (stejně jako u pt-online-schema-change), ale otestovat to přímo do repliky nebo slave uzlu. To je perfektní, pokud si chcete pohrát a zkontrolovat přesnou kopii do vaší cílové databáze během migrace.
Tento nástroj je velmi flexibilní v souladu s vašimi potřebami a poskytuje záruku, že se váš cluster nezasekne nebo pravděpodobně neskončí s převzetím služeb při selhání nebo obnovou dat, pokud se zhorší. Pro více informací a chcete se naučit tento nástroj, doporučuji přečíst si tento příspěvek od Github od Shlomi Noach.
Další nástroje OSC
Mohu říci, že tyto dva nástroje jsou spíše doporučeným přístupem, ale můžete vyzkoušet i jiné alternativy. Tyto nástroje většinou používají spouštěče MySQL/MariaDB, takže nějak sdílí stejný koncept jako pt-online-schema-change. Zde je následující seznam:
- LHM – migrace databází ve stylu Rails jsou užitečným způsobem, jak agilním způsobem vyvinout vaše datové schéma. Většina projektů Rails začíná takto a zpočátku je provádění změn rychlé a snadné.
- OnlineSchemaChange – Vytvořeno a iniciováno Facebookem. Tento nástroj se používá k provádění změn schémat pro tabulky MySQL neblokujícím způsobem
- TableMigrator – Inicioval ho Serious Business a bývalí zaměstnanci Twitteru. Tento nástroj sdílí stejný princip s migrací velkých tabulek v MySQL s nulovými prostoji. Je implementován pomocí Rails, takže může být užitečný, pokud máte aplikační prostředí Ruby-on-Rails.
- oak-online-alter-table – toto je starý nástroj vytvořený Shlomi Noachem, i když se nějak blíží ke stejnému přístupu jako pt-online-schema-change a provádí neblokující operaci ALTER TABLE
Nástroje Průvodce migrací databáze
Existuje několik migračních nástrojů, které nabízejí bezplatné použití, což je do určité míry velmi výhodné. Při použití nástrojů průvodce migrací je výhodnější, že mají GUI, pro které můžete mít pohodlí vidět aktuální strukturu nebo jen postupovat podle kroků, které uživatelské rozhraní poskytuje během migrace. Může existovat mnoho služeb nebo nástrojů průvodce, ale není to open source a není k dispozici zdarma. Migrace databáze je samozřejmě velmi složitý, ale systematický proces, ale v některých případech vyžaduje velkou práci a úsilí. Pojďme se podívat na tyto bezplatné nástroje.
MySQL Workbench
Jak název napovídá, je to pro MySQL a odvozené databáze, jako je například Percona Server, mohou být užitečné při migraci databází. Vzhledem k tomu, že MariaDB se zcela přesunula na jinou cestu, zejména od verze 10.2, existují určité problémy s nekompatibilitou, se kterými se můžete setkat, pokud se ji pokusíte použít ze zdroje nebo cíle MariaDB. Workbench lze použít pro heterogenní typy databází, jako jsou ty, které pocházejí z různých zdrojových databází a chce data uložit do MySQL.
MySQL Workbench se skládá z komunitních a podnikových verzí. Přesto je komunitní verze volně dostupná jako GPL, kterou najdete zde https://github.com/mysql/mysql-workbench. Jak uvádí dokumentace, MySQL Workbench vám umožňuje migrovat z Microsoft SQL Server, Microsoft Access, Sybase ASE, SQLite, SQL Anywhere, PostreSQL a dalších tabulek, objektů a dat RDBMS do MySQL. Migrace také podporuje migraci z dřívějších verzí MySQL na nejnovější verze.
phpMyAdmin
Pro ty, kteří pracují jako weboví vývojáři používající zásobník LAMP, není tento nástroj žádným překvapením, že je jedním z jejich švýcarských armádních nožů při řešení databázových úloh. phpMyAdmin je bezplatný softwarový nástroj napsaný v PHP, určený ke správě MySQL přes web. phpMyAdmin podporuje širokou škálu operací na MySQL a MariaDB. Často používané operace (správa databází, tabulek, sloupců, vztahů, indexů, uživatelů, oprávnění atd.) lze provádět prostřednictvím uživatelského rozhraní, přičemž stále máte možnost přímo provádět jakýkoli příkaz SQL.
Přestože je to docela jednoduché, pokud jde o import a export, důležité je, že to dělá práci. Ačkoli pro větší a složitější migraci to nemusí stačit ke splnění vašich požadovaných potřeb.
HeidiSQL
HeidiSQL je svobodný software a jeho cílem je snadné se naučit. "Heidi" vám umožňuje prohlížet a upravovat data a struktury z počítačů s jedním z databázových systémů MariaDB, MySQL, Microsoft SQL, PostgreSQL a SQLite. HeidiSQL, vynalezený v roce 2002 Ansgarem, patří k celosvětově nejoblíbenějším nástrojům pro MariaDB a MySQL.
Pro účely migrace vám umožňuje exportovat z jednoho serveru/databáze přímo na jiný server/databázi. Má také funkce importu, které umožňují textová pole, jako je CSV, a také export řádků tabulek také do široké škály podporovaných typů souborů, jako jsou CSV, HTML, XML, SQL, LaTeX, Wiki Markup a PHP Array. Přestože je vytvořen pro správu databází pro účely administrace db serverů, můžete jej použít pro jednoduchou migraci.
Percona Toolkit jako váš švýcarský armádní nůž
Percona Toolkit je pozoruhodný software distribuovaný jako software s otevřeným zdrojovým kódem pod zárukou GPL. Percona Toolkit je sbírka pokročilých nástrojů příkazového řádku běžně používaných Perconou interně, ale je také použitelná pro jakoukoli databázovou práci související zejména se servery MySQL/MariaDB.
Jak a proč je to také užitečné pro migraci dat, zejména při migracích MySQL/MariaDB? Mají zde řadu nástrojů, které je výhodné použít při migraci a po migraci.
Jak již bylo zmíněno dříve, běžným přístupem migrace dat je mít cílový cílový server jako repliku hlavního zdrojového databázového clusteru, ale v homogenním nastavení. To znamená, že pokud se situace přesouvá z on-prem na veřejného poskytovatele cloudu, můžete nastavit zvolený uzel z této platformy a tento uzel bude replikovat všechny transakce z hlavního clusteru. Pomocí nástrojů pro zálohování můžete být schopni dosáhnout tohoto typu nastavení migrace. Tím to ale nekončí. Percona Toolkit má například nástroje pt-table-checksum/pt-table-sync, které vám pomohou identifikovat nekonzistence dat mezi místním databázovým serverem a cílovým cílovým databázovým serverem. Pomocí pt-table-checksum můžete provádět výpočty kontrolních součtů na základě řady bloků pro všechny databáze nebo pouze selektivně kontrolního součtu pro konkrétní databáze, konkrétní tabulky nebo dokonce rozsah záznamů tabulky. pt-table-sync bude použit k synchronizaci dat, takže vaše cílové databáze budou znovu obnoveny novou kopií přesných dat z hlavního zdrojového clusteru.
Na druhou stranu je pt-upgrade velmi užitečný po provedení migrace ze zálohovacích nástrojů. S pt-upgrade můžete tento nástroj použít k provedení analýzy spuštěním sady dotazů, například z pomalého souboru protokolu dotazů. Tyto výsledky lze použít k porovnání ze zdrojové databáze a s cílovým databázovým serverem.
Shrnutí
Migrace databáze, zejména z heterogenního nastavení, může být velmi komplikovaná. Přesto na homogenním nastavení to může být docela jednoduché; bez ohledu na to, zda jsou data velká nebo malá, pokud jste vybaveni správnými nástroji a samozřejmě správným systematickým přístupem k určení, že migrace je dokončena a data jsou konzistentní. Mohou nastat situace, kdy migrace vyžaduje konzultaci s odborníky, ale vždy je skvělý začátek přijít a vyzkoušet tyto nástroje s otevřeným zdrojovým kódem, abyste dosáhli požadovaného úkolu migrace databáze.