Obnova MySQL z InnoDB a MyISAM souborů

Databáze, Windows, Linux

Co když jediné co vám z MySQL serveru zbylo, jsou soubory, které se vám nesmazaly, nebo se je povedlo obnovit zpět? Ukážeme si, jak získat data a tabulky zpět pro engine MyISAM i InnoDB.

Obnova MySQL z InnoDB a MyISAM souborů

Minulý týden se mi po spolehlivém návodu na internetu sesypal systém. Využil jsem částečnou obnovu Windows 8, která odstraní všechny programy, ale zanechá data. Zálohu DB jsem neměl. Našel jsem ale v instalační složce MySQL všechny databáze a data. Překopírovat je bohužel nestačí.

Vytvoření databází

Prvně nainstalujeme nový MySQL server. Pomocí SQL příkazů vytvoříme databáze, které budete chtít obnovit. Ty poznáte podle názvů složek v adresáři data, v instalační složce mysql. Pro Windows je často v C:\xampp\mysql\data\.

Nyní je nutné MySQL server vypnout, jinak se vám nepodaří následující soubory přepsat. Do nových složek nakopírujte vše z původních dat. Poté musíte také přepsat soubory ib_logfile0, ib_logfile1 a ibdata1, které jsou přímo ve složce data.

Máme například databázi blog a v ní tabulku articles uloženou pomocí MyISAM a comments pomocí InnoDB. Soubory, které musíte zkopírovat:

ib_logfile0
ib_logfile1
ibdata1
blog/articles.frm
blog/articles.MYD
blog/articles.MYI
blog/comments.frm
blog/comments.ibd

Po přepsání souborů MySQL server zase zapněte.

Úložiště MyISAM

Pro MyISAM není potřeba žádné další kroky. Stačí nakopírovat .frm, .MYD a .MYI soubory a nyní budete k daným tabulkám mít plný přístup.

Úložiště InnoDB

Horší to je ale s tabulkami, uloženými pomocí enginu InnoDB. Tabulky sice uvidíme, ale nebudeme schopní je přečíst. Je potřeba zapnout recovery mód pomocí příkazového řádku.

Pro lehčí práci se pomocí příkazu cd přesuneme do složky MySQL. Pro Windows nejspíše C:\xampp\mysql\bin a pro Linux /usr/sbin/.

# Linux
cd /usr/sbin

# Windows
C:
cd \xampp\mysql\bin

Spustíme nyní program mysqld.exe pro Windows a mysqld pro Linux, se dvěma parametry. První je velikost ib_logfile0 v bajtech, která je nejčastěji 5242880, a druhý úroveň obnovy.

# Linux
mysqld -innodb_log_file_size=5242880 -innodb_force_recovery=6

# Windows
mysqld.exe -innodb_log_file_size=5242880 -innodb_force_recovery=6

Pokud máte nainstalovaný nějaký nástroj pro práci s MySQL, jako Adminer, nyní byste měli otevřít také tabulky s InnoDB enginem.

Záloha pomocí příkazové řádky

Pokud žádný nástroj nemáte, můžete udělat zálohu pomocí MySQL dump. Pro Windows je nezbytnost zůstat stále ve složce s binárkami MySQL jak jsme popsali výše.

root za přepínačem –u je název uživatele. Přepínač –p použijte, pokud máte pro uživatele heslo a databaze je název databáze kterou chcete zálohovat. databaze.sql je název souboru pro uložení souboru. Někdy může být lepší zadat cestu do jiné složky, než kde jsou binárky MySQL.

# Linux
mysqldump -u root -p databaze > databaze.sql

# Windows
mysqldump -u root -p databaze > databaze.sql

Přeinstalování MySQL serveru

Nyní bych doporučil MySQL server přeinstalovat, protože hodně souborů jsme nahradili serveru pod rukama. Minimálně by bylo dobré nastavit innodb_force_recovery na 0.

K tomuto článku již není možné přidávat další komentáře