Záloha databáze MySQL pomocí PHP
Máte-li levnější variantu hostingu, obvykle nemáme k dispozici dostatečně aktuální zálohu vlastní databáze na webovém serveru. Existuje sice možnost si zálohu vytvořit pomocí phpMyAdmin, avšak je to zdlouhavé, není možné vše zajistit automaticky a už vůbec se to nehodí pro velké databáze.
Jednou z možností je využít nástroje, který je standardně dostupný na každém stroji s MySQL – mysqldump.
Pokud je tento nástroj dostupný i pro interpret PHP, můžete ho pomocí funkce exec
spustit a jeho výstup (výpis databáze) si nechat uložit do souboru. Tento soubor budete mít pak dostupný ve složce svého webhostingu a kdykoli si jej můžete pomocí ftp stáhnout. Ukáži také, jak zautomatizovat jednak generování souboru se zálohou databáze, jednak stahování těchto souborů pomocí ftp.
Nejprve je třeba zjistit, kde na serveru leží nástroj mysqldump . Do nějakého skriptu zadejte povel:
|
Tímto dostanete cestu k nástroji mysqldump – obvykle to bude něco jako /usr/bin/mysqldump. Tímto zároveň ověříte, že je nástroj dostupný a funkce exec
není na serveru zakázaná. Pokud jste jako odpověď nedostali chybové hlášení, cestu si poznamenejte a rovnou nechejte zobrazit cestu ke skriptu:
|
Jako odpověď dostanete něco jako /data/web/virtuals/nasserver/www/./test.php. Tuto cestu potom použijete v parametrech příkazu mysqldump pro určení, do které složky na serveru se má soubor s výpisem databáze uložit.
Na základě těchto informací už můžete napsat skript, který zazálohuje databázi do zadané složky. Není dobré zálohovat databázi stále do téhož souboru nebo tak, aby se vytvářely stále nové a nové soubory. V mém příkladu jsem hodiny dne rozdělil na 4 období (dopoledne, odpoledne, večer, ráno), a podle období, ve kterém je skript spuštěn, se vygeneruje soubor daného jména. Pokud již soubor existuje, přepíše se novým obsahem.
Aby vám nemohl kdokoli se zálohou databáze "cvičit" a náhodně spouštět zálohování (skript pro zálohování bude přístupný na webu), uložte ho do zvláštní složky a doplňte jednoduchou ochranu heslem. Pojmenovat ho můžete libovolně, pokud budete takových záloh provádět více, jinak stačí i jen jako index.php:
|
Ve výše uvedeném skriptu se i při opakovaném spuštění během dne zajistí tvorba 4 záložních souborů databáze do složky backup. Červeně vyznačené je nutné nastavit podle údajů o serveru a databázi. Na serveru pak vytvoříte složku backup a do ní nahrajete prázdné soubory early.sql, morning.sql, afternoon.sql a evening.sql. To proto, abyste mohli snadno nastavit těmto souborům práva pro zápis a skript do nich mohl zapisovat a přepisovat je.
Jakmile máte složku backup a v ní 4 prázdné soubory, nastavíte práva zápisu do složky a do všech 4 souborů. Zcela jednoduchým způsobem pro toto nastavení lze použít třeba Windows Commander, jak je popsáno v článku o knize návštěv.
Po této úpravě zkuste zadat do prohlížeče adresu skriptu včetně jména a hesla HTTP autentifikace a ověřte jeho funkci. Odkaz musí být v tomto tvaru:
|
Výsledkem by měl být například takovýto text v prohlížeči, který je vlastně jen opisem data posledního zápisu do souboru evening.sql.
Právě provedený pokus o zálohu:
– evening.sql 17.04.02 19:52
Pokud se objeví chybové hlášení, je třeba z něj usoudit původ chyby. Je možné, že mysqldump nemůže zapisovat do vaší složky a nemáte správně nastavená práva, cesta, kterou jste uvedli ve skriptu, není správná ad. Může se stát, že dojde k chybě při práci s databází, pak se žádná chyba nevypíše, protože chybová zpráva bude uložena v souboru zálohy, kam se vlastně přesměrovávají odpovědi zálohovacího programu.
Když už máte funkci skriptu ověřenou (zejména je nutno ověřit, zda vygenerované sql soubory skutečně obsahují správná data z databáze), nastavíte opakované spouštění zálohovacího skriptu. Ideální vzhledem ke generovaným souborům jsou časy 02.00, 08.00, 14.00 a 20.00.
Pro automatické zálohování databáze si zajistěte u poskytovatele webhostingu načasované spouštění našeho skriptu (obvykle pomocí cron na serverech Linux) anebo si přidejte do svého plánovače úloh otevření okna prohlížeče s parametrem cesty k zálohovacímu skriptu. Pokud nemáte možnost nechat nastavit správcem serveru opakované spouštění a máte pevné připojení k internetu, postačí i jen přidat do plánovače úloh ve Windows řádek (skript se tak bude spouštět přímo z počítače přes prohlížeč):
|
Nakonec ještě zajistěte pravidelné automatické stahování zálohy přes FTP. Vytvořte si dávkový soubor transfer.bat:
|
Jenom doplňuji, že pokud se připojujete k internetu telefonicky, lze do dávky před příkaz ftp.exe přidat povel k vytočení telefonického připojení. Pro Windows9/Me to bude start.exe /w spojeni.dun, přičemž soubor spojeni.dun získáte tak, že vytvoříte telefonické připojení a myší ho přetáhněte třeba na Plochu. Tak se vytvoří exportovaný soubor .dun, který si pak přesunete do složky, kde máte i dávku transfer.bat. Jelikož nelze zadat povel pro zavěšení, je nutné nastavit u tohoto připojení automatické zavěšení při nečinnosti asi po 3 minutách. Ve WindowsNT/2K/XP použijte povel rasdial spojeni před příkazem ftp.exe a za něj ještě přidejte povel pro zavěšení spojení rasdial spojeni /disconnect.
Vytvořte dávkové soubory morning.cmd, afternoon.cmd, evening.cmd a early.cmd nebo třeba all.cmd (pro stažení všech najednou).
příklad morning.cmd:
|
Do plánovače úloh si pak přidejte zástupce dávky transfer.bat s parametrem jména souboru, který má stáhnout. Já osobně nechávám stahovat jednou denně v době, kdy nepracuji na počítači, všechny zálohy databáze:
|
Varianty časového rozvržení zálohování mohou být různé – není problém upravit skript tak, aby vytvořil například každé pondělí týdenní zálohu databáze. Důležité je si také vyzkoušet, jak naopak z této zálohy databázi obnovit. Lze to pomocí nástroje mysql nebo i pomocí phpMyAdmin. V případě, kdy je databáze opravdu velká, phpMyAdmin vám obrovský soubor zálohy nespolkne. Pokud nelze jinak, je nutno rozdělit nějakým textovým editorem záložní soubor na více částí tak do 2MB velikosti. Lépe je ale požádat helpdesk webhostera, aby vám zálohu databáze naimportoval. Potřebné soubory a skripty si můžete stáhnout.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Užitečné nástroje pro bezpečnost na internetu
17. října 2024 -
Landing page: Jak vytvořit landing page s vysokým CTR
7. května 2024 -
Windows App: Pracujte odkudkoliv, kdykoliv
3. listopadu 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
Michal
Dub 23, 2012 v 19:03Ahojte…mám taký problém…do DB sa pripojím cez externý súbor:
Potom sa snažím cez hore uvedený kód vytvoriť zálohu:
$bkname.sql“);
echo „Práve sa vykonala záloha.Meno: $bkname.sqlDátum a čas: „.date(„d.m.Y, H:i“);
?>
Keď program prebehne, spraví výpis a vytvorí súbor, ktorý je prázdny…žiadna chyba, iba prázdny súbor. Databázu mám na Localhoste pomocou XAMPP. Čo s tým? Ďakujem.