Zálohování databáze v PHP je velmi snadné, tedy pokud použijte utilitu mysqldump.exe, kterou najdete v každé instalaci MySQL. Žádný jiný způsob zálohování v podstatě nemá smysl. Na inetu jsem viděl různé šílenosti, které ve smyčce procházeli databázi a ručně si dělali SQL příkazy, které pak ukládali do souboru, nicméně u větších databází je toto nepoužitelné. Mysqldump je velmi rychlý i u větších databází. A jak vlastně na to?
V našem případě využijeme tedy mysqldump, který zavoláme pomocí příkazu exec a pro který připravíme soubor SQL-OptionFile.cnf, do kterého uložíme citlivé údaje, jenž by se nikde neměly ukazovat/ukládat. A to je vše. Nezapomeňte si v kódu oid článkem upravit cesty k souboru SQL-OptionFile.cnf a mysqldump. Také si nastavte váš název databáze viz. nazevExportovaneDatabaze.
Možností jak skript upravit je hodně. Můžete si výstupní soubor ukládat na serveru => pak smažete řádky s příkazy header a data si uložíte třeba pomocí příkazu file_put_contents(). Nebo si můžete název výstupního souboru doplňovat o datum a čas vytvoření apod. Samotný mysqldump nabízí mnoho možností jak výstup ovlivnit – více o mysqldump.
export-db.php
header("Content-type: text/plain"); header("Content-Disposition: attachment; filename=export.sql"); header("Pragma: no-cache"); header("Expires: 0"); exec('c:\"Program Files\MySQL\MySQL Server 5.7\bin"\mysqldump --defaults-extra-file=E:\intranet\example\SQL-OptionFile.cnf --add-drop-tablenazevExportovaneDatabaze', $result); foreach ($result as $hodnota) { echo $hodnota.PHP_EOL; }
Obsah souboru SQL-OptionFile.cnf.
[client] user="trebaRootZaleziNaVasemNastaveni" password="vaseTajneHeslo123"