MySQL backup s PHP?
 
G-force 11. jan 2010 11:18:20 Pridružen od:
31. mar 2008
828 objav
516 60 3
#1

Nikakor mi ne uspe narediti backup mysql baze z uporabo PHP.



Stran testiram na WAMP server, program mysqldump se nahaja v C:\wamp\bin\mysql\mysql5.1.33\bin



Poskusil sem z


$backupFile = DB_NAME . date("Y-m-d-H-i-s")  . '.sql';
$command = "mysqldump -u" . DB_USER . " -p" . DB_PASSWORD . " " . DB_NAME . " > {$backupFile}";
system($command);

in


$backupFile = DB_NAME . date("Y-m-d-H-i-s")  . '.sql';
$command = "C:\wamp\bin\mysql\mysql5.1.33\bin\mysqldump -u" . DB_USER . " -p" . DB_PASSWORD . " " . DB_NAME . " > {$backupFile}";
system($command);

system($command) sem poskusil zamenjati tudi z exec($command) vendar enostavno ne dela. Ko poženem stran mi stran nalaga in se nikoli ne ustavi. Ustvari se samo prazna .sql datoteka.



Če grem preko cmd.exe (run->cmd) najprej v direktori C:\wamp\bin\mysql\mysql5.1.33\bin\ in nato poženem mysqldump -uroot -p imebaze > rezerva.sql mi rezervo baze uspešno ustvari v direktoriju C:\wamp\bin\mysql\mysql5.1.33\bin\



(vrednosti konstant so ok, ker sem $command preveril z echo)



Kje je napaka? Kako bi lahko s PHP&mysldump ustvaril backup?


všeč(0) ni všeč(0) spam(0)
 
Roky 11. jan 2010 11:30:31 Pridružen od:
9. apr 2008
2506 objav
3240 335 107
#2
$data = exec('mysqldump --opt -q -u root -h host -ppassword mojabaza, $databaseOuput);

if (!empty($databaseOuput)) {
// import query per query
mysql_select_db($dbName);

$query = '';
foreach($databaseOuput as $row) {
if (isset($row[strlen($row)-1]) && $row[strlen($row)-1] == ';') {
$query .= "\n".$row;
$result = mysql_query($query);

if (!$result) {
$data = $query ."\n\n".mysql_error();
break;
}

$query = "";
} else {
$row = str_replace(' USING BTREE', '', $row);
$query .= "\n".$row;
}
}
}
všeč(0) ni všeč(0) spam(0)
rok.meglic@gmail.com - 031 492 148
 
G-force 11. jan 2010 11:37:52 Pridružen od:
31. mar 2008
828 objav
516 60 3
#3

Pri tej kodi mi naredi enako. Stran nalaga in jo nikoli ne naloži, ustvari se samo prazna .sql datoteka :/ (sicer je pa baza zelo majhna, preko cmd mi backup ustvari takoj...).


všeč(0) ni všeč(0) spam(0)
 
Roky 11. jan 2010 11:43:48 Pridružen od:
9. apr 2008
2506 objav
3240 335 107
#4

G-force, pri tej kodi manjka zgoraj še mysql_connect na bazo kamor hočeš kopirat. Če hočeš samo celotno bazo skopiran lahko uporabiš:


$dbName = 'mojabaza';
$dbFilename = $dbName.'.sql';

var_dump(exec('mysqldump --opt --skip-extended-insert --result-file='.$dbFilename.' -u root -h host -ppassword '.$dbName); // real import
všeč(0) ni všeč(0) spam(0)
rok.meglic@gmail.com - 031 492 148
 
G-force 11. jan 2010 16:11:25 Pridružen od:
31. mar 2008
828 objav
516 60 3
#5

Roky, hvala za pomoč vendar je bil problem drugje. Pa bom povedal rešitev, da se ne bo še kdo zajebaval tako dolgo kot sem se jaz :/




  1. Kar se exec() tiče mi ni delovalo, ker naj bi bil za to kriv bug. V sporočilu [15 Sep 2008 5:01pm UTC] je "vlabella" našel rešitev. Pred exec() je potrebno poklicati funkcijo sessionwriteclose(); (seveda v primeru, da ste predhodno na strani klicali session_start(), kar velja za moj primer, čeprav tega nisem omenil).


  2. Kljub sessionwriteclose(); pa mi spodnja koda še vedno ni delovala.





$backupFile = DBNAME . date("Y-m-d-H-i-s") . '.sql';

$command = "mysqldump -u" . DB
USER . " -p" . DBPASSWORD . " " . DBNAME . " > {$backupFile}";

sessionwriteclose();

exec($command);




Ker sem počasi imel vsega dovolj, sem program mysldump iz C:\wamp\bin\mysql\mysql5.1.33\bin prekopiral še v mapo, kjer imam stran C:\wamp\www\mojastra\




  1. Vendar koda še vedno ni delala. Po kombiniranju s cmd-jem pa sem ugotovil, da kljub temu, da za root nimam gesla mysqldump še vedno vpraša po njem in moraš pač klikniti na enter, seveda v php kodi to ni možno zato se je stran spet loadala v nedogled. Odstrani sem -p in spodnja koda (kooooooooooončno) deluje :D




$backupFile = DBNAME . date("Y-m-d-H-i-s") . '.sql';

$command = "mysqldump -u" . DB
USER . " " . DBNAME . " > {$backupFile}";

session
write_close();

exec($command);



všeč(1) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se