Mysql backup

Door Eris -, 24 jaar geleden, 16.678x bekeken

Let op beperking er zit een beperking op van de maximale bestandsgroote in php/mailserver NIET in de script!

Dit script maakt een mysql backup van je database en mailt het naar je toe als een attachement.
Verander deze settings:

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
<?
#create a sql backup. Send this to your email
//define settings
//database host

DEFINE('dbhost','localhost');
//database name
DEFINE('dbnaam','mijndatabase');
//database user
DEFINE('dbuser','ik');
//database passwordt
DEFINE('dbpass','mijgeheimww');
//domeinnaam
DEFINE('domein','mijndomein.nl');
//doel
DEFINE('email','[email protected]');
?>


Daarnaast dien je een cronjob in te stellen. Dit is per controlpannel verschillend dus leg het alleen voor Direct Admin uit! (Ik ben niet verantwoordelijk voor enige schade hierdoor!!

0 0 * * 1 /usr/local/bin/php /home/accountnaam/domains/mijndomein.nl/public_html/mysql_backup.php

Het is misschien slimmer om het in de map private_html te zetten :)

Gesponsorde koppelingen

PHP script bestanden

  1. mysql-backup

 

Er zijn 46 reacties op 'Mysql backup'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


24 jaar geleden
 
0 +1 -0 -1
leuk zeg :) alleen heb ik geen direct admin namelijk cpanel :(
B a s
B a s
24 jaar geleden
 
0 +1 -0 -1
Op mijn server werkte het niet, te grote database:
Allowed memory size of 8388608 bytes exhausted (tried to allocate 3285476 bytes)
De VeeWee
de VeeWee
24 jaar geleden
 
0 +1 -0 -1
en jij post dit nu pas, een week geleden heb ik er ook één gemaakt.
De opbouw van de keys werkt niet helemaal tegoei maar het werkt ongeveer, dit is het:

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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
######
        #Functie om database te kopiëren
        ######

        function DBdump(){
                                $this->DBclose();
                                $this->connectie = @mysql_connect($this->host, $this->user, $this->password);
                                if(!@mysql_ping($this->connectie) || empty($this->connectie)){
                                                return "Er is geen verbinding met de database!";
                                }

                                
                                $tabellen = mysql_list_tables($this->database, $this->connectie);
                                                                                                
                                //wegens probleem met mysql_num_rows dat ik ondervond:
                                $aantal = 0;
                                while ($rij = mysql_fetch_row($tabellen)) {
                                                   $aantal++;
                                }

                                mysql_data_seek($tabellen, 0);
                                
                $out = "#Mysql-dump voor database: ".$this->database."
                                #Datum: "
.date("d-m-Y H:i")."
                                #---------------------------------- "
;
                
                for($i = 0; $i<$aantal; $i++){
                        $tabelnaam = mysql_tablename($tabellen, $i);
                        
                        $sql = "SHOW FIELDS FROM ".$tabelnaam;
                        $res = mysql_db_query($this->database, $sql, $this->connectie);
                        
                         if(!$res && $this->error == 0){
                                die(@$this->DBfout($sql));
                         }
elseif(!$res && $this->error != 0){
                                die($this->error);
                         }



                        $out .= "
                                                
                        ######
                        # Structuur voor tabel "
.$tabelnaam."
                        ######
                        DROP TABLE IF EXISTS `"
.$tabelnaam."`;
                        CREATE TABLE "
.$tabelnaam."(
                                                "
;
                        
                        // de velden
                        while($rij = mysql_fetch_array($res, MYSQL_ASSOC)){
                                $default = ($rij['Default'] != "") ? " DEFAULT '".$rij['Default']."'" : "";
                                $null = ($rij['Null'] != "YES") ? " NOT NULL" : "";
                                $extra = ($rij['Extra'] !="") ? " ".$rij['Extra'] : "";

                                $out .= "    ".$rij['Field']." ".$rij['Type'].$default.$null.$extra.",\n";
                        }

                                                $len = strlen($out)-2;
                                                $out = substr($out,0,$len);                                                

                        $sql = "SHOW KEYS FROM ".$tabelnaam;                        
                        $res = mysql_db_query($this->database, $sql, $this->connectie);
                        if(!$res && $this->error == 0){
                                die(@$this->DBfout($sql));
                         }
elseif(!$res && $this->error != 0){
                                die($this->error);
                         }

                        
                        
                                                $x = 0;
                        while($rij = mysql_fetch_array($res, MYSQL_ASSOC)){
                                if($rij['Non_unique'] == 1 && $rij['Key_name'] != "PRIMARY" && $rij['Index_type']!="FULLTEXT"){
                                                                        $knaam = "UNIQUE";
                                                                }
elseif($rij['Non_unique'] == 1 && $rij['Key_name'] != "PRIMARY" && $rij['Index_type']=="FULLTEXT"){
                                                                        $knaam = "FULLTEXT";
                                                                }
elseif($rij['Key_name'] == "PRIMARY"){
                                                                        $knaam = "PRIMARY";
                                                                }
else{
                                                                        $knaam = "KEY";
                                                                }

                                                                $index[$x][0] = $rij['Column_name'];
                                                                $index[$x][1] = $knaam;
                                                                
                                                                $x++;
                        }

                                                
                        foreach($index as $rij) {
                                list($rijnaam, $wat) = $rij;
                                if($wat == "PRIMARY") {
                                        $out .= ",
                                       PRIMARY KEY ("
.$rijnaam.")";
                                }
elseif ($wat == "UNIQUE"){
                                        $out .= ",
                                       UNIQUE ("
.$rijnaam.")";
                                }
elseif ($wat == "FULLTEXT"){
                                        $out .= ",
                                        FULLTEXT ("
.$rijnaam.")";
                                }
else{
                                        $out .= ", KEY (".$rijnaam.")";
                                }
                        }

                        
                        $out .= "
                        )TYPE=MyISAM; \n
                        
                        ######
                        # Gegevens voor tabel "
.$tabelnaam."
                        ######
                        "
;
                        
                        $this->genomendb = @mysql_select_db($this->database, $this->connectie);
                        $inhoud = $this->DBexe("SELECT * FROM ".$tabelnaam);
                        //door een warning gebruik ik nu mysql_fetch_array inplaats den DBarray
                        while($rij =mysql_fetch_array($inhoud, MYSQL_ASSOC)){
                        
                                $out .= "INSERT INTO ".$tabelnaam." SET ";
                                
                                $veldnamen = $this->DBarray("SHOW FIELDS FROM ".$tabelnaam);
                                foreach($veldnamen as $veldnaam){
                                        $out.=$veldnaam['Field']." = '".htmlspecialchars($rij[$veldnaam['Field']])."', ";
                                }

                                        
                                unset($veldnamen);
                                                                $len = strlen($out)-2;
                                $out = substr($out, 0, $len).";\n";
                        }



                        unset($index);
                        unset($inhoud);
                        $out .= "
                       #----------------------------------
                        
                        
                        "
;
                        
                }

                return nl2br($out);
        }


?>



ps: ok dit word slecht uitgelijnd op deze site....
Eris -
Eris -
24 jaar geleden
 
0 +1 -0 -1
Het verschil is dat het nu gemaild wordt, Daarnaast werkt dit altijd omdat er gebruik van wordt gemaakt voor en ik af gelopen week weinig tijd had. Maar opzich zijn er duizend versie van...
Bram Z
Bram Z
24 jaar geleden
 
0 +1 -0 -1
Wow nice script, maar is dat mailen niet een beetje te veel, want mijn db is al vlug over de 20 mb. Misschien laten opslaan op je server gewoon ?
Eris -
Eris -
24 jaar geleden
 
0 +1 -0 -1
En als je server chrased? ;)
Bram Z
Bram Z
24 jaar geleden
 
0 +1 -0 -1
en als je email crasht :D, met hotmail zal he het al niet moeten mee doen
Eris -
Eris -
24 jaar geleden
 
0 +1 -0 -1
Ik mag aan nemen dat je dagelijks je mail controleerd :)
Winston Smith
Winston Smith
24 jaar geleden
 
0 +1 -0 -1
@Dark: Dan heb je nog altijd een kopie op je server (je gewone database).
Daarnaast is het wel erg toevallig als je mailserver en webserver tegelijk crashen. Als je ze op je server opslaat ben je waarschijnlijk je backup ook kwijt!


24 jaar geleden
 
0 +1 -0 -1
Bij mij deed hij het niet goed, ik kreeg het gehele mailtje als attachment inclusief de body tags zoals: Transfer-Encoding: 7bit Backup
Bleek dat als ik alle \r weghaalde alles wel goed werkt.
Misschien een verschil met een linux server en een windows server ofzo??


24 jaar geleden
 
0 +1 -0 -1
Prima script. Ik moest meerdere databases backuppen en heb het script daarom iets aangepast:

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
113
114
115
116
117
118
119
<?
$dbhost
= array("localhost","localhost");
$dbnaam = array("dbnaam1","dbnaam2");
$dbuser = array("dbuser1","dbuser2");
$dbpass = array("dbpass1","dbpass2");
$domein = array("domein1","domein2");
$email = array("email1","email2");

for ($a = 0; $a < sizeof($dbhost); $a++)
{

    #create a sql backup and send it to your e-mail address
    //define settings
    //database host

    DEFINE('dbhost',$dbhost[$a]);
    //database name
    DEFINE('dbnaam',$dbnaam[$a]);
    //database user
    DEFINE('dbuser',$dbuser[$a]);
    //database passwordt
    DEFINE('dbpass',$dbpass[$a]);
    //domeinnaam
    DEFINE('domein',$domein[$a]);
    //doel
    DEFINE('email',$email[$a]);


//connect with database
$link = mysql_connect(dbhost,dbuser,dbpass) or die('No datbase conection could be establised');
mysql_select_db(dbnaam,$link) or die('No datbase selected');

//query to recive table names
$query = mysql_query('SHOW TABLE STATUS') or die(mysql_error());
$sql_backup = '';

//whileloop to loop trough every table
while($row = mysql_fetch_assoc($query))
{

    //show sql query to rebuild the query
    $sql = 'SHOW CREATE TABLE '.$row['Name'].'';
    //exucte error or give a error
    $query2 = mysql_query($sql) or die(mysql_error());
    
    //create sql
    $sql_backup.="\r\n#Create table ".$row['Name']."\r\n\r\n";
    $out = mysql_fetch_assoc($query2);

    $sql_backup.=$out['Create Table'].";\r\n\r\n";
    $sql_backup.="#Dump data\r\n\r\n";

    //SQL code to select everything for table
    $sql = 'SELECT * FROM '.$row['Name'];
    $out = mysql_query($sql);
    $sql_code = '';

    //loop trough the colloms
    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;
}


//generade a unique id
$unique = md5(uniqid(time()));

//message
$message = "Backup procedure van database: ".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";

//maak headers aan
//form header

$headers = "From: Autobot <noreply@".domein.">\r\n";
//terug sturen naar een niet bestaand mail adress ([email protected])
$headers .= "Reply-To: Autobot <noreply@".domein.">\r\n";
//vertel dat het een mine versie is
$headers .= "MIME-Version: 1.0\r\n";
//email bestaat uit meerdere  bestanden dus vertel wat de scheidings teken is en dat het een multipart is
$headers .= "Content-Type: multipart/mixed; boundary=\"".$unique."\"\r\n";
//we zenden een attachment mee
$headers .= "Content-Disposition:  attachment\r\n";

//generenen een body. Dit is een multi part gezeik
$body.= "This is a multi-part message in MIME format.\r\n";
$body.= "\r\n";
//boundary
$body.= "--".$unique."\r\n";
//content type + charater set (iso in dit geval)
$body.= "Content-Type: text/plain; charset=iso-8859-1\r\n";
//codering (7 bit)
$body.= "Content-Transfer-Encoding: 7bit\r\n";
$body.= "\r\n";
//het bericht
$body.= $message ."\r\n";
//boundaty
$body.= "--".$unique."\r\n";
//content type + naam bestand (database.sql)
$body .= "Content-Type: application/octet-stream; name=database.sql\r\n";
//codering
$body .= "Content-Transfer-Encoding: base64\r\n";
//als bijlage toegevoegd
$body.= "Content-disposition: attachment\r\n";
$body .= "\n";
//de inhoud van het bestand
$body .= chunk_split(base64_encode($sql_backup)) . "\r\n";
//zet alles op email!
//hier kan wat tijdsverschil in zitten!

mail(email,'Mysql backup '.date('d-m-Y H:i:s'),$body,$headers);


echo "Backup van " . $dbnaam[$a] . " is verstuurd naar " . $email[$a] . "<br/>";
flush();
}

?>


24 jaar geleden
 
0 +1 -0 -1
Heel fijn !! Bedankt.


24 jaar geleden
 
0 +1 -0 -1
Werkt perfect..
Bedankt. Daniel.
Legolas
Legolas
24 jaar geleden
 
0 +1 -0 -1
erm.. even dit: wrm staat er een echt db password in dit script? niet zo slim hè ;)
Derk nvt
Derk nvt
24 jaar geleden
 
