verzeichnis- bzw. ordner-backup ~ cronjob

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • verzeichnis- bzw. ordner-backup ~ cronjob

    Hallo allerseits,

    vorab möcht ich noch erwähnen, dass ich seit zwei Tagen über Google und
    über die Suche der jeweiligen "PHP-Foren" schon recht viel gefunden habe,
    aber leider hat mir das meiste nicht weitergeholfen obwohl ich - wie ich annehme -
    ein relativ kleines Problem habe...

    Ich wollte Folgendes über cronjobs auf einem all-inkl webspace "laufen
    lassen":
    1 - mySQL-backup per gzip in ein bestimmtes Verzeichnis archivieren wo
    max. 10 Kopien liegen sollen
    2 - Verzeichnis-backup per tar gzip oder zip in ein bestimmtes Verzeichnis
    archivieren wo max. 3 Kopien liegen sollen
    3 - server-seitiges FTP-upload eines bestimmten Verzeichnises(.gz)



    Bisher habe ich nur für das mySQL-Backup ne Lösung:
    PHP-Code:
    // mySQL-Backup OHNE Dateibeschränkung (AutoDelete)
    exec("mysqldump -u USER -p PASSWORD --add-drop-table DATABASE >dump " .date(dmY) . ".sql"); 
    PHP-Code:
    // mySQL-Backup MIT Dateibeschränkung (AutoDelete)

    // ###############################
    // ### (c) by Protecus.de ########
    // ###############################
    // Updates: [url]http://board.protecus.de/showtopic.php?threadid=9581[/url]

       
    $user 'xxx'// Name
       
    $pass 'yyy'// Passwort
       
    $database 'zzz'// zu sichernde Datenbank
       
    $path '/www/absoluter_zielpfad/'// Backup Ordner
       
    $number_of_files '10'// wenn mehr als x Dateien, dann löschen (Autodelete)

    // 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
    $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("mysqldump -u $user -p $pass -h localhost $database | gzip > ".dirname(__FILE__)."$path/$datei", $fp);
    // exec("mysqldump -u $user -p $pass -h localhost $database | gzip > ".dirname(__FILE__)."$path/$datei", $fp);
    exec("mysqldump -a -c -q -Q -f --add-drop-table --allow-keywords --user=$user --password=$pass -h localhost $database | gzip -c > $path/"."$database"."_$(date \"+%d.%m.%y(%H-%M)\").sql.gz"$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>'

    Wenn mir jetzt jemand bei 2 und/oder 3 helfen könnt, würde ich unmengen an Zeit einsparen und meine nerven schonen

    Ich hoffe auf Antwort
    MfG n_joy
    Zuletzt geändert von n_joy; 18.11.2004, 13:50.

  • #2
    server-seitiges FTP-upload eines bestimmten Verzeichnises(.gz)
    auf einen anderen server? schau mal im handbuch nach:
    ftp_connect
    ftp_login
    ftp_put
    über cronjobs
    da böten sich bei punkt 1 und zwei doch shell-scripte an?

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      erstma danke für die schnelle Antwort ..

      ..aber, da gibt es aber noch was zu berücksichtigen
      .. und zwar habe ich mit PHP schon meine mühe(setze mich damit erst seit kurzem auseinander)
      ...weiss nicht wie ich da noch was mit "shell-scripten" anfangen soll/"kann(?)"
      ... "kann(?)": weil ich mir nicht mal sicher bin ob man bei all-inkl überhaupt andere scripte als
      php für cronjobs verwenden kann
      .... denn: folgendes steht bei der cronjob-einrichtung @ all-inkl
      Bitte geben Sie hier die URL des Scriptes ein, welches über den CronJob aufgerufen werden soll.
      Die Eingabe muß wie folgt aussehen: www.domain.de/pfad/script.php


      MfG n_joy

      Kommentar


      • #4
        ich bin jetzt schon um einiges weiter, jedoch funktioniert's imma noch nicht :-/

        also Folgendes:
        - das mit dem backupordner und max 10 files = funktioniert !
        - mySQL-dump erstellen = funktioniert nicht ! :-/
        - ftp-upload = dementsprechend auch nicht

        PHP-Code:
        <?php 

        // error_reporting(0);

        // ###############################
        // ### (c) by Protecus.de ########
        // ###############################
        // Updates: [url]http://board.protecus.de/showtopic.php?threadid=9581[/url]
           
        $date date("_Y_m_d(H-i)");
        // mySQL-daten   
           
        $user 'sql_user'// Name
           
        $pass 'sql_pass'// Passwort
           
        $database 'sql_databasename'// zu sichernde Datenbank
           
        $path '/...path/backup/'// Backup Ordner - kompletter pfad mit / am ende
           
        $file $database.$date.".sql.gz"// wird gespeichert als
           
        $number_of_files '10'// mehr als x Dateien löschen (Autodelete)
        // FTP-daten   
           
        $ftp_host 'meinftp-server.de';
           
        $ftp_port '21';
           
        $ftp_benutzer 'FTPuser';
           
        $ftp_passwort 'FTPpass';
           
        $ftp_dateiname $file ;
           
        $ftp_quelldatei $path.$file ;   

        // 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
        $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("_Y_m_d(H-i)"); // Dateiname aus Datum und Uhrzeit bilden
        $datei .= ".gz";
        if (
        file_exists($datei)) unlink($datei);

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

        $fp exec("mysqldump -a -c -q -Q -f --add-drop-table --allow-keywords --user=$user --password=$pass -h localhost $database | gzip -c > $path"."$file"); 
        if (
        $fp==0$meldung "mySQL Backup: OK"; else $meldung "mySQL Backup: ERROR"

        // $hostip = gethostbyname($ftp_host);
        if($ftp ftp_connect ($ftp_host,$ftp_port)){
            echo 
        ftp_login($ftp,$ftp_benutzer$ftp_passwort) ? 'ok':'no way';
            
        $upload ftp_put ($ftp"$ftp_dateiname""$ftp_quelldatei"FTP_BINARY);
        }
        if (
        $upload==0$meldung3 "FTP Upload: OK"; else $meldung3 "FTP Upload: ERROR"
        if (
        $ftp==0$meldung2 "FTP Connection: ERROR"; else $meldung2 "FTP Connection: OK";

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

        ?>
        so langsam bin ich echt ratlos, da das script ohne fehler durchläuft.. und bei den meldungen jeweils "ok's" rauskommen - aber es funktioniert nicht
        (auf dem FTP-server wird connectet, aber nichts gesendet, weil die file ja eh fehlt)

        ich vermute es liegt an
        PHP-Code:
        $fp exec("mysqldump -a -c -q -Q -f --add-drop-table --allow-keywords --user=$user --password=$pass -h localhost $database | gzip -c > $path"."$file"); 
        aber er zeigt mir keine fehlermeldung, also müsste das ja irgendwo richtig sein ?

        ~ edit ~

        ich kann das problem jetzt weiter eingrenzen: und zwar funktioniert alles wenn ich den pfad und dateinamen direkt eingebe und nicht über variablen übergebe... also, was stimmt mit meiner variablen-übergabe nicht ?
        Zuletzt geändert von n_joy; 17.11.2004, 16:58.

        Kommentar


        • #5
          moin,

          also ich scheine irgendwas falsch zu machen, oder warum will mir keiner weiterhelfen ?

          ich habe den fehler jetzt ausgemacht(hoffe ich doch), weiss aber nicht wie ich diesen beheben kann

          also die variable "$mysql_quelle" wird richtig ausgegeben, aber der exec nimmt die nicht an... warum ?!

          hier ein kleines beispiel
          PHP-Code:
             $date date("_Y_m_d(H-i)");
          // mySQL-daten   
             
          $user 'mysql_user'// Name
             
          $pass 'mysql_pass'// Passwort
             
          $database 'mysql_databasename'// zu sichernde Datenbank
             
          $path '/absoluter_pfad/backup/'// Backup Ordner - kompletter pfad mit / am ende
             
          $file $database.$date.".sql.gz"// name der zu speichernden datei
             
          $mysql_quelle $path.$file ;
             
             
          // $mysql_quelle = str_replace("", "", $mysql_quelle);   <- "mit" funktioniert's auch nicht
             
             
          $fp exec("mysqldump -a -c -q -Q -f --add-drop-table --allow-keywords --user=$user --password=$pass -h localhost $database | gzip -c > $mysql_quelle");
             if (
          $fp==0$meldung "mySQL Backup: ERROR"; else $meldung "mySQL Backup: OK";
             echo 
          '
             meldung: '
          .$meldung.'<br>
             mysql_quelle: '
          .$mysql_quelle.'<br>
             ' 

          ausgegeben wird:
          meldung: mySQL Backup: ERROR
          mysql_quelle: /www/htdocs/xxxxxx/backup/databases/yyyyyy_2004_11_18(11-00).sql.gz

          mySQL-backup wird nicht erstellt

          MfG n_joy
          Zuletzt geändert von n_joy; 18.11.2004, 11:16.

          Kommentar


          • #6
            vieleicht liegt es am fehlenden parameter -p?
            gruss
            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              ich habs !!! (man musste *nur* mit \" ..... \" ergänzen)
              $fp = exec("mysqldump -a -c -q -Q -f --add-drop-table --allow-keywords --user=$user --password=$pass -h localhost $database | gzip -c > [COLOR=red]\"[/COLOR] $mysql_quelle[COLOR=red]\"[/COLOR] ");
              PHP-Code:
              $date date("_Y_m_d(H-i)");
              // mySQL-daten   
                 
              $user 'mysql_user'// Name
                 
              $pass 'mysql_pass'// Passwort
                 
              $database 'mysql_databasename'// zu sichernde Datenbank
                 
              $path '/absoluter_pfad/backup/'// Backup Ordner - kompletter pfad mit / am ende
                 
              $file $database.$date.".sql.gz"// name der zu speichernden datei
                 
              $mysql_quelle $path.$file ;
                 
                 
              // $mysql_quelle = str_replace("", "", $mysql_quelle);   <- "mit" funktioniert's auch nicht
                 
                 
              $fp exec("mysqldump -a -c -q -Q -f --add-drop-table --allow-keywords --user=$user --password=$pass -h localhost $database | gzip -c > \"$mysql_quelle\"");
                 if (
              $fp==0$meldung "mySQL Backup: ERROR"; else $meldung "mySQL Backup: OK";
                 echo 
              '
                 meldung: '
              .$meldung.'<br>
                 mysql_quelle: '
              .$mysql_quelle.'<br>
                 ' 

              Jedoch bin ich nicht ganz fertig, was mich noch stört ist, dass das script auf den FTP-upload wartet und somit nen Timeout bekommt
              Internal Server Error
              The server encountered an internal error or misconfiguration and was unable to complete your request.
              hier code vom FTP-teil
              PHP-Code:
              // FTP
              if($ftp ftp_connect ($ftp_host,$ftp_port)){
                  echo 
              ftp_login($ftp,$ftp_benutzer$ftp_passwort) ? 'ok':'no way';
                  
              $upload ftp_put ($ftp"$ftp_ziel""$ftp_quelle"FTP_BINARY);
              }
              if (
              $upload==0$meldung3 "FTP Upload: OK"; else $meldung3 "FTP Upload: ERROR"
              if (
              $ftp==0$meldung2 "FTP Connection: ERROR"; else $meldung2 "FTP Connection: OK"
              hat da jemand ne lösung für ? ^^

              MfG n_joy

              Kommentar

              Lädt...
              X