Roland
Roland

Reputation: 9691

Backup MySql Database?

I have asked this question before but I haven't got an answer, so I'm rephrasing it.

I want to back up a db using either:

system("mysqldump -h DB_HOST -u DB_USER -p DB_PASS logindb > $location/$backup");

or:

sql="BACKUP my_db TO DISK my_backup_folder WITH FORMAT #";

if ($stmt = $this->connect->prepare($sql)) {    
    $stmt->execute();
    $stmt->close();
} else {
    $error              = true;
    $message['error']   = true;
    $message['message'] = CANNOT_PREPARE_DATABASE_CONNECTION_MESSAGE;
    return json_encode($message);
}   

But the first gives me an empty sql file and the second gives me nothing. Why is that, and if there is a way to find out what error occurred how would I do it ?

Also which method is better ?

Upvotes: 1

Views: 378

Answers (5)

Narcis Radu
Narcis Radu

Reputation: 2547

Use try-catch, something like:

try{
    $stmt = $this->connect->prepare($sql);
    $stmt->execute();
    $stmt->close();
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

Check log files for errors.

Upvotes: 1

Mike
Mike

Reputation: 3024

Found some simpler code here

Method 1:

$tableName  = 'mypet';
$backupFile = 'backup/mypet.sql';
$query      = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName";
$result = mysql_query($query);

Method 2:

$backupFile = $dbname . date("Y-m-d-H-i-s") . '.gz';
$command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile";
system($command);

Upvotes: 1

Luc Franken
Luc Franken

Reputation: 3014

The start post:

-p DB_PASS

And the right form:

-p[password]

I don't know why but the -p is agains the password, not equal to the other parameters. So be aware that you take over the examples well. I have seen different cases where this was the issue so take note of it.

Upvotes: 1

slv007
slv007

Reputation: 328

Make sure that the user have the permission to this database.

Below is the command to backup the mysql database

mysqldump -h [host_name] -u [username] -p[password] [database_name] > dumpfilename.sql

Upvotes: 0

Mike
Mike

Reputation: 3024

The first one is faster if you have exec permissions for php.

Check the SQL error log file.

/var/log/mysql.err - MySQL Error log file

/var/log/mysql.log - MySQL log file

For php you might put error_reporting(E_ALL); this to throw php errors if any.

Upvotes: 0

Related Questions