MySQL backup s PHP?
2 naročnika
2 naročnika
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?
4 odgovori
$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;
}
}
}
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...).
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
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 :/
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).
Kljub sessionwriteclose(); pa mi spodnja koda še vedno ni delovala.
$backupFile = DBNAME . date("Y-m-d-H-i-s") . '.sql';
$command = "mysqldump -u" . DBUSER . " -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\
- 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" . DBUSER . " " . DBNAME . " > {$backupFile}";
sessionwrite_close();
exec($command);