Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySQL backup einspielen funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • [Erledigt] MySQL backup einspielen funktioniert nicht

    Hallo Zusammen

    Ich habe eine kleine Frage bei der ich ein wenig ratlos bin. Wenn ich Backup meiner DB mache ist das kein Problem. Wenn ich dieses dann einspiele funktionieren die meisten Tabellen auch bis auf eine die geht da kommt die Meldung "Invalid default value for 'changdate'"
    Die Struktur sieht folgendermassen aus:
    Code:
    # ----------------------------------------------------------
    #
    # structur for Table 'detail'
    #
    CREATE TABLE detail (
        id int(11) NOT NULL auto_increment,
        categoryID int(30) DEFAULT '12' NOT NULL,
        producerID int(11) DEFAULT '45' NOT NULL,
        typeID int(11) DEFAULT '207' NOT NULL,
        buildingID varchar(10) DEFAULT '17' NOT NULL,
        room varchar(10) NOT NULL,
        invnr varchar(6) NOT NULL,
        serialnr varchar(50) NOT NULL,
        esc varchar(50) NOT NULL,
        mac varchar(20) NOT NULL,
        ip varchar(20) NOT NULL,
        dn varchar(50) NOT NULL,
        pd varchar(15) NOT NULL,
        vendorID int(11) DEFAULT '3' NOT NULL,
        price varchar(10) NOT NULL,
        comment text NOT NULL,
        statusID varchar(20) DEFAULT '5' NOT NULL,
        active tinyint(1) DEFAULT '0' NOT NULL,
        modify char(10),
        changdate timestamp DEFAULT 'CURRENT_TIMESTAMP' NOT NULL on update CURRENT_TIMESTAMP,
        changedby char(10),
      PRIMARY KEY (id)
    );
    Kann mir jemand sagen wie ich diese Problem umgehen kann?

    Das backup mache ich folgender massen:
    PHP-Code:
    <?php
        
    //Session starten
        
    session_start();
        
    //Sprachdatei einbinden
        
    include("language.php");
        
    //Sprache speichern
        
    $lang $_SESSION['logon']['lang'];
        
        
    //POST Variabeln speichern
        
    $action $_POST['action'];
        
        if(
    $action == "create"){
            @
    set_time_limit(0);
            
    //Verbindung zur Datenbank
            
    $verbindung mysql_connect("localhost","root","") or die("Username/Passwort falsch");

            
    // MySQL Datenbanken
            
    $dbname = array();
            
    $dbname[]= "hwinv";

            
    // 0: Normale Datei
            // 1: GZip-Datei
            
    $compression 0;

            
    //Falls Gzip nicht vorhanden, kein Gzip
            //if(!extension_loaded("zlib"))
            //   $compression = 0;

            // Pfad zur aktuellen Datei
            
    $path ereg_replace ("\\\\","/",__FILE__);
            
    $path dirname ($path);
            
    $path trim($path);

            
    // Pfad zum Backup
            
    $path .= "/backup/";

            
    //Speicherart
            //0: Nur Server speichern
            //1: Zusätzlich per Email versenden
            
    $send 0;

            
    //Email-Adresse f&uuml;r Backup
            
    $email "email@adresse";


            
    //Dateityp
            
    if ($compression==1$filetype "sql.gz";
            else 
    $filetype "sql";

            
    //Dateieigenschaften
            
    $cur_time=date("d.m.Y H:i");
            
    $cur_date=date("Y-m-d");

            
    //Pfade zu den neuen Backup-Dateien (fur den Mailversand)
            //__Nicht verändern___
            
    $backup_pfad = array();





            
    //Erstelle Struktur von Datenbank
            
    function get_def($dbname$table) {
                global 
    $verbindung;
                
    $def "";

                
    $def .= "CREATE TABLE $table (\n";
                
    $result mysql_db_query($dbname"SHOW FIELDS FROM $table",$verbindung);
                while(
    $row mysql_fetch_array($result)) {
                    
    $def .= "    $row[Field] $row[Type]";
                    if (
    $row["Default"] != ""$def .= " DEFAULT '$row[Default]'";
                    if (
    $row["Null"] != "YES"$def .= " NOT NULL";
                    if (
    $row["Extra"] != ""$def .= $row[Extra]";
                    
    $def .= ",\n";
                }
                
    $def ereg_replace(",\n$",""$def);
                
    $result mysql_db_query($dbname"SHOW KEYS FROM $table",$verbindung);
                while(
    $row mysql_fetch_array($result)) {
                      
    $kname=$row["Key_name"];
                      if((
    $kname != "PRIMARY") && ($row['Non_unique'] == 0)) $kname="UNIQUE|$kname";
                      if(!isset(
    $index[$kname])) $index[$kname] = array();
                      
    $index[$kname][] = $row['Column_name'];
                }
                while(list(
    $x$columns) = @each($index)) {
                      
    $def .= ",\n";
                      if(
    $x == "PRIMARY"$def .= "  PRIMARY KEY (" implode($columns", ") . ")";
                      else if (
    substr($x,0,6) == "UNIQUE"$def .= "  UNIQUE ".substr($x,7)." (" implode($columns", ") . ")";
                      else 
    $def .= "  KEY $x (" implode($columns", ") . ")";
                }

                
    $def .= "\n);";
                return (
    stripslashes($def));
            }

            
    //Erstelle Eintäge von Tabelle
            
    function get_content($dbname$table) {
                global 
    $verbindung;
                
    $content="";
                
    $result mysql_db_query($dbname"SELECT * FROM $table",$verbindung);
                while(
    $row mysql_fetch_row($result)) {
                    
    $insert "INSERT INTO $table VALUES (";
                    for(
    $j=0$j<mysql_num_fields($result);$j++) {
                        if(!isset(
    $row[$j])) $insert .= "NULL,";
                        else if(
    $row[$j] != ""$insert .= "'".addslashes($row[$j])."',";
                        else 
    $insert .= "'',";
                    }
                    
    $insert ereg_replace(",$","",$insert);
                    
    $insert .= ");\n";
                    
    $content .= $insert;
                }
                return 
    $content;
            }

            
    //Funktion um Backup auf dem Server zu speichern
            
    function write_backup($val,$newfile,$newfile_data)
               {
               global 
    $compression,$path,$cur_date,$filetype,$backup_pfad;

               
    $backup_pfad[] = $path.$val."_structur_".$cur_date.".".$filetype;
               
    $backup_pfad[] = $path.$val."_data_".$cur_date.".".$filetype;

               if (
    $compression==1)
                  {
                  
    $fp gzopen($path.$val."_structur_".$cur_date.".".$filetype,"w9");
                  
    gzwrite ($fp,$newfile);
                  
    gzclose ($fp);


                  
    $fp gzopen($path.$val."_data_".$cur_date.".".$filetype,"w9");
                  
    gzwrite ($fp,$newfile_data);
                  
    gzclose ($fp);
                  }
               else
                  {
                  
    $fp fopen ($path.$val."_structur_".$cur_date.".".$filetype,"w");
                  
    fwrite ($fp,$newfile);
                  
    fclose ($fp);
                  
                  

                  
    $fp fopen($path.$val."_data_".$cur_date.".".$filetype,"w");
                  
    fwrite ($fp,$newfile_data);
                  
    fclose ($fp);
                  }
                
                
    //Backup Zippen und downloaden
                //Pfade Speichern
                
    $path_of_Structur $path.$val."_structur_".$cur_date.".".$filetype;
                
    $path_of_Data $path.$val."_data_".$cur_date.".".$filetype;
                
    $dl_dirname "Backup_".$val."_".$cur_date."_".date("His").".zip";//Download Dir-Name
                //ZipOrdner erstellen
                
    $backup_archive = new ZipArchive();
                
    $backup_archive->open($path.$dl_dirnameZipArchive::CREATE);
                
    $backup_archive->addFile($path_of_Structur"Backup_DB_Structur_".$cur_date.".".$filetype);
                
    $backup_archive->addFile($path_of_Data"Backup_DB_Data_".$cur_date.".".$filetype);
                
    $backup_archive->close();
                
    //Datei zum Download angeben
                
    echo '<input type="text" id="hidden" name="dl_filename" value="'.$dl_dirname.'" />';
                
    // $fn_test = $dl_dirname;
                // //Download-Dialog starten
                // header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                // //Dateiformat definieren
                // header('Content-type: application/zip');
                // //File definieren
                // header('Content-Disposition: attachment; filename='.$fn_test);
                // //Keine Ahnung
                // header("Pragma: no-cache"); 
                // header("Expires: 0"); 
                // //Original ZIP.Ordner
                // //readfile($path.$dl_dirname);
                // exit;
               
    }
            
    //Backup per Email verschicken
            
    function mail_att($to$from$subject$message) {
                
    // $to Empfänger
                // $from Absender ("email@domain.de" oder "Name <email@domain.de>")
                // $subject Betreff
                // $message Inhalt der Email
                
    global $backup_pfad//Die Pfade zu den Dateien


                
    if(is_array($backup_pfad) AND count($backup_pfad) > 0)
                   {
                   
    $mime_boundary "-----=" md5(uniqid(rand(), 1));


                  
    $header "From: ".$from."\r\n";
                  
    $header.= "MIME-Version: 1.0\r\n";
                  
    $header.= "Content-Type: multipart/mixed;\r\n";
                  
    $header.= " boundary=\"".$mime_boundary."\"\r\n";

                  
    $content "This is a multi-part message in MIME format.\r\n\r\n";
                  
    $content.= "--".$mime_boundary."\r\n";
                  
    $content.= "Content-Type: text/plain charset=\"iso-8859-1\"\r\n";
                  
    $content.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
                  
    $content.= $message."\r\n";

                  
    //Dateien anhaengen
                  
    foreach($backup_pfad AS $file)
                      {
                      
    $name basename($file);
                     
    $data chunk_split(base64_encode(implode(""file($file))));
                     
    $len filesize($file);
                     
    $content.= "--".$mime_boundary."\r\n";
                     
    $content.= "Content-Disposition: attachment;\r\n";
                     
    $content.= "\tfilename=\"$name\";\r\n";
                     
    $content.= "Content-Length: .$len;\r\n";
                     
    $content.= "Content-Type: application/x-gzip; name=\"".$file."\"\r\n";
                     
    $content.= "Content-Transfer-Encoding: base64\r\n\r\n";
                     
    $content.= $data."\r\n";
                      }

                  if(
    mail($to$subject$content$header)) return true;
                  else return 
    false;
                  }

               return 
    false;
               }


            
    //Backup erstellen
            
    while (list(,$val) = each($dbname))
               {
               
    $newfile="# Strukturbackup: $cur_time \r\n# www.php-einfach.de \r\n";
               
    $newfile_data="# Datenbackup: $cur_time \r\n# www.php-einfach.de \r\n";

               
    //backup schreiben
               
    $tables mysql_list_tables($val,$verbindung);
               
    $num_tables = @mysql_num_rows($tables);
               
    $i 0;
               while(
    $i $num_tables)
                  {
                  
    $table mysql_tablename($tables$i);

                  
    $newfile .= "\n# ----------------------------------------------------------\n#\n";
                  
    $newfile .= "# structur for Table '$table'\n#\n";
                  
    $newfile .= get_def($val,$table);
                  
    $newfile .= "\n\n";


                  
    $newfile_data .= "\n# ----------------------------------------------------------\n#\n";
                  
    $newfile_data .= "#\n# data for table '$table'\n#\n";
                  
    $newfile_data .= get_content($val,$table);
                  
    $newfile_data .= "\n\n";
                  
    $i++;
                  }

               
    write_backup($val,$newfile,$newfile_data);
               } 
    //End: while




            //Backup per Email senden
            
    if($send == 1)
               {
               
    $text="Datenbank-Backup vom: ".date("d.m.Y H:i")."\n\n\n www.php-einfach.de PHP lernen leicht gemacht";
               
    $from "backup@server.de";

               if(!
    mail_att($email$from"Datenbank-Backup ".date("Y-m-d"), $text))
                  echo 
    "Es konnte <b>keine</b> Email gesendet werden<br>";

               }

            
            echo 
    $tool['backupcreatetxt'][$lang]; 
        } else if(
    $action == "read") {
            echo 
    $tool['backupreadtxt'][$lang]; 
        }
    ?>
    Vielen Dank für die Hilfe


  • #2
    Mach mal aus 'CURRENT_TIMESTAMP' ein CURRENT_TIMESTAMP (ohne Anführungszeichen).
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar


    • #3
      Vielen Dank das hat funktioniert

      Kommentar


      • #4
        Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
        Choosing an API
        Warum man mysql* generell nicht (mehr) nutzen sollte.
        Wie man von mysql* auf PDO umsteigt
        Wissenswertes zum Thema SQL-Injection
        Standards - Best Practices - AwesomePHP - Guideline für WebApps

        Kommentar


        • #5
          Warum eigentlich nicht einfach "SHOW CREATE TABLE `table`"?
          VokeIT GmbH & Co. KG - VokeIT-oss @ github

          Kommentar

          Lädt...
          X