dg MySQL-dump – kompletní záloha DB

Alsatian
Člen | 163
+
0
-

Ahoj. Rád bych ve své Nette aplikaci vytvořil možnost zálohy, obnovy, stažení a import kompletní databáze, kterou aplikace používá (trochu jsem to teď zjednodušil).

Vše mám připravené a našel jsem skvěle vypadající komponentu, kterou ale nevím, jak použít :)
https://github.com/dg/MySQL-dump

Instalaci jsem provedl pomocí composeru.
Databází používám Nette Database.

Na webu je příklad s implementací, který mi ale nefunguje (chápu, že mysqli tam asi být nemá):

$mysqli = new mysqli('localhost', 'root', 'password', 'database');
$dumper = new MySQLDump($mysqli);

Může mi, prosím, někdo poradit, jak mám komponentu použít a je správné, že jsem ji nainstaloval pomocí composeru a nebo jsem ji měl vložit do Nette projektu jinak?

Moc děkuji.

Editoval Alsatian (7. 11. 2018 22:51)

Mysteria
Člen | 797
+
0
-

Nefunguje znamená co? Píše to nějakou chybu?
Jinak v tom příkladu je ještě část se samotným exportem do souboru, nezapomněl jsi tam jenom přidat to $dumper->save('export.sql.gz');?

Alsatian
Člen | 163
+
0
-

Chyběla zpětná lomítka (MySQLDump a mysqli)…
Už to generuje a snad přijdu na to, jak výstup nekomprimovat atd. Díky moc!

$dump = new \MySQLDump(new \mysqli('localhost', 'user', '***', 'dbname'));
skromny
Člen | 5
+
+4
-

co sa komprimovania tyka – podla (MySQL-dump/src/MySQLDump.php – r.54)

$handle = strcasecmp(substr($file, -3), '.gz') ? fopen($file, 'wb') : gzopen($file, 'wb');

mi to pride ze ak volas $dump->save s nazvom suboru s koncovkou .gz tak to komprimuje, inak nie…

Alsatian
Člen | 163
+
0
-

@skromny je to jak píšeš. Díky lidé za úžasné komponenty.
Nebylo mi jasné, jak to nasadit. Ještě jsem se nedostal k obnovení dat z provedené zálohy. Ale určitě to půjde samo ;)

Webster.K
Člen | 192
+
0
-

Přidám se k tomuto staršímu příspěvku, protože jde o stejnou komponentu a když to někdo bude pročítat, třeba mu to pomůže, i když je to už 5 let. Dobrá zpráva je, že komponenta pořád skvěle funguje i s aktuální verzí Nette, tedy autorovy velké díky.

Co řeším je ukládání. Ukládání databáze standardně probíhá do /bin/ složky, případně když použiji:

$dump->save('exports/export.sql');

Tak se ukládá do složky /bin/exports. Jde nějak udělat, aby se export vůbec neukládal na server, ale rovnou odeslal třeba někam emailem? Ideální stav by za mě byl to nahrát někam na vzdálený server případně to mít někde úplně mimo server, ze kterého ta záloha je.

To o co mi jde jsou cca 5ti minutové zálohy (mám to jako CLI apku co přes autoloading tříd přes Composer se načítá). Ale nechci z bezpečnostních důvodu mít ty zálohy na serveru s apkou. Napadá někoho něco?

Další co by mě zajímalo, zda existuje způsob, jak vytvořit připojení k databázi jinak, než:

$db = new \mysqli('localhost', 'root', 'root', 'databaze');
$dump = new \MySQLDump($db);

Třeba ideálně když používám autoloading tříd přes Composer to do této komponenty načíst z konfiguračního souboru. Věřím že to určitě jde, ale nějak si nevím rady co dál s:

$container = \App\Bootstrap::boot()->createContainer();

$db = $container->getByType(\Nette\Database\Connection::class);

protože tohle fakt nefunguje

Editoval Webster.K (1. 7. 2023 18:43)