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