Přečtěte si také první díl, aneb záloha pomocí příkazové řádky a cronu.
Stejně jako v minulém díle, bylo v plánu vytvořit skript pro spouštění mysqldump.exe. Po pár hodinách se skripty na Windows jsem to ale vzdal, a podíval se po jiném řešení, a to v PHP. Tento způsob se dá navíc také použít na hostingu, kde většinou nelze provádět operace s Linuxovými příkazy.
Ukládejte zálohy bezpečně na jiný server, ať v případě pádu hostingu nepřijdete i o zálohy. Můžete využít například upload na Google Drive popsané v novějším článku.
Více souborů, více zábavy
Opět jako minule, vytvoříme skript, který umístíme do složky s weby. Ten vyhledá další soubory, které poté spustí. Prohledávání souborové struktury je zde ale trochu osekané, vyhledáváme pouze soubory v přímých podsložkách.
Hlavní PHP soubor
Tento soubor umístíme do kořenové složky, na Windows nejčastěji C:\xampp\htdocs\. Jeho úkol je podívat se po souboru doBackupDB.php ve všech přímých podsložkách. Pokud jej nalezne, tak jej spustíme pomocí include. Ten probíhá ve funkci, aby se případné proměnné navzájem neovlivňovaly.
<?php include "Mysqldump.php"; function runIt($file){ include $file; } $dirPath = dirname(__FILE__); $dir = opendir($dirPath); for( $i=0; false !== ($fileName = readdir($dir)); $i++){ if (in_array($fileName, array(".", ".."))) { continue; } $file = $dirPath."/".$fileName; if(is_dir($file) && file_exists($file."/doBackupDB.php")){ runIt($file."/doBackupDB.php"); } }
Zálohovací skript
Obdobně jako minule, připravíme si složku sqldumps, do které budeme ukládat jednotlivé zálohy. Následující soubor uložíme s názvem doBackupDB.php a případně upravíme přihlašování do DB. Soubor vytvoří zálohu, a pokud máme více jak 20 souborů mladších 30 dnů, všechny soubory starší smaže.
Pro samotné vytvoření zálohy budete ještě potřebovat knihovnu Mysqldump. Její výstup i nastavení je velmi podobné utilitě mysqldump, takže případný přechod vám to značně usnadní.
<?php try{ $backupDir = dirname(__FILE__)."/sqldumps"; $dump = new Ifsnop\Mysqldump\Mysqldump("mysql:host=localhost;dbname=blog", "root", "root"); $file = $backupDir."/".date("Y-m-d H-i-s").".sql"; $dump->start($file); $files = glob($backupDir."/*.sql"); $olderThan = time() - 60 * 60 * 24 * 30; // 30 dni $newer = 0; $toDelete = array(); foreach ($files as $oldDump) { if (is_file($oldDump)) { if (filectime($oldDump) <= $olderThan) { $toDelete[] = $oldDump; }else{ $newer++; } } } if ($newer > 20){ foreach($toDelete as $file){ @unlink($file); } } }catch(Exception $e){ echo $e; }
Plánovač pod Windows
Abychom skript mohli spouštět pravidelně i na Windows, je potřeba vytvořit úlohu v plánovači. Pokud ale spustíme přímo PHP soubor, vyskočí nám okno, které se zavře, až po dokončení úlohy viz screen. Abychom tomuto zabránili, vytvoříme si následující skript, který uložíme s příponou *.vbs.
Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run "%comspec% /c C:\xampp\php\php.exe C:\xampp\htdocs\dbbackup.php",0 Set WshShell = Nothing
Plánovač nastavíme stejně jako v článku o synchronizaci Dropboxu. Proto jej nebudu popisovat znova, jen vás odkážu.
Máte tipy na vylepšení? Podělte se v komentářích. Obrázky v cover jsou převzaty z Freepik
K tomuto článku již není možné přidávat další komentáře