MySQL database backup using php and Email file

Byadmin

Jan 16, 2011

Last updated on May 23rd, 2016 at 04:32 pm

VN:F [1.9.22_1171]
Rating: 9.5/10 (4 votes cast)

MySQL database backup using php and Email file

This script will show you how to take complete MySQL database backup by running the PHP script. Then Email the backup file as an attachment. We will first take the backup if the complete database and then compress it using GZIP before sending the file as an attachment.

JUST CONFIGURE THE FOLLOWING SEVEN VARIABLES TO MATCH YOUR SETUP

$dbuser = "";            // Database username
$dbpwd = "";            // Database password
$dbname = "";            // Database name. Use --all-databases if you have more than one
$filename= "backup-$datestamp.sql.gz";   // The name (and optionally path) of the dump file
$to = "[email protected]";      // Email address to send dump file to
$from = "[email protected]";      // Email address message will show as coming from.
$subject = "MySQL backup file";      // Subject of email

Complete script is shown below.

< ?php
$datestamp = date("Y-m-d");      // Current date to append to filename of backup file in format of YYYY-MM-DD

/* CONFIGURE THE FOLLOWING SEVEN VARIABLES TO MATCH YOUR SETUP */
$dbuser = "";            // Database username
$dbpwd = "";            // Database password
$dbname = "";            // Database name. Use --all-databases if you have more than one
$filename= "backup-$datestamp.sql.gz";   // The name (and optionally path) of the dump file
$to = "[email protected]";      // Email address to send dump file to
$from = "[email protected]";      // Email address message will show as coming from.
$subject = "MySQL backup file";      // Subject of email

$command = "mysqldump -u $dbuser --password=$dbpwd $dbname | gzip > $filename";
$result = passthru($command);

$attachmentname = array_pop(explode("/", $filename));   // If a path was included, strip it out for the attachment name

$message = "Compressed database backup file $attachmentname attached.";
$mime_boundary = "< <<:" . md5(time());
$data = chunk_split(base64_encode(implode("", file($filename))));

$headers = "From: $from\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: multipart/mixed;\r\n";
$headers .= " boundary=\"".$mime_boundary."\"\r\n";

$content = "This is a multi-part message in MIME format.\r\n\r\n";
$content.= "--".$mime_boundary."\r\n";
$content.= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$content.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$content.= $message."\r\n";
$content.= "--".$mime_boundary."\r\n";
$content.= "Content-Disposition: attachment;\r\n";
$content.= "Content-Type: Application/Octet-Stream; name=\"$attachmentname\"\r\n";
$content.= "Content-Transfer-Encoding: base64\r\n\r\n";
$content.= $data."\r\n";
$content.= "--" . $mime_boundary . "\r\n";

mail($to, $subject, $content, $headers);

unlink($filename);   //delete the backup file from the server
?>

NOTE: Make sure that your email system can process huge attachments since MySQL backup files can be very big at times.

VN:F [1.9.22_1171]
Rating: 9.5/10 (4 votes cast)

Leave a Reply

Your email address will not be published. Required fields are marked *

five × four =