0 +1 -0 -1
waarschijnlijk is dat gewoon wat blijs ingevuld....
Eris -
Eris -
24 jaar geleden
 
0 +1 -0 -1
hoezo, hoe wil je het anders doen in een ander bestand?


24 jaar geleden
 
0 +1 -0 -1
Great job man 10x
MrX
MrX
23 jaar geleden
 
0 +1 -0 -1
Ik heb dit:

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
<?php
//database informatie
$dbhost = "localhost";
$dblogin = "jouwlogin";
$dbw8wrd = "jouww8wrd";
$dbnaam = "databasenaam";
//Maak verbinding
mysql_pconnect("$dbhost","$dblogin","$dbw8wrd") && @mysql_select_db("$dbnaam");
$query = mysql_query('SHOW TABLE STATUS') or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
$sql = 'SHOW CREATE TABLE '.$row['Name'].'';
$query2 = mysql_query($sql) or die(mysql_error());
//Toon tabelnaam
echo "<b>Tabelnaam: {$row['Name']} bevat volgende gegevens:</b><br>";
$out = mysql_fetch_assoc($query2);
$sql = 'SELECT * FROM '.$row['Name'];
$out = mysql_query($sql);
$sql_code = '';
while($code = mysql_fetch_array($out,MYSQL_ASSOC))
{

foreach($code as $insert => $value)
{

$sql_code.=$insert ."='".addslashes($value)."',";
//Toon gegevens van de tabel
echo $insert.":&nbsp;".addslashes($value)."<br>";
        }
    }
}

