Database te groot

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Sam

Sam

24/08/2006 23:46:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?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
Gewijzigd op 01/01/1970 01:00:00 door Sam
 
PHP hulp

PHP hulp

17/11/2024 23:16:24
 
Klaasjan Boven

Klaasjan Boven

24/08/2006 23:49:00
Quote Anchor link
zoek een op
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
set_time_limit()
?>

Werkt alleen als save mode off is. Dit kun je zien in info.php
 
PHP Newbie

PHP Newbie

24/08/2006 23:49:00
 
Frank -

Frank -

24/08/2006 23:51:00
Quote Anchor link
Quote:
database is 11.3 Mb en bestaat uit 40 tabellen.

Dat is dus een microscopisch klein databeestje... Stelt echt niets voor en mag dus geen enkel probleem zijn. In MySQL kan 1 enkele tabel al vele TB's (!!!) groot zijn. Met 40 tabellen kun je dan dus een redelijk omvangrijke database krijgen...

Het probleem is alleen dat jij de database via email wilt gaan versturen. En dat is geen goed plan. Gebruik bv. ftp om de files van de ene server naar de andere server weg te schrijven. Er zijn vele mogelijkheden, kijk eens of er op www.sourceforge.net wat te vinden is.
 
Klaasjan Boven

Klaasjan Boven

24/08/2006 23:53:00
Quote Anchor link
@Newbie

Ik had het bewust tussen de code tags gezet zodat het klikbaar is
 
PHP Newbie

PHP Newbie

24/08/2006 23:54:00
Quote Anchor link
Klaasjan:
@Newbie

Ik had het bewust tussen de code tags gezet zodat het klikbaar is


mijn links zijn ook klikbaar :-p
 
Klaasjan Boven

Klaasjan Boven

24/08/2006 23:55:00
Quote Anchor link
OW sorry ik dacht dat je ze er later bij gezet had maar wel waren tegelijk
 
Pim Vernooij

Pim Vernooij

25/08/2006 00:23:00
Quote Anchor link
Frank:
Quote:
database is 11.3 Mb en bestaat uit 40 tabellen.

Dat is dus een microscopisch klein databeestje... Stelt echt niets voor en mag dus geen enkel probleem zijn. In MySQL kan 1 enkele tabel al vele TB's (!!!) groot zijn. Met 40 tabellen kun je dan dus een redelijk omvangrijke database krijgen...
Maar dat wil niet zeggen dat het exporteren/backuppen van de database geen problemen hoeft op te leveren. Op mijn werk hebben we een (MySQL) database met een aantal miljoen records. Als ik die wil backuppen via phpMyAdmin krijg ik problemen. Dat werkt gewoon niet.

Bij het exporteren naar die file timed php volgens mij out. (tijdje geleden dat ik het geprobeert heb.)
 
Frank -

Frank -

25/08/2006 00:28:00
Quote Anchor link
@Pim: PMA is niet geschikt om een database te backuppen. Daarvoor kun je beter de commandline gebruiken of een speciaal programma. PMA blijft gewoon een webinterface met alle bijbehorende beperkingen.
 
Pim Vernooij

Pim Vernooij

25/08/2006 00:33:00
Quote Anchor link
Yeap, maar dat wilde ik dus als voorbeeld geven. Want het script wat de TS gebruikt is ook gewoon een webapplicatie =]

Voor de 'echte' backups gebruiken we uiteraard de commandline, volgens mij regelt Denit (onze hoster) dagelijks onze backups. Als je bijvoorbeeld een wijziging in de database doet en snel een backup achter de hand wilt hebben, is PMA erg handig om te backuppen... Alleen niet bij zulke 'grote' databases.
 
Frank -

Frank -

25/08/2006 00:38:00
Quote Anchor link
Zie http://sourceforge.net/search/?type_of_search=soft&words=mysql+backup voor opensource backup-oplossingen. En zoek dan naar mysqldump oplossingen, die maken gebruik van de backupmogelijkheden van MySQL zelf.
 
Sam

Sam

25/08/2006 11:39:00
Quote Anchor link
@Frank: ik heb al veel gezocht, maar bijna geen enkel script kan het bestand versturen...

@de rest: bedankt voor de reacties, en ik ga het ff testen!
 
Sam

Sam

25/08/2006 12:02:00
Quote Anchor link
Het werkt, het duurt alleen extreem lang voordat hij klaar is, hij is nu 1000seconden bezig, en de db is nog niet gebackupped.

Ik kan misschien wel een script maken wat de backup op FTP zet. maar als de webserver dan ontploft, ben ik het nog kwijt, dus moet het op een andere server, en die heb ik niet tot mijn beschikking. Dus ik denk dat ik ze maar op mijn huide server zet, en dan elke dag handmatig download :(
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.