Version: 0.1
Type: Full Script
Category: File Management
License: BSD License
Description: Short, configurable PHP script uses system utilities to back up all MySQL databases to a location you select. Tested on Unix-like systems.
<?php
/********************************************************
* SIMPLE DATABASE BACKUP, by "dalecosp" *
* (c) 2005 *
* USE AT YOUR OWN RISK! *
* ABSOLUTELY NO WARRANTY OF ANY KIND! *
* *
* BSD/Pizza license: BSD license, plus: if you *
* use this, and we meet, _ you_buy_the_pizza!_ *
* *
* For additional license terms & important disclaimers, *
* see the FreeBSD /COPYRIGHT file. *
********************************************************/
// The system's rename command; we are on UNIX, so it's "mv"...
$mv="/bin/mv";
check($mv,"rename utility");
// our backup program ... we'll use mysqldump
$cmd="/usr/local/bin/mysqldump";
check($cmd,"database backup utility");
// our compression/zip program ... we use bzip2
$zip="/usr/bin/bzip2";
check($zip, "file compression utility");
$zipext="bz2";
// path to our "backup" location ... mine's on a different disk; this
// could be an NFS mount on another server, a tape drive, DVD-R, whatever...
$backpath="/home/me/dbbackup";
check($backpath,"backup directory");
// data for MySQL connection
$dbhost="dbhost";
$dbuser="dbuser";
$dbpass="dbpass";
// function check() makes sure we have the tools...
function check($program, $type) {
if (!file_exists($program)) {
die("$type not found!");
}
}
// connect to database
$conn=mysql_connect("$dbhost", "$dbuser", "$dbpass");
if ($conn) {
// get list of databases ...
$dbs=mysql_query("show databases");
// loop over the list of databases; move yesterday's to *old.$zipext
// dump the database today, and zip it up...
while ($thisdb=mysql_fetch_array($dbs)) {
$db=$thisdb['Database'];
system("$mv $backpath/$db.sql.$zipext $backpath/$db.sql.old.$zipext");
system("$cmd $db > $backpath/$db.sql");
system("$zip $backpath/$db.sql");
}
$msg="Databases backed up to $backpath at ".date('r');
}
else {
$msg="Backup script unable to open database connection!";
}
echo $msg; // The script easily could be made to mail() this to you;
// I don't care as I run this from cron and it'll mail the output
// anyway. Feel free to "have at it" for the next version :-)
?>