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 :-) 
?>