DB: automatisches Backup

@Lenox: Ja rein theoretisch sollte das möglich sein. Das erfordert aber nicht nur sehr sehr gute PHP- und MySQL-Kenntnisse, sondern auch Kenntnisse über verschiedene RFCs. Du kannst ein Datenbank-BackUp mit einer CSV-Datei machen. Dieses versendest du dann in einer Mail mit festem Betreff an einen fixen Email-Accout. Von diesem Accont fragst du die Mails ab und suchst die letzte Angekommene Mail mit diesem speziellen Betreff. Die Angehängte Datei speicherst du nun auf dem anderen Webserver. Sollte eigentlich so gehen. Das Backup kannst du nun von diesem Server jeder zeit wieder herunterladen und die Daten aus der CSV-Datei in deine Datenbank eintragen.

MfG, Andy
 
@Lenox: Ja rein theoretisch sollte das möglich sein. Das erfordert aber nicht nur sehr sehr gute PHP- und MySQL-Kenntnisse, sondern auch Kenntnisse über verschiedene RFCs. Du kannst ein Datenbank-BackUp mit einer CSV-Datei machen. Dieses versendest du dann in einer Mail mit festem Betreff an einen fixen Email-Accout. Von diesem Accont fragst du die Mails ab und suchst die letzte Angekommene Mail mit diesem speziellen Betreff. Die Angehängte Datei speicherst du nun auf dem anderen Webserver. Sollte eigentlich so gehen. Das Backup kannst du nun von diesem Server jeder zeit wieder herunterladen und die Daten aus der CSV-Datei in deine Datenbank eintragen.

MfG, Andy

Hmm... ich glaub du hast nicht ganz verstanden ^^

Ich möchte das mir das Backup per Mail zugesand wird...
Zugleich ein Eintrag in die Datenbank ist aber lediglich kein muss ^^
Was aber ein muss ist das er mir die Backups aufm Server speichert ^^

Ich habs schon mit:

PHP:
<?php
@system("mysqldump -uroot -p1234 -hlocalhost testtabelle | sql > backup/backup_".date("d-m-Y_H:i", time()).".sql");
?>

allerdings macht er es irgendwie nicht k.a. wieso....