?>


Het werkt goed :D
Maar ik wil nu nog extra gegevens en weet niet hoe ik het moet doen:

$veld = "veldnaam"; //Naam dat je aan het veld op gegeven
$type = "type"; //Type: varchar, int, text, date,...
$waarde = "waarde"; //Een getal dat toewijst hoeveel karakters in het veld mogen
$attributen = "attribute"; //Binary, unsigned, unsigned zerofill
$null = "null"; //NULL, NOT NULL
$standaardwaarde = "waarde"; //Wat er standaard moet ingevuld worden in het veld
$extra = "extra"; //auto_increment
$key = "key"; //Primaire, index, uniek, ---, volledige tekst

Kan iemand mij hierbij helpen?
Ronald
Ronald
23 jaar geleden
 
0 +1 -0 -1
Hoi allen,

Ik gebruik dit script om mijn sqldatabase te back-uppen, en dat werkt prima.
Ik loop echter steeds tegen foutmeldingen aan bij het uitvoeren van de sql-script: de oorzaak is dat mijn sql-database velden bevat die toevallig dezelfde naam hebben als sql gereserveerde woorden (bijv OPTION)

Bij het terugzetten van de back-up struikeld het sql script natuurlijk over deze velden, dat kan ik dus oplossen door die velden tussen ` ` te zetten, maar het zijn zoveel velden... dus ik dacht; zou dat niet in het script aangepast kunnen worden? Even een voorbeeld:

