Restore MySQL dump (backup) using PHP
The other day, I was looking for an easy way to restore a MySQL dump (or backup, whatever you like to call it) in PHP. I’ve previously used a segment of the code from PHP MySQL Backup V 2.2 for this, but it didn’t seem to support FULLTEXT indicies that well. So, I searched around, but couldn’t find anything. I even asked on the PHP IRC channel, and they suggested to use shell_exec to call mysql (unfortunately, I’ve disabled shell_exec for security reasons). Looking closer, I noticed that this was actually quite easy to do. Here’s the code I wrote to restore a phpMyAdmin MySQL dump (not sure if it works with mysqldump dumps):
< ?php
/*
* Restore MySQL dump using PHP
* (c) 2006 Daniel15
* Last Update: 9th December 2006
* Version: 0.1
*
* Please feel free to use any part of this, but please give me some credit
*/
// Name of the file
$filename = 'test.sql';
// MySQL host
$mysql_host = 'localhost';
// MySQL username
$mysql_username = 'root';
// MySQL password
$mysql_password = '';
// Database name
$mysql_database = 'test';
//////////////////////////////////////////////////////////////////////////////////////////////
// Connect to MySQL server
mysql_connect($mysql_host, $mysql_username, $mysql_password) or die('Error connecting to MySQL server: ' . mysql_error());
// Select database
mysql_select_db($mysql_database) or die('Error selecting MySQL database: ' . mysql_error());
// Temporary variable, used to store current query
$templine = '';
// Read in entire file
$lines = file($filename);
// Loop through each line
foreach ($lines as $line_num => $line) {
// Only continue if it's not a comment
if (substr($line, 0, 2) != '--' && $line != '') {
// Add this line to the current segment
$templine .= $line;
// If it has a semicolon at the end, it's the end of the query
if (substr(trim($line), -1, 1) == ';') {
// Perform the query
mysql_query($templine) or print('Error performing query \'<b>' . $templine . '</b>\': ' . mysql_error() . '<br /><br />');
// Reset temp variable to empty
$templine = '';
}
}
}
?>
See? How easy is that?
Update: This also works for mysqldump dumps ![]()










January 5th, 2007 at 2:27 am
thanks.. i was thinking ‘why this thing saying there is an error’, i was giving whole file to mysql_query with file_get_contents
April 22nd, 2007 at 1:44 pm
Plain text? Not with line numbers it isn’t.
Nice script, but houw about a “download it here” link.
April 22nd, 2007 at 3:17 pm
I don’t really like the current syntax highlighing script I’ve got at the moment, so I’ve removed it (it’s just plain text now).
I’ll try to remember to add a “Download it here” link…
November 13th, 2007 at 9:34 pm
superb code. This code helped me alot.
keep giving these types of help
November 14th, 2007 at 7:34 am
Really a great code, helped me a lot, but as the database is growing am having trouble restoring.
The delay creates an error of time limit on the browser of 60 seconds and does not update.
Now I am using set_time_limit and ignore_user_abort and is helping a bit.
The script is the mysqldump with approximately 90mb.
It improve it?
November 16th, 2007 at 8:15 pm
I’m not sure how to improve it for large dump files, as I’ve never had a MySQL dump that big. Perhaps you should consider using BigDump for it.
February 6th, 2008 at 2:28 am
I’d suggest to take MySQL Dumper for big databases. I already used it for several large scale MySQL dumps (up to 1.8GB) and it works just fine.
May 30th, 2008 at 4:25 pm
THANK YOU THANK YOU THANK YOU VERY MUCH!!!!
My project is due in next 1 hour and I was very struggling with writting an installer. Your piece of code is really helpful to me, saved my day!
Thank you!!!!
May 30th, 2008 at 10:37 pm
Thanks Daniel. Making the same mistake, I was. using file_get_contents.
A great help you are.
May the force be with u.
July 30th, 2008 at 11:15 pm
really cool mannn
September 23rd, 2008 at 12:59 am
it’s really nice code.
Yea its easy when u look at code but take hours to develop something like this.I’ve wasted my whole day finding something good to restore database.
Thank you so much.