MySQL (55) - zálohování MySQL z pohledu správce

Správce databázového serveru má větší možnosti, ale i větší zodpovědnost. Jak se tedy postavit k zálohování dat?

20.1.2006 06:00 | Petr Zajíc | přečteno 34419×

Jak asi tušíte, dnes se zaměříme na zálohování MySQL databází z pohledu správce systému. Budeme tedy uvažovat o situacích, kdy máme daný server na starosti a můžeme, když je to potřeba, pracovat jako superuživatel. Jak uvidíme, i zde je více možností zálohování.

Příkaz BACKUP TABLE

Superuživatel samozřejmě může využít všechny možnosti, o nichž jsme hovořili v předchozích dvou dílech seriálu. Rovněž může použít některé další nástroje. Patří mezi ně příkaz BACKUP TABLE, který slouží k zálohování jediné tabulky. Jeho syntaxe je následující:

BACKUP TABLE [názevtabulky] TO '/cesta/k/zaloze'

A upřímně řečeno, používám jej dost nerad. Tento příkaz má následující výhody:

Ale rovněž následující nezanedbatelné nevýhody:

Jak to funguje? Jednoduše. Na serveru jsou pro každou tabulku typu MyISAM vyhrazeny až tři soubory:

Soubor
Obsahuje
*.frm
Definice tabulky MyISAM. Jsou zde uloženy typy a velikosti jednotlivých sloupců tabulky.
*.MYD
Samotná data pro tabulku.
*.MYI
Indexy pro danou tabulku

Pozn.: Seznam není vyčerpávající. V MySQL 5 může napříkad existovat soubor *.TRG s definicí triggerů pro danou tabulku, ale to teď není podstatné.

Když přijde příkaz pro zálohování pomocí BACKUP TABLE, databáze se postará aby do dané tabulky nemohl nikdo zapisovat a pak prostě vykopíruje soubory frm a MYD do cílového adresáře. Indexy se nekopírují, neboť je lze z obnovených dat poměrně snadno zrekonstruovat. Jak vidíme, není tedy za příkazem BACKUP TABLE žádná velká alchymie.

Příkaz mysqldump

Tento užitečný příkaz vytvoří zálohu dat tak, že sestaví SQL příkazy, které povedou k vytvoření dané tabuky nebo tabulek. Příkad:

mysqldump -u root test lidi > ~/lidi.sql

Povede k tomu, že bude vytvořen v domovském adresáři soubor lidi.sql se zhruba následujícím obsahem:

-- MySQL dump 10.10
--
-- Host: localhost    Database: test
-- ------------------------------------------------------

<zkráceno>

--
-- Table structure for table `lidi`
--

DROP TABLE IF EXISTS `lidi`;
CREATE TABLE `lidi` (
  `jmeno` varchar(20) collate utf8_czech_ci default NULL,
  `narozendne` date default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

--
-- Dumping data for table `lidi`
--

LOCK TABLES `lidi` WRITE;
INSERT INTO `lidi` VALUES ('Jarda','1970-01-01'),('Jana','1975-12-31'),('Petr','1980-10-10');
<zkráceno>
UNLOCK TABLES;

Je tedy vytvořena jak definice tabulky, tak i data. Příkaz mysqldump má poměrně hodně přepínačů, s nimiž bude dobré se seznámit, pokud to myslíte s tímto příkazem vážně a dá se použít i na jiné typy tabulek než MyISAM. Osobně ho mám docela rád, protože produkuje výstup, který je člověku čitelný, textový a který se dá rozumně zkomprimovat. Lze se také zmínit o tom, že vygenerované příkazy se mohou náramně hodit při exportu struktury a dat na jiný typ DBMS.

Skript mysqlhotcopy

Ten mám rád ze všech nejméně. Nejdřív ale, co to dělá. Funguje v podstatě tak jako BACKUP TABLE s tím rozdílem, že může zálohovat více tabulek nebo i více databází. Rovněž se v dokumentaci praví že je rychlejší než BACKUP TABLE a není označen jako zastaralý.

Teď něco nevýhod:

Neříkám, že mysqlhotcopy nemáte používat nebo že to nebude fungovat, ale raději bych zálohování svěřil odzkoušenému binárnímu programu než skriptu (je to věc názoru, nekamenujte mě v diskuzi).

Závěr

Zdaleka jsme nevyčerpali všechny možnosti zálohování. V praxi bude zvolená strategie nejspíš nějakou kombinací uvedených způsobů. Přitom, když se budete rozhodovat co a jak zálohovat, Vám mohou pomoci následující otázky:

Jak vidíte, je toho dost. Cílem bylo seznámit Vás s nejběžnějšími technikami zálohování s tím, že svoji cestu si musí najít každý sám.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=1081