INSERT INTO jos_components SET id='1',name='Banners',link='',menuid='0',parent='0',admin_menu_link='',admin_menu_alt='Banner Management',option='com_banners',ordering='0',admin_menu_img='js/ThemeOffice/component.png',iscore='0',params='';

Wat ik dus wil is:
INSERT INTO jos_components SET `id`='1',`name`='Banners',`link`='',`menuid`='0' etc...

Iemand een idee of en hoe ik de velden tussen `` kan krijgen in het script?

Groet,

Ronald
Niels Beckers
Niels Beckers
22 jaar geleden
 
0 +1 -0 -1
ik krijg steeds timelimit ik heb hem al eens op 120 gezet dan is het nog niet gedaan..
het gaat wel om een omgebouwde criminals dus waarschijnlijk heeft het hier wat mee te maken.?
Michiel Pil
Michiel Pil
22 jaar geleden
 
0 +1 -0 -1
Wat is een backup eigenlijk ?
Wat doet een backup.
Als ze je site verwijderen helpt dit toch niet dan verwijderen ze eerst de backup.
Pepijn van gastel
pepijn van gastel
22 jaar geleden
 
0 +1 -0 -1
Als ik dit script gebruik krijg ik steeds deze fout melding:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'soort1' at line 1

Wat moet ik veranderen?
 
