Migrace z databáze Oracle na open source může přinést řadu výhod. Nižší náklady na vlastnictví jsou lákavé a nutí mnoho společností k migraci. Zároveň je potřeba, aby DevOps, SysOps nebo DBA dodržovali přísné smlouvy SLA, aby odpovídaly obchodním potřebám.
Jedním z klíčových problémů při plánování migrace dat do jiné databáze, zejména open source, je, jak zabránit ztrátě dat. Není příliš přitažené za vlasy, že někdo omylem smazal část databáze, někdo zapomněl zahrnout klauzuli WHERE do dotazu DELETE nebo náhodně spustil DROP TABLE. Otázkou je, jak se z takových situací vzpamatovat.
Takové věci se mohou a budou dít, je to nevyhnutelné, ale dopad může být katastrofální. Jak někdo řekl:„Je to zábava a hry, dokud se zálohování nezdaří“. Nejcennější aktivum nemůže být ohroženo. Období.
Strach z neznámého je přirozený, pokud nejste obeznámeni s novými technologiemi. Ve skutečnosti může znalost databázových řešení Oracle, spolehlivost a skvělé funkce, které Oracle Recovery Manager (RMAN) nabízí, odradit vás nebo váš tým od migrace na nový databázový systém. Rádi používáme věci, které známe, tak proč migrovat, když naše současné řešení funguje. Kdo ví, kolik projektů bylo pozastaveno, protože tým nebo jednotlivec nebyli přesvědčeni o nové technologii?
Logické zálohy (exp/imp, expdp/impdb)
Podle dokumentace MySQL je logické zálohování „zálohou, která reprodukuje strukturu tabulky a data bez kopírování skutečných datových souborů“. Tato definice může platit pro světy MySQL i Oracle. Totéž je „proč“ a „kdy“ použijete logickou zálohu.
Logické zálohy jsou dobrou volbou, když víme, jaká data budou upravena, takže můžete zálohovat pouze tu část, kterou potřebujete. Zjednodušuje potenciální obnovu z hlediska času a složitosti. Je to také velmi užitečné, pokud potřebujeme přesunout část datové sady malé/střední velikosti a zkopírovat ji zpět do jiného systému (často na jinou verzi databáze). Oracle používá exportní nástroje jako exp a expdp ke čtení databázových dat a jejich exportu do souboru na úrovni operačního systému. Poté můžete importovat data zpět do databáze pomocí importních nástrojů imp nebo impdp.
Oracle Export Utilities nám dává mnoho možností, jak si vybrat, která data je třeba exportovat. U mysql rozhodně nenajdete stejný počet funkcí, ale většinu potřeb pokryje a zbytek lze provést pomocí dalšího skriptování nebo externích nástrojů (kontrola mydumper).
MySQL přichází s balíčkem nástrojů, které nabízejí velmi základní funkce. Jsou to mysqldump, mysqlpump (moderní verze mysqldump, která má nativní podporu pro paralelizaci) a klient MySQL, který lze použít k extrahování dat do plochého souboru.
Níže naleznete několik příkladů, jak je používat:
Pouze záloha struktury databáze
mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql
Struktura zálohovací tabulky
mysqldump --no-data --single- transaction -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql
Zálohovat konkrétní řádky
mysqldump -h localhost --single- transaction -u root -ppassword mydatabase table_name --where="date_created='2019-05-07'" > table_with_specific_rows_dump.sql
Import tabulky
mysql -u username -p -D dbname < tableName.sql
Výše uvedený příkaz zastaví načítání, pokud dojde k chybě.
Pokud načtete data přímo z klienta mysql, chyby budou ignorovány a klient bude pokračovat
mysql> source tableName.sql
Chcete-li protokolovat výstup, musíte použít
mysql> tee import_tableName.log
Všechny příznaky vysvětlené pod níže uvedenými odkazy:
- https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
- https://dev.mysql.com/doc/refman/8.0/en/mysqlimport.html
- https://dev.mysql.com/doc/refman/8.0/en/mysql.html
Pokud plánujete používat logické zálohování v různých verzích databáze, ujistěte se, že máte správné nastavení řazení. Následující příkaz lze použít ke kontrole výchozí znakové sady a řazení pro danou databázi:
USE mydatabase;
SELECT @@character_set_database, @@collation_database;
Dalším způsobem, jak získat systémovou proměnnou collation_database, je použití SHOW VARIABLES.
SHOW VARIABLES LIKE 'collation%';
Kvůli omezením mysql výpisu musíme často upravovat výstup. Příkladem takové úpravy může být potřeba odstranit některé řádky. Naštěstí máme možnost prohlížet a upravovat výstup pomocí standardních textových nástrojů před obnovením. Nástroje jako awk, grep, sed se mohou stát vaším přítelem. Níže je jednoduchý příklad, jak odstranit třetí řádek ze souboru výpisu.
sed -i '1,3d' file.txt
Možnosti jsou nekonečné. To je něco, co u Oracle nenajdeme, protože data jsou zapsána v binárním formátu.
Při spouštění logického mysql musíte vzít v úvahu několik věcí. Jedním z hlavních omezení je čistá podpora paralelismu a zamykání objektů.
Aspekty logického zálohování
Po provedení takové zálohy budou provedeny následující kroky.
- Tabulku LOCK TABLE.
- ZOBRAZIT tabulku CREATE TABLE.
- VYBRAT * Z tabulky DO OUTFILE dočasného souboru.
- Zapište obsah dočasného souboru na konec souboru výpisu.
- ODEMKNĚTE TABULKY
Ve výchozím nastavení mysqldump nezahrnuje rutiny a události do svého výstupu – musíte explicitně nastavit příznaky --routines a --events.
Dalším důležitým aspektem je motor, který používáte k ukládání dat. Doufejme, že v dnešní době většina produkčních systémů používá ACID kompatibilní engine nazvaný InnoDB. Starší engine MyISAM musel zamknout všechny tabulky, aby byla zajištěna konzistence. To je, když byl proveden FLUSH TABLES WITH READ LOCK. Bohužel je to jediný způsob, jak zaručit konzistentní snímek tabulek MyISAM při běžícím serveru MySQL. Tím se server MySQL stane pouze pro čtení, dokud nebude provedeno UNLOCK TABLES.
Pro tabulky na InnoDB storage engine se doporučuje použít volbu --single-transaction. MySQL pak vytvoří kontrolní bod, který umožňuje výpisu zachytit všechna data před kontrolním bodem a zároveň přijímat příchozí změny.
Možnost --single-transaction mysqldump neprovádí FLUSH TABULKY SE ZÁMEKEM ČTENÍ. To způsobí, že mysqldump nastaví REPEATABLE READ transakci pro všechny tabulky, které jsou vypisovány.
Záloha mysqldump je mnohem pomalejší než Oracle tools exp, expdp. Mysqldump je nástroj s jedním vláknem a to je jeho nejvýznamnější nevýhoda - výkon je v pořádku pro malé databáze, ale rychle se stane nepřijatelným, pokud soubor dat naroste na desítky gigabajtů.
- ZAČNĚTE TRANSAKCI S KONZISTENTNÍM SNÍMEKEM.
- Pro každé schéma databáze a tabulky provede výpis tyto kroky:
- ZOBRAZIT tabulku CREATE TABLE.
- VYBRAT * Z tabulky DO OUTFILE dočasného souboru.
- Zapište obsah dočasného souboru na konec souboru výpisu.
- ODPOVĚDIT.
Fyzické zálohy (RMAN)
Naštěstí většinu omezení logického zálohování lze vyřešit pomocí nástroje Percona Xtrabackup. Percona XtraBackup je nejoblíbenější software pro zálohování MySQL/MariaDB s otevřeným zdrojovým kódem, který provádí neblokující zálohy pro databáze InnoDB a XtraDB. Spadá do kategorie fyzické zálohy, která se skládá z přesných kopií datového adresáře MySQL a souborů pod ním.
Je to stejná kategorie nástrojů jako Oracle RMAN. RMAN je součástí databázového softwaru, XtraBackup je třeba stáhnout samostatně. Xtrabackup je k dispozici jako balíček rpm a deb a podporuje pouze platformy Linux. Instalace je velmi jednoduchá:
$ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-XtraBackup-80-8.0.4-1.el7.x86_64.rpm
$ yum localinstall percona-XtraBackup-80-8.0.4-1.el7.x86_64.rpm
XtraBackup nezamyká vaši databázi během procesu zálohování. U velkých databází (100+ GB) poskytuje mnohem kratší dobu obnovy ve srovnání s mysqldump. Proces obnovy zahrnuje přípravu dat MySQL ze záložních souborů před jejich nahrazením nebo přepnutím do aktuálního datového adresáře v cílovém uzlu.
Percona XtraBackup funguje tak, že si při spuštění zapamatuje pořadové číslo protokolu (LSN) a poté zkopíruje datové soubory na jiné místo. Kopírování dat nějakou dobu trvá, a pokud se soubory mění, odrážejí stav databáze v různých okamžicích. Současně XtraBackup spouští proces na pozadí, který dohlíží na soubory protokolu transakcí (aka redo log) a kopíruje z něj změny. To je třeba provádět neustále, protože protokoly transakcí jsou zapisovány způsobem cyklicky a lze je po chvíli znovu použít. XtraBackup potřebuje záznamy protokolu transakcí pro každou změnu v datových souborech od zahájení provádění.
Když je nainstalován XtraBackup, můžete konečně provádět své první fyzické zálohy.
xtrabackup --user=root --password=PASSWORD --backup --target-dir=/u01/backups/
Další užitečnou možností, kterou správci MySQL dělají, je streamování zálohy na jiný server. Takový stream lze provést pomocí nástroje xbstream, jako v příkladu níže:
Spusťte posluchač na externím serveru na preferovaném portu (v tomto příkladu 1984)
nc -l 1984 | pigz -cd - | pv | xbstream -x -C /u01/backups
Spusťte zálohování a přeneste na externí hostitel
innobackupex --user=root --password=PASSWORD --stream=xbstream /var/tmp | pigz | pv | nc external_host.com 1984
Jak jste si mohli všimnout, proces obnovy je rozdělen do dvou hlavních kroků (podobně jako u Oracle). Kroky jsou obnoveny (zkopírovat zpět) a obnovit (použít protokol).
XtraBackup --copy-back --target-dir=/var/lib/data
innobackupex --apply-log --use-memory=[values in MB or GB] /var/lib/data
Rozdíl je v tom, že můžeme provést obnovu pouze do bodu, kdy byla záloha pořízena. Chcete-li použít změny po zálohování, musíme to udělat ručně.
Obnovení bodu v čase (obnovení RMAN)
V Oracle provádí RMAN všechny kroky, když provádíme obnovu databáze. Lze to provést buď na SCN nebo na čas nebo na základě zálohované datové sady.
RMAN> run
{
allocate channel dev1 type disk;
set until time "to_date('2019-05-07:00:00:00', 'yyyy-mm-dd:hh24:mi:ss')";
restore database;
recover database; }
V mysql potřebujeme další nástroj k extrahování dat z binárních protokolů (podobných archivním protokolům Oracle) mysqlbinlog. mysqlbinlog umí číst binární protokoly a převádět je na soubory. Co musíme udělat, je
Základní postup by byl
- Obnovení úplné zálohy
- Obnovte přírůstkové zálohy
- Chcete-li identifikovat počáteční a koncové časy obnovy (to by mohl být konec zálohy a číslo pozice před bohužel vyřazením z tabulky).
- Převeďte potřebné binglogy na SQL a aplikujte nově vytvořené soubory SQL ve správném pořadí – nezapomeňte spustit jediný příkaz mysqlbinlog.
> mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
Šifrování záloh (Oracle Wallet)
Percona XtraBackup lze použít k šifrování nebo dešifrování místních nebo streamovaných záloh s možností xbstream pro přidání další vrstvy ochrany k zálohám. K zadání šifrovacího klíče lze použít volbu --encrypt-key i --encryptkey-file. Šifrovací klíče lze generovat pomocí příkazů jako
$ openssl rand -base64 24
$ bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1
Tato hodnota pak může být použita jako šifrovací klíč. Příklad příkazu innobackupex pomocí --encrypt-key:
$ innobackupex --encrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1” /storage/backups/encrypted
Pro dešifrování jednoduše použijte volbu --decrypt s příslušným --encrypt-key:
$ innobackupex --decrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1”
/storage/backups/encrypted/2019-05-08_11-10-09/
Zásady zálohování
V MySQL/MariaDB ani v nástroji Percona neexistuje žádná vestavěná funkce zásad zálohování. Pokud byste chtěli spravovat své logické nebo fyzické zálohy MySQL, můžete k tomu použít ClusterControl.
ClusterControl je komplexní systém správy databází s otevřeným zdrojovým kódem pro uživatele se smíšenými prostředími. Poskytuje pokročilé funkce správy zálohování pro MySQL nebo MariaDB.
Pomocí ClusterControl můžete:
- Vytvořte zásady zálohování
- Monitorujte stav zálohování, provádění a servery bez záloh
- Provádět zálohování a obnovení (včetně obnovení v určitém okamžiku)
- Řízení uchovávání záloh
- Ukládat zálohy do cloudového úložiště
- Ověřte zálohy (úplný test s obnovením na samostatném serveru)
- Šifrovat zálohy
- Komprimovat zálohy
- A mnoho dalších
Uchovávejte zálohy v cloudu
Organizace již v minulosti nasazovaly řešení zálohování na pásku jako prostředek k ochraně
dat před selháním. Vznik veřejného cloud computingu však také umožnil nové modely s nižšími TCO, než jaké byly tradičně dostupné. Z obchodního hlediska nedává smysl abstrahovat náklady na řešení DR od jeho návrhu, takže organizace musí implementovat správnou úroveň ochrany za nejnižší možné náklady.
Cloud změnil odvětví zálohování dat. Vzhledem k dostupné ceně mají menší podniky řešení mimo pracoviště, které zálohuje všechna jejich data (a ano, ujistěte se, že jsou šifrována). Oracle i MySQL nenabízí vestavěná řešení cloudového úložiště. Místo toho můžete použít nástroje poskytované cloudovými dodavateli. Příkladem může být s3.
aws s3 cp severalnines.sql s3://severalnine-sbucket/mysql_backups
Závěr
Existuje řada způsobů, jak zálohovat databázi, ale před rozhodnutím o strategii zálohování je důležité zkontrolovat obchodní potřeby. Jak vidíte, existuje mnoho podobností mezi zálohami MySQL a Oracle, které, doufejme, mohou splnit vaše SLA.
Vždy se ujistěte, že tyto povely procvičujete. Nejen, když jste v této technologii noví, ale kdykoli se DBMS stane nepoužitelným, abyste věděli, co dělat.
Chcete-li se o MySQL dozvědět více, podívejte se na náš whitepaper The DevOps Guide to Database Backups for MySQL and MariaDB.