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:
Kann mir jemand sagen wie ich diese Problem umgehen kann?
Das backup mache ich folgender massen:
Vielen Dank für die Hilfe
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) );
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ü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_dirname, ZipArchive::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];
}
?>
Kommentar