Záloha MySQL databáze 2. díl

PHP, Databáze, Windows

Pokračování z minulého týdne, aneb jak pravidelně zálohovat MySQL databázi na Windows a hostingu, kde máme omezené možnosti.

Záloha MySQL databáze 2. díl

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

Okno se zavře až po skončení skriptu

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