0 +1 -0 -1
Voor mensen die niks snappen van cronjobs, of er te weinig tijd voor hebben:

http://www.webcron.org/
Alex zaanen
alex zaanen
21 jaar geleden
 
0 +1 -0 -1
michiel Pil als je je backup dus laat emailen dan heb je als het goed is een recente backup op een andere pc staan dan je server.

Mits je je email binnen haalt en niet alleen online bekijkt.
Robert-Jan
Robert-Jan
21 jaar geleden
 
0 +1 -0 -1
Ik heb het script gebruikt voor mijn website paarden www.koopeenpaard.nl. Ik zag dat er een website was gegeven voor een cronjob.

Dit is een tip voor jullie op het gebied van cronjobs: http://www.adminschoice.com/docs/crontab.htm

Het script werkt super!
Klaasjan Boven
Klaasjan Boven
21 jaar geleden
 
0 +1 -0 -1
Ik krijg hem in mijn gmail niet als attechment??
Kan dat kloppen?
 bjorri geen
bjorri geen
17 jaar geleden
 
0 +1 -0 -1
Prima script, ik gebruik het al een paar jaar.

Alleen om eenvoudiger iet terug te zetten
$sql_code .= 'INSERT INTO `'.$row['Name'].'` SET ';
in plaats van
$sql_code .= 'INSERT INTO '.$row['Name'].' SET ';

of te wel backtics om de veldnaam, toevallig een veldnaam die ook iets betekend in MySql is hierdoor geen probleem meer.

In plaats van een cronjob kan je natuurlijk gewoon de eerste bezoeker op een dag dit script kunnen laten starten :-)

$query='SELECT `backup` FROM `diversen` WHERE `backup` ORDER BY `backup` DESC LIMIT 0,1';
$result=mysql_query($query) OR die
$record=mysql_fetch_array($result);
$vorige=$record[backup];
if (date('d') !== date('d',$vorige)){
$query='INSERT INTO `diversen` SET `backup`= UNIX_TIMESTAMP()';
$result=mysql_query($query) OR die
/*************** hier de sql backup, */
}enz
Victor Php
Victor Php
17 jaar geleden
 
0 +1 -0 -1
Dit script is oud.
En gebruik géén backticks!
TJVB tvb
TJVB tvb
17 jaar geleden
 
0 +1 -0 -1
Database backup via een los script wat geen gebruik maakt van de functionaliteit van de database is ALTIJD af te raden.
 bjorri geen
bjorri geen
17 jaar geleden
 