Versuch es schon mit XAMPP aber vergeblich :(

Dieses Script hier:

PHP:
<?php 

// error_reporting(0);

// ### (c) by Protecus.de ########
// ### EINSTELLUNGEN #############
// ###############################

   $user = 'root'; // Name
   $pass = ''; // Passwort
   $database = 'test'; // zu sichernde Datenbank
   $path = './backup/'; // Backup Ordner
   $number_of_files = '5'; // mehr als x Dateien löschen (Autodelete)

// ###############################
// Updates: http://board.protecus.de/t9581.htm

// checke Backupordnergrösse
function dirsize($dir){
    $dirsize=0;
$handle=opendir ($dir);
while (false !== ($file = readdir ($handle))) {
    $dirsize+=filesize($dir.$file);
}
closedir($handle); 
return $dirsize;
}

// Starte Output
echo '<html>
<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<title>MySQL Backup</title>
<style type=\'text/css\'>
<!--
    h1 { font-family: verdana, arial;}
    body,p,td,a { font-family: verdana, arial; font-size: 8pt;}
//-->
</style>
</head>
<body>

<h1>MySQL Backup</h1>
<b><u>Konfiguration:</u></b>
<br /><b>Sicherung Datenbank:</b> '. $database .'<br />
<b>Auto-Löschen aktiviert:</b> +'.$number_of_files.' Dateien<br />
<b>GZip-Komprimierung:</b> aktiv<br />
<b>Backups gesamt:</b> '.round(dirsize("$path")/(1024*1024),2).' MB<br /><br />
<p><b>Backup wird ausgeführt...</b><br /><br /><span style="color:darkblue; font-weight:bold" id="dspan">|</span></p>
    <script type="text/javascript"><!--
    function js_dots()
    {
        dspan.innerText = dspan.innerText + "|";
        jstimer = setTimeout("js_dots();", 200);
    }
    if (document.all)
    {
        js_dots();
    }
    //--></script>';


// Backupverzeichnis erstellen, falls noch nicht existient!
if (!is_dir($path)) mkdir($path, 0777);
$dh = opendir($path);
while (false !== ($filename = readdir($dh)))
{
    if ($filename != "." && $filename != "..") $files_unlink[] = $filename;
}

@rsort($files_unlink);

    if (sizeof($files_unlink) >= $number_of_files)
    {
        for($n=sizeof($files_unlink)-1; $n>=$number_of_files; $n--)
       { 
        unlink($path.$files_unlink[$n]); 
       }
    }

// Backup erstellen

$datei = date("d\.m\.Y\_H",time())."_Uhr_".date("i",time()); // Dateiname aus Datum und Uhrzeit bilden
$datei .= ".gz";
if (file_exists($datei)) unlink($datei);

$path = str_replace(".", "", $path);

system("/usr/bin/mysqldump -u$user -p$pass -h localhost $database | gzip > ".dirname(__FILE__)."$path/$datei", $fp); 
if ($fp==0) $meldung = "Backup erfolgreich!"; else $meldung = "Es ist ein Fehler aufgetreten!"; 


// und Meldung, dass fertig!
echo '
<script type="text/javascript"><!--
    if (document.all)
    {
        clearTimeout(jstimer);
    }
    //--></script>
<p>'.$meldung.'</p>
<p><blink><b>Fertig!</b></blink></p>
</html>
</head>';

?>

hab ich auch schon angepasst in dem ich:

statt
Code:
system("/usr/bin/mysqldump -u$user -p$pass -h localhost $database | gzip > ".dirname(__FILE__)."$path/$datei", $fp);

in
Code:
system("mysqldump -u$user -p$pass -h localhost $database | gzip > ".dirname(__FILE__)."$path/$datei", $fp);

Aber ständig bekomm ich die meldung das ein Fehler aufgetreten ist

Code:
if ($fp==0) $meldung = "Backup erfolgreich!"; else $meldung = "Es ist ein Fehler aufgetreten!";

Egal wie ich es mache es tretet immer der Else fall ein. WARUM?

#########################################################################

Nun möchte ich es allerdings rein als .sql abhacken statt gzip da ich mir grad nicht im klaren bin ob bei mir gzip Aktiv ist da ich grad nicht bei mir selbst am PC sitze

es mit der Mail zu versenden ist das wenigere übel mir gehts dabei darum dass das Script funktioniert

Hoffe es wird geholfen ;)

PS: lass es dann per Cronjob später dann die datei in Zeit abständen aufrufen

Nur möchte ich dass das Script erstmal mit XAMPP funktioniert...
 
system() und exec() funktionieren nur unter Linux. Und ja ich habe dich verstanden. ich habe dir auch die Möglichkeiten dir ein BackUp per Mail zu schicken bzw. dieses auf deinem oder einem anderen Server zu speichern dargelegt.
MfG, Andy
 
Ist das nicht eigentlich egal für welches System?

Ich mein das script welches ich habe sieht meiner meinung nach gut aus oder sehe ich das falsch?

Normal sollte es doch mit XAMPP keine Probleme geben
 
Ich bin mir nicht sicher, ob es egal ist. Es gibt sehr viele Funktionen (meistens Schnick-Schnack), die nur von einem Betriebssystem unterstützt werden. Dazu zählen, meiner Meinung nach, auf der Seite von Linux exec() und system() und auf der Seite von Windoof imagegrabscreen(). Dazu kommen vorallem auf der Windoof-Seite noch viele andere Funktionen. Nachlesen kann man soetwas übrigens auch im PHP-Manual. Im übrigen ist das, was du da als Befehl übermittelst ein Linux-Befehl, der selbst wenn diese Funktion unter Windows funktioniert, nicht interpretiert werden kann.
MfG, Andy
 
Zurück