Autor Zpráva
tomaSSek
Profil *
Dobrý den,

rád bych se s Vámi poradil, zda popřípadě jak udělat export tabulky z databáze do souboru a následné uložení tohoto souboru na serveru.
Jde mi prakticky o zálohování tabulky např. produkty - kdybych chtěl udělat zálohu této tabulky tak abych nemusel do phpmyadmina a exporotvat tabulku ručně, ale abych pouze v adminisračním rozhraní klikl na možnost zálohovat tabulku a ta by se vyexportovala z databáze s příponou .sql ( tak jako prakticky export z databáze přes admina ) a uložila na serveru ve složce.

Jde mi o to, že nevím jak tento script napsat tak, aby tu tabulku vygeneroval tak jako již zmiňovaný phpmyadmin a následně znemožnit celkový přístup k souboru z venčí ( např. script vygeneruje soubor produkty_23_7_2013.sql a uloží jej do souboru backup/tmp/nazevsouboru.sql , a já jej přes ftp dostal ale nikdo kdo by např. zadal www.domena.cz/backup/tmp/nazevsouboru.sql se k němu nedostal ( chybová hláška ).

Mnohokrát děkuji za vaše rady.

T.
Meris
Profil *
ahoj
prvně bych si zkusil najít hosting, který automaticky exportuje databáze, a ty pak stahoval přes cron, nebo nějak jinak. Psát si vlastní aplikaci má tu nevýhodu, že ji při změně databáze musíš upravit a pak máš na jiných projektech jinou strukturu, celkově se to špatně udržuje.

Pokud to není možné a potřebuješ export v administraci, pak si myslím, že je dobré tu udělat jako php skript, kterému v header nastavíš že nevrací html ale sql soubor.
header("Content-type: application/octet-stream"); 
        header("Content-Disposition: attachment; filename=export.sql"); 
        header("Pragma: no-cache"); 
        header("Expires: 0"); 
        
        // select * from
        // foreach $row
        // echo insert values
        
výhoda tohoto řešení, je že na začátku skriptu máš standartní zabezpečení pro administraci
tomaSSek
Profil *
ahoj,
já právě na insternetu našel následující script který by měl fungovat, ale nefunguje...

$tableName = 'produkty';
    $backup_file  = "tmp/produkty.sql";
    $sql = "LOAD DATA INFILE '$backup_file' INTO TABLE $tableName";
    $res = mysql_query($sql) or die(mysql_error());
    
    if($res){
        
        echo "Data úspěšně uloženy.";
    } else {echo "Něco se pokazilo....";}

mysql_error vyhazuje chybu Access denied for user 'prihlaseni_uzivatele'@'%' (using password: YES) - přitom v ostatních scriptech mi vlastně spojení s databázi funguje naprosto bez problému.

Ps. Script bych si samozřejmě upravil dle svých potřeb ale chtěl jsem jej použít jako korpus...
PostCC
Profil
Nejsem si jistý, jestli to má souviset s předchozím dotazem, v každém případě v tom scriptu z 15:24:40 děláte pravý opak, tedy nikoli backup tabulky/databáze do souboru, nýbrž import dat z textového souboru.
tomaSSek
Profil *
[#4] PostCC Omlouvám se, nevšiml jsem si hodil jsem špatný kód. Ten správný obsahuje místo LOAD DATA...
$sql = "SELECT * INTO OUTFILE '$backup_file' FROM $tableName";. Bohužel stále se potýkám s chybovou hláškou popsanou v [#3]
Meris
Profil *
jestli jsi na linuxu, tak by jsi měl používat absolutní cestu do místa kam ukládata ten soubor ( a mít tam právo zápisu ).
Pokud to nepomůže, může být probléem ve verzi mysql, viz mysql bug
tomaSSek
Profil *
[#6] Meris
jedná se o hosting u savany, CHMOD mám nastavený na 777 ...
engien
Profil *
Na databázi nemáte právo spustit příkaz LOAD DATA INFILE, což je nutnost na slušně zabezpečeném hostingu. Asi je to dobrej oddíl, ta Savana...
Meris
Profil *
[#7] tomaSSek
ale zadaváš ale relativní cestu, nikoli absolutní. MySQL bere ve vychozim nastaveni cestu ze sveho adresare, tam nebudou nastavená práva.
Nebo není povolená operace pro databázového uživatele, to je druhá možnost.
tomaSSek
Profil *
[#9] Meris
I při zadání absolutní cesty k souboru se stále potýkám se stejnou chybovou hláškou....
[#8] engien
zkusím kontaktovat savanu a zjistit možnosti nastavení, moc jsem nepochopil, zda je to reálné nebo ne...

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: