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 34821×
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í.
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.
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.
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).
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.