Autor Zpráva
nadsenec
Profil *
Ahoj,

chtěl bych si pravidelně zálohovat WordPress databázi, ale nechci k tomu využívat žádný 3rd party plugin. Chci, aby to dělalo prostě jen to co chci tj. zálohovalo pravidelně a ukládalo na server.

Moje představa je taková, že bych chtěl použít PHP script, který by fungoval jako CRON a pravidelně se tak pouštěl v mnou určenou dobu. Ve skriptu by pak byl jen mysqldump příkaz, nic víc, nic míň.

Máte někdo návrh na nějaké řešení z praxe nebo by jste případně zvolili úplně jiný postup?

Díky.
Keeehi
Profil
Řešení z praxe bych měl avšak záleží na tom, zda máš vlastní server nebo jen hosting.
nadsenec
Profil *
Keeehi: Hosting.
Keeehi
Profil
Dříve jsem na to používal nějaký script. Původ si nepamatuji. Tak jsem teď pogooglil a použil bych toto. Existuje toho však spousta. Moje klíčové spojení bylo "MySQL dump php".
nadsenec
Profil *
Keeehi: Děkuju. Snažím se tomu porozumět, ale tohle je pro mě už opravdu vyšší dívčí. :-) Zkusím si asi udělat zálohu přeš phpMyAdmin a porovnám s tím, co mi vytvoří tebou doporučovaný skript.

Jinak podle toho, co jsem se snažil nastudovat, by mělo stačit toto...
exec('mysqldump DB_NAME --user=... --password=...  > /path/to/output/file.sql');
...čerpám odsud.

Já bych tam jen přidal DROP TABLE a nějakou kompresi, takže by to potom vypadalo takto...
exec('mysqldump DB_NAME --add-drop-table --user=... --password=... | gzip > /path/to/output/file.sql.gz');
...co myslíš?
Jan Tvrdík
Profil
Použil bych github.com/Clevis/DatabaseBackup
nadsenec
Profil *
Jan Tvrdík: Jestli to chápu správně, tak toto je vylepšená verze předchozího řešení Davida Grudla? Opět (ještě o něco vyšší :-) ) vyšší dívčí, ale pokusím se do toho proniknout. Díky.
nadsenec
Profil *
Hehe, hostuji u WEDOSu a protože mi Vámi navrhovná řešení nefungovala, hledal jsem proč a zjistil, že...

1) Přístup k MySQL je povolen pouze z WEDOS serverů, takže mysqldump z jiného stroje nepřipadá v úvahu.
2) CRON má u WEDOS povoleno jen spuštění PHP skriptů, ty mají ale exec zakázáno, takže tudy cesta k mysqldump také nevede.

Což podle mně znamená, že jsem asi v dupě, co... :-(
Kajman
Profil
Některé hostingy umožňují povolit přístup do mysql i z jiné IP (zadané v administraci nebo požádané u supportu). Pak je možné pouštět zálohu i z jiného desktopu nebo serveru.
Jan Tvrdík
Profil
nadsenec:
protože mi Vámi navrhovná řešení nefungovala
To nechápu, volat mysqldump přes exec ti tady přece nikdo nenavrhoval, to jsi napsal sám. Navržená řešení jsou by měla bez problémů fungovat.
Keeehi
Profil
Ta námi navrhovaná řešení totiž dělají to samé jako program mysqldump jen si vystačí samy s PHP. Nemají žádné závislosti na externích programech. Proto fungují i na obyčejném hostingu.
nadsenec
Profil *
Keeehi: Aha, tak v tom případě dělám něco špatně já a myslím, že to asi bude instalace toho řešení od Jana Tvrdíka na mém webu. S GitHubem nemám žádné zkušenosti. Co musím udělat proto, abych to na webu (hostingu) rozběhal? Přečetl jsem si, že bych měl použít Composer, ale to je pro mně opět slepá ulička. Díky.


Jan Tvrdík: Jak jsem psal - tomu tvému řešení vůbec nerozumím, předpokládal jsem, že taky využívá mysqldump. Proto je chyba někde určitě někde na mé straně a to při jeho použití, viz odpověď výše keehimu. Prosím o nakopnutí správným směrem. Díky.


Kajman: Myslím, že WEDOS to právě neumožňuje. Zkusím ale položit dotaz na jejich support.
Jan Tvrdík
Profil
nadsenec:
Přečetl jsem si, že bych měl použít Composer, ale to je pro mně opět slepá ulička.
Tak se s ním nauč pracovat. Má docela dobrou oficiální dokumentaci (v angličtině), něco málo česky je o něm i v Nette dokumentaci.
nadsenec
Profil *
Jan Tvrdík: Protože jsem takovou odpověď čekal, už jsem s tím začal. :-) Určitě ale budu rád, když mi nějakou dobrou radou nebo odkazem pomůžeš (s angličtinou problém nemám).
Keeehi
Profil
nadsenec:
- Založíš si novou složku s projektem.
- Vlezeš do ní a zavoláš php composer.phar install clevis/database-backup
- Vytvoříš složku backups. Tam se pak budou objevovat soubory se zálohami.
- Vytvoříš si v ní nový soubor index.php a v něm bude:
<?php
require 'vendor/autoload.php';