0 +1 -0 -1
Binnen een paar uur twee reacties die mij duidelijk maken dat ik op het verkeerde spoor zit.

Maar eh, WAAROM?

Of te wel, reacties van 'niet doen' zonder opgaaf van reden helpen mij niet verder. A.U.B. enige uitleg cq toelichting zou wel prettig zijn.
TJVB tvb
TJVB tvb
17 jaar geleden
 
0 +1 -0 -1
Een gewoon script kan nooit alles tegelijkertijd lezen. Dan kan er iets anders 'tussendoor' komen waardoor je data niet klopt.

Stel je hebt een relate tussen de tabel wielen en de tabel fiets.
Jij maakt een backup en daarbij wordt tabel fiets en daarna de tabel wielen. Terwijl jij dat aan het inlezen bent wordt een nieuwe fiets aangemaakt met wielen. Dan kan het zijn dat jou script wel de nieuwe wielen leest en niet je fiets. Dan heb jij bij het terugzetten van je database dus een probleem omdat je dan wielen zonder fiets hebt.
Dit wordt nog veel lastiger als je getallen aan het veranderen bent (stel je voor je haalt 10 euro van iemands rekening en zet het bij iemand anders op. Als daar tussendoor de backup draait kan die 10 euro in rook zijn opgegaan of juist dubbel in het systeem zitten)

Om backups te maken heb je database programma's zoals mysql_dump voor mysql.
 bjorri geen
bjorri geen
17 jaar geleden
 
0 +1 -0 -1
Bedankt voor je constructieve antwoord TJVB.

Voor het moment maak ik me even geen zorgen, zo intensief wordt mn verenigingssite nou ook weer niet bezocht :-). Wel ga ik me binnenkort eens verder verdiepen in mysql_dump.

Hoop leeswerk zo te zien.


17 jaar geleden
 
0 +1 -0 -1
Maar een database backup maken in phpMyAdmin kan toch al?
Gewoon alle Table exporteren, of via DirectAdmin een backup maken.

MvG,
Stan van Langen
TJVB tvb
TJVB tvb
17 jaar geleden
 
0 +1 -0 -1
Stan van Langen, PHPMyadmin doet hetzelfde als een los script en is daarom ook geen aanrader. Ik dacht dat DirectAdmin wel gebruik maakt van mysql_dump en is dan ook wel nuttig.
- Ariën  -
- Ariën -
17 jaar geleden
 
0 +1 -0 -1
Als je DirectAdmin gebruikt, wat is er mis met het gebruik van hun API?
Johan Droogers
Johan Droogers
17 jaar geleden
 
0 +1 -0 -1
Ik gebruik tegenwoordig views in mijn database. Dit zorgt er echter voor dat het script niet meer wordt uitgevoerd. Ik krijg de volgende foutmelding:
SHOW VIEW command denied to user '*******'@'localhost' for table 'balans'
Op de plaats van de gebruiker heb ik zelf een * gezet.
Hoe zorg ik ervoor dat het script weer gaat werken ?
John de Winkel
John de Winkel
16 jaar geleden
 
0 +1 -0 -1
Ik gebruik dit script om diverse databases te backuppen.
Het vreemde is dat de één wel een attachment verstuurd maar de ander niet. Die heeft alles in de body van de mail staan.
De php files zijn exact gelijk behalve dan de gegevens natuurlijk om de database aan te spreken.

De databases staan op dezelfde server, ze zijn alleen anders in grootte.

Wat doe ik verkeerd?
Bas IJzelendoorn
Bas IJzelendoorn
16 jaar geleden
 
0 +1 -0 -1
Het script is 6 jaar oud. De kans dat dit script op de nieuwere versies van PHP goed en vooral veilig draait is nihil.
 bjorri geen
bjorri geen
16 jaar geleden
 
0 +1 -0 -1
PHP is toch backward compatible? Bij mij draait het, alleen wel bij alle tabel en veldnamen backtics ingevoegd, dat doe ik altijd consequent dus in dit script ook. Bij de vraagsteller doet ie het ook bij de ene setup. Kan je misschien ook aangeven WAAROM het niet meer veilig zou kunnen draaien. Dat je database mogelijk gewijzigd is tijdens het uitvoeren van het script is waar maar dat is een in te schatten risico (bij mij is het risico klein en de gevolgen minimaal bijvoorbeeld).

