Version: 1.0
Type: Full Script
Category: Databases
License: GNU General Public License
Description: This is a backup script for MySQL using the mysqldump command. It was designed to be used with crontab to automate a database backup. It can be configured to switch on certain command line options that control the output of the backup.
<?php
/*
**************************************************************
* mydbackup.php 1.0 *
**************************************************************
mydbackup.php is a utility which can be used to backup a MySQL
database. It requires PHP and of course, MySQL. It can be
used with crontab to automate a backup. For instance, the
following will run every Sunday at midnight.
Edit the crontab, type:
[foo@bar]$ crontab -e
Insert the following line:
0 0 * * 0 php -f /path/to/mydbackup.php
If you are on a shared webhosting service, you probably need
to add to the crontab using Webmin or Cpanel. This can also
be loaded into a browser to run manually, or included into
another PHP file.
Copyright (C) 2005 James Davis <webmaster@phfeenikz.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You can get a copy of the GNU General Public License from this
address: http://www.gnu.org/copyleft/gpl.html#SEC1
You can also write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA.
===================================================================================================
Set error reporting off for security*/
error_reporting(0);
/*=================================================================================================
Configuration parameters ** THESE MUST BE SET PRIOR TO USE **/
$_MYPARMS = array();
$_MYPARMS['usrname'] = ''; //MySQL username.
$_MYPARMS['pswd'] = ''; //MySQL password.
$_MYPARMS['host'] = 'localhost'; //Host name.
$_MYPARMS['db_name'] = ''; //Database name.
/*=================================================================================================
Optional parameters.*/
$_MYPARMS['path'] = ''; //Path to mysqldump - if the bin directory
//is not set in your path you will need to
//set this variable.
$_MYPARMS['bak_dir'] = ''; //Backup directory, use a preexisting folder,
//or leave blank to use same directory as
//mybackup.php.
$_MYPARMS['use_gzip'] = FALSE; //Set to TRUE to gzip backup files.
/*=================================================================================================
Optional command line options.*/
$_MYPARMS['opts']['--add-locks'] = FALSE; //Set to TRUE to add lock table statements.
$_MYPARMS['opts']['--skip-comment'] = FALSE; //Set to TRUE to turn off commenting.
$_MYPARMS['opts']['--add-drop-table'] = FALSE; //Set to TRUE to add drop table statements
$_MYPARMS['opts']['--complete-insert'] = FALSE; //Set to TRUE to add complete inserts.
$_MYPARMS['opts']['--extended-insert'] = FALSE; //Set to TRUE to use exetended inserts.
$_MYPARMS['opts']['--lock-tables'] = FALSE; //Set to TRUE to lock tables during dump.
$_MYPARMS['opts']['--no-create-info'] = FALSE; //Set to TRUE to suppress CREATE TABLE
//statements.
/*==================================================================================================
Do not alter any code beyond this point.*/
// Initialize variables.
$output = '';
$timestmp = date('m.d.Y-Hi');
$options = '';
foreach($_MYPARMS['opts'] as $key => $value)
{
if ($value == TRUE)
{
$options = $options." ".$key;`
}
}
// Create filename with path info (ex. /path/to/db_foobar-2005.05.19-1200.sql)
$filename = "{$_MYPARMS['bak_dir']}{$_MYPARMS['db_name']}-backup-$timestmp.sql";
// Execute mysqldump and write data to the $lines array
exec("{$_MYPARMS['path']}mysqldump --user={$_MYPARMS['usrname']} --password={$_MYPARMS['pswd']} --host={$_MYPARMS['host']}$options {$_MYPARMS['db_name']}", $lines, $retval);
// Roll $lines into $output.
foreach($lines as $line)
{
$output .= $line."\n";
}
// Create Backup file and write data to it.
if ($retval != 1)
{
if($_MYPARMS['use_gzip'] == TRUE)
{
$filename = $filename.".gz";
if(!$handle = gzopen($filename,"wb6"))
{
print("Error: mysqldump cannot write to dump file");
}
else
{
gzdeflate($output, 6);
gzwrite($handle, $output);
}
gzclose($handle);
}
else
{
if(!$handle = fopen($filename,"wb"))
{
print("Error: mysqldump cannot write to dump file");
}
else
{
fwrite($handle, $output);
}
fclose($handle);
}
}
else
{
print("Error: please check configuration for errors.<br>");
}
?>