MySQL záloha ze vzdáleného serveru na lokální počítač automaticky

Počet spravovaných webů pomalu roste a pomalu není čas vše vkládat do referencí, měl bych doplnit alespoň instalované e-shopy (ano, stále v Zencart, Magento je složitý na low cost řešení). A protože v podstatě všechny weby, které jsem vyrobil používají MySQL databázi a různí útočníci z Brazílie nebo Číny se snaží weby nabourat, vyvstala otázka efektivního automatického zálohování databází. Zálohování obsahu webu, tedy převážně PHP skriptů lze jednoduše řešit pomocí programu wget, který je také ve verzi pro Windows (pracuji s Windows, jako produkční prostředí se jeví efektivnější než Linux) a umí dělat zrcadlo obsahu na FTP serveru, tedy kopíruje pouze změny. Jak zálohovat webové stránky z FTP serveru pomocí programu wget zkusím někdy uvést v jiném příspěvku.

Ale jak zálohovat databázi? Velká většina hostingů nepovolí přístup na svůj databázový server z jiného než lokálního počítače (což je ten vzdálený server, na kterém běží MySQL), můžeme tedy na vzdálený server uložit phpMyAdmin nebo Adminer, pomocí těchto aplikací se připojit do databáze a stáhnout obsah databáze ručně. Ale když je webů více než deset, začíná to být časově neefektivní. Google mi nepomohl najít software, který by uměl automaticky dle nastaveného časového plánu provést zálohu databáze ze serveru v internetu.

Možné řešení

Protože hostingy zakazují přístup na MySQL servery z jiných počítačů, musíme do databáze přistupovat ze serveru. Musíme tedy vyrobit PHP skript, který uložíme na každý server, ze kterého chceme provádět zálohu. Chceme ale zálohu dostat do svého PC nebo NAS. Proto musíme také vyrobit malý program, který se bude spouštět na našem PC bude a komunikovat s výše uvedeným PHP skriptem na serveru. Tento princip jsem okoukal z programu EMS MySQL Manager, ke kterému výrobce dodává také soubor emsproxy.php, který se umístí na server a MySQL Manager s ním potom komunikuje.

Vyrobil jsem tedy PHP skript vmproxy.php, který obsahuje funkce pro připojení do databáze a funkce pro export struktur a obsahu databázových tabulek. A potom krátký program v .NET Visual Basic, který komunikuje se skriptem vmproxy.php. Zálohu databáze potom stáhneme spuštěním lokálního programu např. takto:

mysqldump http://www.hosting-server.com/vmproxy.php localhost mojedatabaze heslo uzivatel c:\zalohy\db

Program je možné spouštět pomocí Plánovače úloh nebo cron, soubory ze zálohou mají v názvu časové razítko.  Toto řešení je velmi funkční, ale také velmi jednoduché, může obsahovat chyby aplikační i bezpečnostní, i když přihlašovací údaje do databáze se posílají jen jednou, potom jsou v session na serveru.

Neuvažuji spouštění zálohovacího skriptu pomocí cron na vzdáleném serveru, což sice někde možné je, ale dopravit zálohu do našeho PC nebo NAS může být složitější.

Alternativní lepší řešení?

Pokud by někdo věděl o lepším řešení pro zde popsaný účel, prosím komentujte. Možná jsem jen nedostatečně hledal. Pokud se nic rozumného nenajde, potom by mohla nastat možnost doladit mysqldump + vmproxy.php do podoby, která umožní distribuci tohoto řešení pro zájemce s podobnými potřebami.

Jeden komentář to “MySQL záloha ze vzdáleného serveru na lokální počítač automaticky”

  1. Řešení je to asi docela šikovné, ale je to jako se drbat levou rukou na na pravém uchu… Když je prostě webů více, chce to už svůj server (VPS), nejen z důvodu zálohy MySQL, ale celkově v té volnosti konfigurace.

    Na VPS je tohle potom brnkačka 🙂