MySQL database repair, jak opravit poškozenou databázi nebo špatně uzavřené tabulky, jak synchronizujete databáze?

Jestli už Vám někdy spadl server, vypli proud nebo máte z nějakého důvodu poškozené information_schema, mohl by Vám pomoci příkaz mysqlcheck.exe. Nevyřeší to všechny problémy, ale na běžné operace by mohl stačit. Nutností je ovšem přístup k serveru.


Mysqlcheck

Není potřeba dlouze představovat, detailní popis najdete přímo v dokumentaci mysqlcheck.

Poškozené informační schéma, poškozené tabulky, nebo špatně uzavřené tabulky důsledkem výpadku serveru nejsou až tak unikátní věc. Opravíte je tímto příkazem:

  1. mysqlcheck [options] db_name [tables]
  2. mysqlcheck [options] --databases db_name1 [db_name2 db_name3...]
  3. mysqlcheck [options] --all-databases

Samozřejmě se jedná o řádkový příkaz, nejdete ho v instalačním adresáři mysql, např. /mysql/bin/. Pro použití s uživatelem a heslem použijete tento příkaz:

  1. mysqlcheck -u root -p --auto-repair --all-databases

Nastavení je více, můžete například všechny tabulky pomocí tohoto příkazu optimalizovat nebo zkontrolovat, zda jsou v pořádku. Více najdete v dokumentaci.

Synchronizace databáze

Stačí, když máte tak geniální nápad a synchronizujete databáze přímo ve filesystému, přehráváním souborů obsahujících tabulky. O to je to horší, když používáte InnoDB, v takovém případě není potřeba, aby něco padalo, a chybu si úspěšně způsobíte sami.

Právě tohle řešení jsem si před nějakou dobou vyzkoušel. Problém je v tom, že data jsou obvykle u InnoDB ukládána jinde a v samotném adresáři s názvem databáze jsou soubory s triggery, .frm soubory atd. Snadno se pak stane, že smažete tabulku z databáze a při tom synchronizování si jeden ten .frm soubor, který patří smazané tabulce, přidáte ze staré lokace do adresáře databáze, kde jste tabulku už smazali, a problém je na světě. Dlouhou dobu to nepoznáte, ale problém se projeví a brzy se ozve. Mysql server si totiž myslí že tam tabulka pořád je, ale nemůže ji najít. V tomto případě nepomůže ani mysqlcheck.

Osobně mám potřebu databáze synchronizovat, protože mám dva vývojové počítače. Jeden notebook, pokud se pohybuji na cestách a jeden desktop. Úspěšně to řeším přenosným harddiskem, na kterém mám nainstalovaný apache, mysql server, všechná vývojová data apod. Na toto řešení si nemůžu stěžovat. Pokud mám narychlo schůzku, jsou data pro notebook okamžitě k použití.

Jiná věc je, když potřebujete synchronizovat změněnou datovou strukturu se serverem a vyvíjenou aplikací. Obvykle nepotřebuji synchronizovat data, ale jen datovou strukturu v tom případě je nedocenitelný např. program EMS DB Comparer for MySQL.

Opět by mohl být problém vzdálený přístup k databázi, což vám asi většina hostingů nepovolí. Pro správu desítek projektů se stejnou datovou strukturou si nedokážu představit jinou možnost. Program zjistí chybějící referenční integritu, typy sloupců, nové sloupce, triggery, prostě porovná obě databáze a vytvoří příslušné mysql dotazy, které potom vykonná.