Hallo,
Ik wil graag mij MySQL database elke dag automatisch laten updaten, en de backup gemailed hebben. Nu heb ik een PHP script gevonden wat ik kan instellen als Cronjob, en eigenlijk wekt het perfect.
Ineens is het script gaan klagen met:
Fatal error: Maximum execution time of 30 seconds exceeded in /home/theschoo/public_html/cronjobs/db-backups.php on line 81
Naar mijn idee komt dit omdat het langer dan 30 seconden duurt voor het script om de database te backuppen. Mijn totale database is 11.3 Mb en bestaat uit 40 tabellen.
Weet iemand een manier om dit evengoed te kunnen backuppen, het maakt me niet uit hoe lang het duurt, als het maar gebeurt.
Het script is als volgt:
<?php
############### OPMERKING !! #############
## ##
## Na het aanpassen van de gegevens ##
## moet je deze php file op de server ##
## plaatsen waar je databases draaien. ##
## ##
## Je maakt dan eenvoudig een backup ##
## van je database door te surfen naar ##
## http://internetadres/db-backups.php ##
## ##
###########################################
#####################
## Eertse database ##
#####################
$dbnaam="blabla"; //naam eerste database
$dbuser="blabla"; //database gebruikersnaams
$dbpass="ojee"; //gebruikers paswoord van de database
$email="mail"; // naar wie moet de email gestuurd worden
##################################
## einde config eerste database ##
##################################
#####################
## Tweede database ##
#####################
$dbnaam1=""; //naam tweede database
$dbuser1=""; //database gebruikersnaam
$dbpass1=""; //gebruikers paswoord van de database
$email1=""; //naar wie moet de email gestuurd worden
##################################
## einde config tweede database ##
##################################
### Om nog meerdere databases toe te voegen, gebruik dan $dbnaam2 .... enz ...
if(empty($dbnaam)) {
echo "<b>Je moet de juiste gegevens verstrekken vooraleer een backup van je database te kunnen maken !</b><br>";
echo "<b>Gelieve de juiste gegevens in te vullen in db-backups.php</b><br>";
exit;
}
$site = array();
## Dit is onze eerste database
$site[0] = array("dbhost" => "localhost", "dbnaam" => "$dbnaam" , "dbuser" => "$dbuser", "dbpass" => "$dbpass", "domein" => "$dbnaam", "email" => "$email");
## Dit is onze tweede database
//$site[1] = array("dbhost" => "localhost", "dbnaam" => "$dbnaam1" , "dbuser" => "$dbuser1", "dbpass" => "$dbpass1", "domein" => "$dbnaam1", "email" => "$email1");
## Om nu verdere databases tot te voegen kopieer je gewoon de regel hierboven opnieuw, en verander
## de cijfers 1 door 2
### Vanaf hier moet je niets meer wijzigen, tenzij je weet waarmee je bezig bent :)
###
### Hier begint de backuproutine met de gegevens uit site[x]
###
for ($a = 0; $a < sizeof($site); $a++) {
$link = mysql_connect($site[$a]["dbhost"],$site[$a]["dbuser"],$site[$a]["dbpass"]) or die('No datbase conection could be establised');
mysql_select_db($site[$a]["dbnaam"],$link) or die('No datbase selected');
$query = mysql_query('SHOW TABLE STATUS') or die(mysql_error());
$sql_backup = '';
while($row = mysql_fetch_assoc($query)) {
$sql = 'SHOW CREATE TABLE '.$row['Name'].'';
$query2 = mysql_query($sql) or die(mysql_error());
$sql_backup.="\r\n#Drop table ".$row['Name']."\r\n\r\n";
$sql_backup.="\r\nDrop table if exists `".$row['Name']."`;\r\n\r\n";
$sql_backup.="\r\n#Create table ".$row['Name']."\r\n\r\n";
$out = mysql_fetch_assoc($query2);
$sql_backup.=$out['Drop Table if EXISTS'].";\r\n\r\n";
$sql_backup.=$out['Create Table'].";\r\n\r\n";
$sql_backup.="#Dump data\r\n\r\n";
$sql = 'SELECT * FROM '.$row['Name'];
$out = mysql_query($sql);
$sql_code = '';
while($code = mysql_fetch_array($out,MYSQL_ASSOC)) {
$sql_code .= "INSERT INTO ".$row['Name']." SET ";
foreach($code as $insert => $value) {
$sql_code.=$insert ."='".addslashes($value)."',";
}
$sql_code = substr($sql_code, 0, -1);
$sql_code.= ";\r\n";
}
$sql_backup.= $sql_code;
}
$unique = md5(uniqid(time()));
$message = "Backup procedure van database: ". $site[$a]["dbnaam"] ." is met succes verlopen. U vind in de bijlage een backup van de inhoud gemaakt op. ".date('d-m-Y H:i:s')."\r\n Autobot\n\n";
$headers = "From: database-backup <$email>\r\n";
$headers .= "Reply-To: Autobot <noreply@". $site[$a]["domein"] .">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"".$unique."\"\r\n";
$headers .= "Content-Disposition: attachment\r\n";
$body.= "This is a multi-part message in MIME format.\r\n";
$body.= "\r\n";
$body.= "--".$unique."\r\n";
$body.= "Content-Type: text/plain; charset=iso-8859-1\r\n";
$body.= "Content-Transfer-Encoding: 7bit\r\n";
$body.= "\r\n";
$body.= $message ."\r\n";
$body.= "--".$unique."\r\n";
$datum=date("d-m-Y");
$body .= "Content-Type: application/octet-stream; name=" . $site[$a]["domein"] . "-$datum" . ".sql\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n";
$body.= "Content-disposition: attachment\r\n";
$body .= "\n";
$body .= chunk_split(base64_encode($sql_backup)) . "\r\n";
mail($site[$a]["email"],'Mysql backup '.date('d-m-Y H:i:s'),$body,$headers);
echo "Backup van " . $site[$a]["dbnaam"] . " is verstuurd naar " . $site[$a]["email"] . "<br/>";
flush();
}
?>
Bedankt alvast, SAplayer
1.841 views