$mysqli = new mysqli('adresa_mysql_serveru(nejspíše localhost)', 'jmeno_uzivatele_mysql', 'heslo_uzivatele_mysql', 'jmeno_databaze_k_zalohovani');
$dumper = new MySQLDump($mysqli);

$backup = new Clevis\DatabaseBackup\DatabaseBackup($dumper, __DIR__ . '/backups', PHP_INT_MAX);
$backup->backupDatabase();

echo "Done";
- Teď to celé vezmeš a nahraješ na server.
- Když teď zavoláš www.example.com/cesta/k/nami/vytvorenemu/souboru/index.php, tak se ti měla zobrazit bílá stránka s textem Done a ve složce backups bys měl mít svoji požadovanou zálohu.

Nepovinné ale doporučené:
- Po ověření funkčnosti zakázat přístup z internetu a spouštět to pomocí cronu. zakázání přístupu by mělo jít přidáním souboru .htaccess do stejné složky jako náš index.php. Obsah souboru .htaccess:
Deny from all 
A proč to? Přece nechceš, aby ti kdokoli mohl spouštět zálohy. Co je však důležitější, nechceš aby se někdo mohl dostat k souborům se zálohou. To bys mohl rovnou rozdávat přihlašovací údaje k databázi.
nadsenec
Profil *
Keeehi: Nainstaloval jsem Composer (včetně PHP), nainstaloval jsem jej dle dokumentace pro Windows. Při volání php composer.phar install clevis/database-backup mi to házelo chybu "... Use composer require clevis/database-backup instead to your composer.json", tak jsem to udělal - composer require clevis/database-backup. Proběhlo stahování a instalace.

Pak jsem si vytvořil index.php s tvým kódem a celý adresář nakopíroval na web a pustil. Háže mi to ale "Fatal error: require(): Failed opening required 'vendor/autoload.php'", takže tam mám asi chybu v cestě hned v tom prvním řádku...
require 'vendor/autoload.php';
...je to tak?
Keeehi
Profil
Ano. Nebo v právech.
nadsenec
Profil *
Keeehi: Ahoj, po delším čase jsem zpět (dovolená) a snažím se to rozchodit. Tu cestu jsem vyřešil takto...

$path = $_SERVER['DOCUMENT_ROOT'];
$path .= "/cesta/k/autoload.php";
require $path

...ale při spouštění skriptu mi to hodilo chybu...

Warning: gzopen(/data/web/virtuals/49025/virtual/www/composer/backups/backups/2015-07-27-12-39-01.sql.gz): failed to open stream: No such file or directory in /data/web/virtuals/49025/virtual/www/composer/vendor/clevis/mysql-dump/src/MySQLDump.php on line 100

Fatal error: Uncaught exception 'Exception' with message 'ERROR: Cannot write file '/data/web/virtuals/49025/virtual/www/composer/backups/backups/2015-07-27-12-39-01.sql.gz'.' in /data/web/virtuals/49025/virtual/www/composer/vendor/clevis/mysql-dump/src/MySQLDump.php:102 Stack trace: #0 /data/web/virtuals/49025/virtual/www/composer/vendor/clevis/database-backup/src/DatabaseBackup.php(97): MySQLDump->save('/data/web/virtu...') #1 /data/web/virtuals/49025/virtual/www/composer/backups/index.php(15): Clevis\DatabaseBackup\DatabaseBackup->backupDatabase() #2 {main} thrown in /data/web/virtuals/49025/virtual/www/composer/vendor/clevis/mysql-dump/src/MySQLDump.php on line 102

...což asi znamená, že skript nemůže zálohu zapsat, je to tak? Netušíte někdo proč?

Díky.
juriad_
Profil *
Zkontroluj, ze ti existuje adresar /data/web/virtuals/49025/virtual/www/composer/backups/backups/. Podezrele vypada ten backup uvnitr backup. Nebo ho nejak zmen na existujici.
nadsenec
Profil *
juriad: No jasně! Musím se naučit ty chybové hlášky pořádně číst. Pomohlo, perfektní, děkuji!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: