mysqldump
Publicado por Migue (4 intervenciones) el 10/01/2006 13:53:37
Hola a todos, estoy intentando hacer un backup de mi base de datos. Mi idea es hacerlo a través de un fichero Php, pero no se por qué el mysqldump no me funciona. Escribo desde el sql la línea de comando y me funciona correctamente, pero desde el php llamar a un comando externo hay que usar la función system(), y es ahí donde no me funciona, parece que no me reconoce el mysqldump o no se qué pasa, estoy viendo páginas y todo el mundo utiliza el system().
Lo estoy probando de momento en local, tengo Apache, mysql y win XP para luego subirlo al servidor en Linux.
Tengo dos ficheros php, MySQLDump.php que es la clase y backup.php:
MySQLDump.php
<?php
class MySQLDump {
/**
* The backup command to execute
* @private
* @var string
*/
var $cmd;
/**
* MySQLDump constructor
* @param string dbUser (MySQL User Name)
* @param string dbPass (MySQL User Password)
* @param string dbName (Database to select)
* @param string dest (Full dest. directory for backup file)
* @param string zip (Zip type; gz - gzip [default], bz2 - bzip)
* @access public
*/
function MySQLDump($dbUser, $dbPass, $dbName, $dest,
$zip = 'gz')
{
$zip_util = array('gz'=>'gzip','bz2'=>'bzip2');
if (array_key_exists($zip, $zip_util)) {
$fname = $dbName . '.' . date("w") . '.txt.' . $zip;
$this->cmd = 'mysqldump -u' . $dbUser . ' -p' . $dbPass . ' --add-drop-table' .
' ' . $dbName . ' --add-drop-table' . '| ' . $zip_util[$zip] . ' >' .
$dest . '/' . $fname;
} else {
$fname = $dbName . '.' . date("w") . '.txt';
$this->cmd = 'mysqldump -u' . $dbUser . ' -p' . $dbPass . ' --add-drop-table' .
' ' . $dbName . ' >' . $dest . '/' . $fname;
}
}
/**
* Runs the constructed command
* @access public
* @return void
*/
function backup()
{
system($this->cmd,$error);
//echo $this->cmd;
if ($error) {
trigger_error('Backup failed: ' . $error);
}
}
}
?>
backup.php
<?php
// Include the MySQLDump class
require_once 'MySQLDump.php';
$dbUser = 'admin'; // db User
$dbPass = 'xxx'; // db User Password
$dbName = 'base'; // db name
$dest = '/buckups'; // Path to directory
//$zip = 'gz'; // ZIP utility to compress with
// Instantiate MySQLDump
$mysqlDump = new MySQLDump($dbUser, $dbPass, $dbName, $dest,
$zip);
// Perform the backup
$mysqlDump->backup();
?>
Sencillito, llamo al backup.php y luego en la clase hace:
system($this->cmd,$error); pero en ésta línea me da el error, el $this->cmd contiene el mysqldump. El error que me sale es:Notice: Backup failed: 1 in C:\web\Coyote\MySQLDump.php on line 62.
Alguna sugerencia?? por qué no me funciona el system? Gracias
Lo estoy probando de momento en local, tengo Apache, mysql y win XP para luego subirlo al servidor en Linux.
Tengo dos ficheros php, MySQLDump.php que es la clase y backup.php:
MySQLDump.php
<?php
class MySQLDump {
/**
* The backup command to execute
* @private
* @var string
*/
var $cmd;
/**
* MySQLDump constructor
* @param string dbUser (MySQL User Name)
* @param string dbPass (MySQL User Password)
* @param string dbName (Database to select)
* @param string dest (Full dest. directory for backup file)
* @param string zip (Zip type; gz - gzip [default], bz2 - bzip)
* @access public
*/
function MySQLDump($dbUser, $dbPass, $dbName, $dest,
$zip = 'gz')
{
$zip_util = array('gz'=>'gzip','bz2'=>'bzip2');
if (array_key_exists($zip, $zip_util)) {
$fname = $dbName . '.' . date("w") . '.txt.' . $zip;
$this->cmd = 'mysqldump -u' . $dbUser . ' -p' . $dbPass . ' --add-drop-table' .
' ' . $dbName . ' --add-drop-table' . '| ' . $zip_util[$zip] . ' >' .
$dest . '/' . $fname;
} else {
$fname = $dbName . '.' . date("w") . '.txt';
$this->cmd = 'mysqldump -u' . $dbUser . ' -p' . $dbPass . ' --add-drop-table' .
' ' . $dbName . ' >' . $dest . '/' . $fname;
}
}
/**
* Runs the constructed command
* @access public
* @return void
*/
function backup()
{
system($this->cmd,$error);
//echo $this->cmd;
if ($error) {
trigger_error('Backup failed: ' . $error);
}
}
}
?>
backup.php
<?php
// Include the MySQLDump class
require_once 'MySQLDump.php';
$dbUser = 'admin'; // db User
$dbPass = 'xxx'; // db User Password
$dbName = 'base'; // db name
$dest = '/buckups'; // Path to directory
//$zip = 'gz'; // ZIP utility to compress with
// Instantiate MySQLDump
$mysqlDump = new MySQLDump($dbUser, $dbPass, $dbName, $dest,
$zip);
// Perform the backup
$mysqlDump->backup();
?>
Sencillito, llamo al backup.php y luego en la clase hace:
system($this->cmd,$error); pero en ésta línea me da el error, el $this->cmd contiene el mysqldump. El error que me sale es:Notice: Backup failed: 1 in C:\web\Coyote\MySQLDump.php on line 62.
Alguna sugerencia?? por qué no me funciona el system? Gracias
Valora esta pregunta


0