Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische SQL Sicherung

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

    Automatische SQL Sicherung

    Hallo Community,

    ich nutze seit Jahren von Nils Dornblut ein Script, welches meine SQL-Datenbank jede Nacht einmal speichert. Leider scheint das Script nicht mehr zu funktionieren. Wahrscheinlich lief es mit einer alten DB-Version.
    Hat jemand zur automatisierten Sicherung einen Tipp, mit welchem Script ich das weiterhin realisieren kann?

    Viele Grüße

    Armin

    #2
    Die aktuelle Version des Skripts verrichtet bei mir durchaus noch ihren Dienst. Ich vermute, Du hast die Vorgängerversion.

    Leider scheint Nils' Website www.dornblut.de nicht mehr zu existieren, von der man das Skript beziehen konnte. Vielleicht kann Nils es Dir zukommen lassen. Ich habe die ZIP-Datei auch noch, würde aber Nils' Okay abwarten, bevor ich sie hier anhänge.

    Gruß
    Jan
    Two hours of trial and error can save ten minutes of manual reading.

    Kommentar


      #3
      Ich nutze folgendes:

      PHP-Code:
      <?php

      ini_set
      ('display_errors'1);
      ini_set('display_startup_errors'1);
      error_reporting(E_ALL);

      //Key => Value Array mit Datenbankname/Benutzer & Passwort

      $db=array(
          array(
      "dbuser" => "<datenbankbenutzer-1>""password" => "<passwort-1>"),
          array(
      "dbuser" => "<datenbankbenutzer-2>""password" => "<passwort-2>")
      );

      foreach( 
      $db as $x => $value ){

          
      $dbhost '<adresse des DB-Servers>'//localhost bspw.
          
      $dbuser $value['dbuser'];
          
      $dbpassword $value['password'];
          
      $dbname $value['dbuser'];

          
      $dumpfile date("Y-m-d_H-i-s") . ".sql";

          
      //Prüfen, ob für die Datenbank ein eigenes Verzeichnis angelegt ist, absoluten Pfad nutzen
          //Hier würde beim ersten Aufruf des Skripts zwei Verzeichnisse angelegt, da zwei Datenbanken gesichert werden.
          
      if (!file_exists("/<verzeichnis-wo-sicherungen-gespeichert-werden-sollen>/" $dbname)) {
              
      mkdir("/<verzeichnis-wo-sicherungen-gespeichert-werden-sollen>/" $dbname0777true);
          }

          echo 
      "Start dump\n";
          
      exec("mysqldump --user='$dbuser' --password='$dbpassword' --host='$dbhost$dbname >  /<pfad-zu-den-backups>/" $dbname "/" $dumpfile);

      }
      Es wird 1x täglich über einen Cron-Job ausgeführt.

      Gruß, Louis
      Zuletzt geändert von louis12356; 13.08.2019, 10:11.

      Kommentar


        #4
        Zitat von Enigma Beitrag anzeigen
        Die aktuelle Version des Skripts verrichtet bei mir durchaus noch ihren Dienst. Ich vermute, Du hast die Vorgängerversion.
        Das würde ich auch vermuten.

        Leider scheint Nils' Website www.dornblut.de nicht mehr zu existieren, von der man das Skript beziehen konnte. Vielleicht kann Nils es Dir zukommen lassen. Ich habe die ZIP-Datei auch noch, würde aber Nils' Okay abwarten, bevor ich sie hier anhänge.
        Ich schaue mal die Tage nach der letzten Version die ich da produziert habe. Ich werde die dann hier anhängen. Diese war auch lauffähig mit allen neuen PHP-Versionen. Wenn das nicht schnell genug geht, kannst Du Jan die letzte Dir bekannte Version hier auch direkt anhängen.

        Die Webseite von mir wurde im Rahmen DSGVO vom Netz genommen.

        Viele Grüße

        Nils
        Blog - Facebook - Twitter
        Communitybetreiber: domainfactory GmbH
        Impressum / Pflichtangaben

        Kommentar


          #5
          Okay, ich warte dann mal ab, ob Armin drängelt.

          Gruß
          Jan
          Two hours of trial and error can save ten minutes of manual reading.

          Kommentar


            #6
            Zitat von Enigma Beitrag anzeigen
            Okay, ich warte dann mal ab, ob Armin drängelt.
            Drängelt bei mir sonst auch noch einmal

            Viele Grüße

            Nils

            Blog - Facebook - Twitter
            Communitybetreiber: domainfactory GmbH
            Impressum / Pflichtangaben

            Kommentar


              #7
              Moin,
              ich hatte im alten Forum schon mal mein Bash Script gepostet welche tägliche Sicherungen erstellt. Diese werden eine bestimmte Zeit vorgehalten und dann gelöscht. Dazu gibt es wöchentliche und monatliche Backups, die auch entsprechend der vorgaben gelöscht werden.

              Code:
              #!/bin/bash
              # Nico Renken
              # 2017
              # Datenbanken
              declare -a hosts=("127.0.0.3" "127.0.0.3" )
              declare -a dbs=("db123456_1" "db123456_2" )
              declare -a users=("db123456_1" "db123456_2" )
              declare -a pass=("p4ssw0rd_1" "p4ssw0rd_2" )
              # Verzeichnis zum Sichern
              Backupdir="/kunden/123456_12345/dbBackups"
              # Taegliche Sicherungen nach X Tagen loeschen
              DeleteOlderThanDays=10
              # Wochentliche Sicherungen nach X Tagen loeschen
              WeeklyDeleteOlderThanDays=60
              # Monatliche Sicherungen nach X Tagen loeschen
              MonthlyDeleteOlderThanDays=365
              DeleteMask=db*.sql.gz
              ##################################################################
              current_month_day=`date +"%d"`
              current_week_day=`date +"%u"`
              ##################################################################
              ############################ Sichern #############################
              ##################################################################
              typeset -i i=0 max=${#hosts[*]}
              while (( i < max ))
              do
                 echo "Sicherung: ${hosts[$i]} DB: ${dbs[$i]}"
                 FILE=${Backupdir}/${dbs[$i]}.`date +"%Y%m%d"`.sql
                 ## Falls vorhanden, dateileichen l�schen
                 rm ${FILE}  2> /dev/null
                 rm ${FILE}.gz  2> /dev/null
                 /usr/bin/mysqldump ${dbs[$i]} --routines --quick --host=${hosts[$i]} --user=${users[$i]} --password=${pass[$i]} > ${FILE}
                 gzip ${FILE}
                 echo "${dbs[$i]} gesichert"
                 i=i+1
                 # monatliches Backup immer am 1.
                 if [ "${current_month_day}" -eq 1 ] ; then
                    cp ${FILE}.gz ${Backupdir}/monthly
                 fi
                 # Sonntags das Weekly Backup
                 if [ "${current_week_day}" -eq 7 ] ; then
                    cp ${FILE}.gz ${Backupdir}/weekly
                 fi
              done
              
              ##################################################################
              #################### Alte Sicherungen loeschen ###################
              ##################################################################
              find ${Backupdir} -maxdepth 1 -mtime +${DeleteOlderThanDays} -iname ${DeleteMask} -delete
              find ${Backupdir}/weekly -maxdepth 1 -mtime +${WeeklyDeleteOlderThanDays} -iname ${DeleteMask} -delete
              find ${Backupdir}/monthly -maxdepth 1 -mtime +${MonthlyDeleteOlderThanDays} -iname ${DeleteMask} -delete
              Im Kopf die Datenbanken und Zugangsdaten anpassen.
              Ordnerstruktur erstellen:
              z.B.
              /kunden/123456_12345/dbBackups
              /kunden/123456_12345/dbBackups/weekly
              /kunden/123456_12345/dbBackups/monthly

              Script hochladen (z.B. als dbbackup.sh), ausführbar machen und Cronjob anlegen.

              Läuft bei mir seit Jahren sehr erfolgreich.

              MfG

              Kommentar


                #8
                Zitat von Nils Dornblut Beitrag anzeigen
                Das würde ich auch vermuten.

                Ich schaue mal die Tage nach der letzten Version die ich da produziert habe. Ich werde die dann hier anhängen. Diese war auch lauffähig mit allen neuen PHP-Versionen. Wenn das nicht schnell genug geht, kannst Du Jan die letzte Dir bekannte Version hier auch direkt anhängen.

                Die Webseite von mir wurde im Rahmen DSGVO vom Netz genommen.

                Viele Grüße

                Nils
                Hallo Nils... Ich war der Meinung, ich hätte deine "aktuellste" Version im Umlauf: AutoSQLBackup 2.0.1 © Nils Dornblut 2001-2004
                Die arbeitet unter PHP 5.2 NOCH tadellos - aber leider nicht in höheren Versionen!

                Hast du da was aktuelleres? Habe selten ein Script erlebt, dass 15 Jahre störungsfrei genau das macht, was man braucht!

                Danke fürs Feedback
                Gruss Rolf

                Kommentar


                  #9
                  Da es sich doch etwas zieht, hänge ich mal wie angekündigt die neueste Version an, die mir vorliegt. Wenn Nils noch was Neueres in petto hat, kann er das ja nachschieben.

                  Gruß
                  Jan
                  Angehängte Dateien
                  Two hours of trial and error can save ten minutes of manual reading.

                  Kommentar


                    #10
                    Zitat von Enigma Beitrag anzeigen
                    Da es sich doch etwas zieht, hänge ich mal wie angekündigt die neueste Version an, die mir vorliegt. Wenn Nils noch was Neueres in petto hat, kann er das ja nachschieben.

                    Gruß
                    Jan
                    Vielen Dank Jan - die Version scheint zu funktionieren unter PHP 7.2 & 7.3 - habs auf die Schnelle mal eingerichtet.
                    Wirft allerdings den Hinweis: Deprecated: The each() function is deprecated. in diversen Files - werd ich mir bei Gelegenheit mal anschauen... beeinträchtig die Funktion nicht im Moment...

                    Gruss Rolf

                    Kommentar


                      #11
                      Zitat von wsp Beitrag anzeigen
                      Wirft allerdings den Hinweis: Deprecated: The each() function is deprecated.
                      Ich habe gerade keine Zeit, in den Quellcode zu schauen. In den meisten Fällen dürfte das in Konstrukten wie

                      PHP-Code:
                      while (list($key$value) = each($array)) {
                          
                      // Do something with $key and $value


                      auftauchen. Das lässt sich problemlos durch

                      PHP-Code:
                      foreach ($array as $key => $value) {
                          
                      // Do something with $key and $value


                      ersetzen. Aber Vorsicht, auch andere Verwendungen sind möglich!

                      Gruß
                      Jan
                      Zuletzt geändert von Enigma; 02.10.2019, 00:15.
                      Two hours of trial and error can save ten minutes of manual reading.

                      Kommentar


                        #12
                        Zitat von Enigma Beitrag anzeigen
                        Da es sich doch etwas zieht, hänge ich mal wie angekündigt die neueste Version an, die mir vorliegt. Wenn Nils noch was Neueres in petto hat, kann er das ja nachschieben.
                        Danke, ich prüfe das die Woche. Man möge sich sonst öffentlich beschweren, wenn ich die Zeitlinie reiße

                        Auch die Geschichte mit each() korrigiere und teste ich dann.

                        Viele Grüße

                        Nils

                        Blog - Facebook - Twitter
                        Communitybetreiber: domainfactory GmbH
                        Impressum / Pflichtangaben

                        Kommentar

                        Lädt...
                        X