Als inderdaad, heel zeker weten, alleen de grote van de database verschilt is het mogelijk de maximum tijd dat een script mag draaien of een maximum grote van je mail die in de weg zit. Bestudeer je mail eens of het op zo iets mis gaat zou ik zeggen.
Wouter J
Wouter J
16 jaar geleden
 
0 +1 -0 -1
Bjorri geen:
alleen wel bij alle tabel en veldnamen backtics ingevoegd, dat doe ik altijd consequent dus in dit script ook.

NOOIT backtricks in SQL gebruiken. Backtricks zijn slecht, gebruik gewoon geen gereserveerde tabel/veld namen.

Bjorri geen:
Kan je misschien ook aangeven WAAROM het niet meer veilig zou kunnen draaien.

Oké:
- geen goede foutafhandeling
- SQL injection
- Mail injection
- Geen juiste mail headers
- Gebruik van verkeerde functie addslashes
- Gebruik van * in SQL.
- Verkeerde INSERT query (niet de veldnamen benoemd)
- SQL niet met hoofdletters
 bjorri geen
bjorri geen
16 jaar geleden
 
0 +1 -0 -1
Dat ik een aantal jaar terug begon met MySQL werd ik er juist op geattendeerd om altijd bacticks te gebruiken, mocht er in de toekomst een extra functie komen met een naam gelijk aan een bestaand veld dan heb je een veel groter probleem. Het enige nadeel van backtics wat ik kan vinden is dat daarmee een script niet compatible is met M$SQL, so what?

Die addslashes zal ik inderdaad vervangen voor mysql_real_escape_string. Foutafhandeling en injection maak ik me niet zo druk om, het script heeft geen enkele interactie met gebruikers.
Mail komt dagelijks prima aan, ik ga waarschijnlijk niet snappen wat er fout aan is.
De * komt nog altijd in elke tutorial voor, waarom mag dat niet meer gebruikt worden?
Die INSERT kan ik op het eerste gezicht geen fout in ontdekken maar daar zal ik eens induiken.
Hoofdlettergebruik is afaik een best practice, geen technische voorwaarde.

Blijft staan dat het script als vier jaar dagelijks draait op mn website en nog nooit een fout heeft opgeleverd. Maar het is inderdaad een niet ongelooflijk druk bezochte site waarbij een storing wat ongemak zou opleveren maar geen onoverkomelijke problemen.
Wouter J
Wouter J
16 jaar geleden
 
0 +1 -0 -1
bjorri:
Die INSERT kan ik op het eerste gezicht geen fout in ontdekken maar daar zal ik eens induiken.

Een normale INSERT query ziet er zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO tabel(veld1, veld2, veld3) VALUES ('veld1Value', 'veld2Value', 'veld3Value')
 bjorri geen
bjorri geen
16 jaar geleden
 
0 +1 -0 -1
Er zijn wel wat meer mogelijkheden hoor:
http://dev.mysql.com/doc/refman/5.5/en/insert.html
Ceasar Feijen
Ceasar Feijen
16 jaar geleden
 
0 +1 -0 -1
Heeft niks met php te maken maar ik gebruik Site vault
http://www.site-vault.com/
Hiermee maak ik een backup van de mysql van alle klanten 1x per dag ongeacht de grote.
Kost wel wat maar oh hier ben ik blij mee :-)
Johan Droogers
Johan Droogers
16 jaar geleden
 
0 +1 -0 -1
Sinds kort maak ik gebruik van http://www.phpmybackuppro.net. Werkt perfect en is gratis!
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
John de Winkel
John de Winkel
16 jaar geleden
 
0 +1 -0 -1
Ik heb site-vault geprobeerd en phpmybackuppro en ik ga de laatste denk ik gebruiken.

Bedankt voor alle hulp.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. mysql-backup

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.