Hello.
I’d like to share my script, which I use on some production servers for quick database backup using mysql tools. People say, that I should use bash for that, but I prefer PHP
Script uses mysqldump for dumping databases and gzip for compressing backups. rm is run to ensure backups are not stored for too long.
<?php
//GRANT SELECT,SHOW DATABASES,SHOW VIEW,LOCK TABLES ON *.* TO "backupuser"@localhost INDENTIFIED BY "XXXXXXXXXX"
//Change options below to fine-tune your copy
$user = 'backupuser';
$password = 'backupuserpass';
$backupPath = '/home/all/backups';
$maxdaysold = 7;
$dateStr = date("Y-m-d-h-i-s");
$databasesToSkip = array('mysql', 'information_schema', 'test');
$output = null;
$timeStarted = time();
mysql_connect('localhost', $user, $password) or die('Cannot connect to MySQL: '.mysql_error());
$sql = 'SHOW DATABASES';
$result = mysql_query($sql);
if(!$result) {
die('Error getting database list: '.mysql_error());
}
$databases = array();
while ($row = mysql_fetch_assoc($result)) {
$databases[] = $row['Database'];
}
foreach($databases as $database) {
if(in_array($database, $databasesToSkip)) {
continue;
}
exec("mysqldump --complete-insert --create-options --add-locks --disable-keys --extended-insert --quick --quote-names -u $user --password=$password $database|gzip --fast -c>{$backupPath}/$database.$dateStr.sql.gz", $output, $result);
if($result) {
echo("Error dumping database $backupPath: $result");
}
}
//Deleting old backups
exec('find '.$backupPath.' -mtime '.$maxdaysold.' -name "*.sql.gz" -exec rm {} \\;', $output, $result);
if($result) {
echo("Error removing old database backups!");
}
echo('Database backup succeeded. Time elapsed: '.(time() - $timeStarted).' sec.');
echo("\n");//GRANT SELECT,SHOW DATABASES,SHOW VIEW,LOCK TABLES ON *.* TO “backupuser”@localhost INDENTIFIED BY “XXXXXXXXXX”
//Change options below to fine-tune your copy
$user = ‘backupuser’;
$password = ‘backupuserpass’;
$backupPath = ‘/home/all/backups’;
$maxdaysold = 7;
$dateStr = date(“Y-m-d-h-i-s”);
$databasesToSkip = array(‘mysql’, ‘information_schema’, ‘test’);
$output = null;
$timeStarted = time();
mysql_connect(‘localhost’, $user, $password) or die(‘Cannot connect to MySQL: ‘.mysql_error());
$sql = ‘SHOW DATABASES’;
$result = mysql_query($sql);
if(!$result) {
die(‘Error getting database list: ‘.mysql_error());
}
$databases = array();
while ($row = mysql_fetch_assoc($result)) {
$databases[] = $row['Database'];
}
foreach($databases as $database) {
if(in_array($database, $databasesToSkip)) {
continue;
}
exec(“mysqldump –complete-insert –create-options –add-locks –disable-keys –extended-insert –quick –quote-names -u $user –password=$password $database|gzip –fast -c>{$backupPath}/$database.$dateStr.sql.gz”, $output, $result);
if($result) {
echo(“Error dumping database $backupPath: $result”);
}
}
//Deleting old backups
exec(‘find ‘.$backupPath.’ -mtime ‘.$maxdaysold.’ -name “*.sql.gz” -exec rm {} \\;’, $output, $result);
if($result) {
echo(“Error removing old database backups!”);
}
echo(‘Database backup succeeded. Time elapsed: ‘.(time() – $timeStarted).’ sec.’);
echo(“\n”);





