10. maj 2008 - 13:37
Der er
12 kommentarer og 1 løsning
automatisk backup af mysql
Jeg leder efter et script som kan lave en backup af min mysql database og sende indholdet til min mail.
Jeg har styr på at sende indholdet til min mail via phpmailer, men mangler et script som genere et dump af min databse.
Jeg har fundet dette script
http://www.eksperten.dk/spm/319984 men får fejlen
Parse error: syntax error, unexpected '{' in ........ on line 73
linie 73 er det } i denne funktion
functionmy_handler($sql_insert)
{
global$crlf;
echo"$sql_insert;$crlf";
}
er der en her som kan se fejlen eller kender et andet script til at klare det med?
Annonceindlæg fra Novataris
<ole> Måskeduskulleprøvemednoglemellemrumnårdukoder ;o) Du bør adskille 'global' fra '$crlf' - og ligeledes i næste linje. Om det er det, der introducerer fejlen, tvivler jeg dog på. Jeg undrer mig mere over, hvad det første semikolon laver i linjen: echo"$sql_insert;$crlf"; Kunne det mon ikke være dér, fejlen ligger? /mvh </bole>
Njah ... det semikolon kunne selvfølgelig være slutningen på en SQL-linje =) Jeg tror, du må vise noget mere kode. Godt nok fanges en fejl i linje 73, men den udløsende faktor (den egentlige fejl) ligger vist et andet sted
jeg havde fået fjernet lidt for mange mellemrum, da der var problemer med header.
Jeg har fået det til at virke nu, men kan ikke regne ud hvordan jeg får det lagt ud i en fil
jeg har prøvet at ændre
print
til
$indhold .=
for at samle alt skreven indhold til en variabel, men det virker ikke efter hensigten.
alt kode kan ses her
http://www.eksperten.dk/spm/319984 21/02-2003 08:59:47 (1. svar)
før udskrev den dumpet på skærmen, men nu kommer den op med en download boks når jeg besøger siden. er der en måde hvorpå den autmatisk gemmer filen på serveren?
Ellers kunne du prøve: <?php $dbhost = "**********"; $dbuname = "*********"; $dbpass = "*******"; $dbname = "********"; @set_time_limit(600); $crlf="\n"; // Danish Text $strNoTablesFound = "Ingen databasetabeller fundet"; $strHost = "Host"; $strDatabase = "Database "; $strTableStructure = "Struktur for tabel"; $strDumpingData = "Indhold af tabel"; $strError = "Fejl"; $strSQLQuery = "SQL-query"; $strMySQLSaid = "MySQL: "; $strBack = "Tilbage"; $strFileName = "DB-dump"; $strName = "Backup af database"; $strDone = "Downloadet d."; $strat = "kl."; $date_jour = date ("d-m-Y"); // Log name: $logName = $strFileName $dbname $date_jour.sql; header("Content-Disposition: filename=$logName"); header("Content-Type: text/html"); header("Pragma: no-cache"); header("Expires: 0"); // doing some DOS-CRLF magic... $client = getenv("HTTP_USER_AGENT"); if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs)) { $os = $regs[1]; // this looks better under WinX if (eregi("Win",$os)) $crlf="\r\n"; } function my_handler($sql_insert) { global $crlf; return "$sql_insert;$crlf"; } // Get the content of $table as a series of INSERT statements. // After every row, a custom callback function $handler gets called. // $handler must accept one parameter ($sql_insert); function get_table_content($db, $table, $handler) { $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die(); $i = 0; while($row = mysql_fetch_row($result)) { $table_list = "("; for($j=0; $j<mysql_num_fields($result);$j++) $table_list .= mysql_field_name($result,$j).", "; $table_list = substr($table_list,0,-2); $table_list .= ")"; if(isset($GLOBALS["showcolumns"])) $schema_insert = "INSERT INTO $table $table_list VALUES ("; else $schema_insert = "INSERT INTO $table VALUES ("; for($j=0; $j<mysql_num_fields($result);$j++) { if(!isset($row[$j])) $schema_insert .= " NULL,"; elseif($row[$j] != "") $schema_insert .= " '".addslashes($row[$j])."',"; else $schema_insert .= " '',"; } $schema_insert = ereg_replace(",$", "", $schema_insert); $schema_insert .= ")"; $handler(trim($schema_insert)); $i++; } return (true); } // Return $table's CREATE definition // Returns a string containing the CREATE statement on success function get_table_def($db, $table, $crlf) { $schema_create = ""; $schema_create .= "DROP TABLE IF EXISTS $table; CREATE TABLE $table ($crlf"; $result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die(); while($row = mysql_fetch_array($result)) { $schema_create .= " $row[Field] $row[Type]"; if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0")) $schema_create .= " DEFAULT '$row[Default]'"; if($row["Null"] != "YES") $schema_create .= " NOT NULL"; if($row["Extra"] != "") $schema_create .= " $row[Extra]"; $schema_create .= ",$crlf"; } $schema_create = ereg_replace(",".$crlf."$", "", $schema_create); $result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die(); 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)) { $schema_create .= ",$crlf"; if($x == "PRIMARY") $schema_create .= " PRIMARY KEY (" . implode($columns, ", ") . ")"; elseif (substr($x,0,6) == "UNIQUE") $schema_create .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")"; else $schema_create .= " KEY $x (" . implode($columns, ", ") . ")"; } $schema_create .= "$crlf)"; return (stripslashes($schema_create)); } function mysql_die($error = "") { echo "<b> $strError </b><p>"; if(isset($sql_query) && !empty($sql_query)) { echo "$strSQLQuery: <pre>$sql_query</pre><p>"; } if(empty($error)) echo $strMySQLSaid.mysql_error(); else echo $strMySQLSaid.$error; echo "<br><a href=\"java script:history.go(-1)\">$strBack</a>"; exit; } global $bruger, $dbhost, $dbuname, $dbpass, $dbname; mysql_connect($dbhost, $dbuname, $dbpass); @mysql_select_db("$dbname") or die ("Kunne ikke forbinde til databasen"); $tables = mysql_list_tables($dbname); $num_tables = @mysql_numrows($tables); if($num_tables == 0) { echo $strNoTablesFound; } else { $i = 0; $heure_jour = date ("H:i"); $sBuffer = "# ========================================================$crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# $strName : $dbname$crlf"; $sBuffer .= "# $strDone $date_jour $strat $heure_jour $crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# ========================================================$crlf"; $sBuffer .= "$crlf"; while($i < $num_tables) { $table = mysql_tablename($tables, $i); print $crlf; $sBuffer .= "# --------------------------------------------------------$crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# $strTableStructure '$table'$crlf"; $sBuffer .= "#$crlf$crlf"; echo get_table_def($dbname, $table, $crlf).";$crlf$crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# $strDumpingData '$table'$crlf"; $sBuffer .= "#$crlf$crlf"; get_table_content($dbname, $table, "my_handler"); $i++; } // Write log: $fp = fopen($logName, "w"); fwrite($fp, $sBuffer); fclose($fp); } ?>
Jeg vil mene, at den så skulle skrive en fil til dig med SQL'en - og ellers udskrive evt. fejl til browseren - men det er selvfølgelig ganske utestet =)
Den tager ikke alt indhold med aller inserts mangler, men tak for forsøget og tak for hjælpen
Selvtak - og tak for points ;o) Jeg har da også lavet fejl i koden. Prøv med: else { $i = 0; $heure_jour = date ("H:i"); $sBuffer = "# ========================================================$crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# $strName : $dbname$crlf"; $sBuffer .= "# $strDone $date_jour $strat $heure_jour $crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# ========================================================$crlf"; $sBuffer .= "$crlf"; while($i < $num_tables) { $table = mysql_tablename($tables, $i); $sBuffer .= "$crlf# --------------------------------------------------------$crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# $strTableStructure '$table'$crlf"; $sBuffer .= "#$crlf$crlf"; $sBuffer .= get_table_def($dbname, $table, $crlf).";$crlf$crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# $strDumpingData '$table'$crlf"; $sBuffer .= "#$crlf$crlf"; get_table_content($dbname, $table, "my_handler"); $i++; } // Write log: $fp = fopen($logName, "w"); fwrite($fp, $sBuffer); fclose($fp); }
- og der var flere fejl. Nu tror jeg, den er der - men stadig utestet :) <?php $dbhost = "**********"; $dbuname = "*********"; $dbpass = "*******"; $dbname = "********"; @set_time_limit(600); $crlf="\n"; // Danish Text $strNoTablesFound = "Ingen databasetabeller fundet"; $strHost = "Host"; $strDatabase = "Database "; $strTableStructure = "Struktur for tabel"; $strDumpingData = "Indhold af tabel"; $strError = "Fejl"; $strSQLQuery = "SQL-query"; $strMySQLSaid = "MySQL: "; $strBack = "Tilbage"; $strFileName = "DB-dump"; $strName = "Backup af database"; $strDone = "Downloadet d."; $strat = "kl."; $date_jour = date ("d-m-Y"); // Log name: $logName = $strFileName $dbname $date_jour.sql; header("Content-Disposition: filename=$logName"); header("Content-Type: text/html"); header("Pragma: no-cache"); header("Expires: 0"); // doing some DOS-CRLF magic... $client = getenv("HTTP_USER_AGENT"); if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs)) { $os = $regs[1]; // this looks better under WinX if (eregi("Win",$os)) $crlf="\r\n"; } // Get the content of $table as a series of INSERT statements. // After every row, a custom callback function $handler gets called. // $handler must accept one parameter ($sql_insert); function get_table_content($db, $table, $handler) { global $crlf; $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die(); $i = 0; $sLocBuffer = ""; while($row = mysql_fetch_row($result)) { $table_list = "("; for($j=0; $j<mysql_num_fields($result);$j++) $table_list .= mysql_field_name($result,$j).", "; $table_list = substr($table_list,0,-2); $table_list .= ")"; if(isset($GLOBALS["showcolumns"])) $schema_insert = "INSERT INTO $table $table_list VALUES ("; else $schema_insert = "INSERT INTO $table VALUES ("; for($j=0; $j<mysql_num_fields($result);$j++) { if(!isset($row[$j])) $schema_insert .= " NULL,"; elseif($row[$j] != "") $schema_insert .= " '".addslashes($row[$j])."',"; else $schema_insert .= " '',"; } $schema_insert = ereg_replace(",$", "", $schema_insert); $schema_insert .= ")"; $sLocBuffer .= trim($schema_insert).$crlf; $i++; } return $sLocBuffer; } // Return $table's CREATE definition // Returns a string containing the CREATE statement on success function get_table_def($db, $table, $crlf) { $schema_create = ""; $schema_create .= "DROP TABLE IF EXISTS $table; CREATE TABLE $table ($crlf"; $result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die(); while($row = mysql_fetch_array($result)) { $schema_create .= " $row[Field] $row[Type]"; if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0")) $schema_create .= " DEFAULT '$row[Default]'"; if($row["Null"] != "YES") $schema_create .= " NOT NULL"; if($row["Extra"] != "") $schema_create .= " $row[Extra]"; $schema_create .= ",$crlf"; } $schema_create = ereg_replace(",".$crlf."$", "", $schema_create); $result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die(); 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)) { $schema_create .= ",$crlf"; if($x == "PRIMARY") $schema_create .= " PRIMARY KEY (" . implode($columns, ", ") . ")"; elseif (substr($x,0,6) == "UNIQUE") $schema_create .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")"; else $schema_create .= " KEY $x (" . implode($columns, ", ") . ")"; } $schema_create .= "$crlf)"; return (stripslashes($schema_create)); } function mysql_die($error = "") { echo "<b> $strError </b><p>"; if(isset($sql_query) && !empty($sql_query)) { echo "$strSQLQuery: <pre>$sql_query</pre><p>"; } if(empty($error)) echo $strMySQLSaid.mysql_error(); else echo $strMySQLSaid.$error; echo "<br><a href=\"java script:history.go(-1)\">$strBack</a>"; exit; } global $bruger, $dbhost, $dbuname, $dbpass, $dbname; mysql_connect($dbhost, $dbuname, $dbpass); @mysql_select_db("$dbname") or die ("Kunne ikke forbinde til databasen"); $tables = mysql_list_tables($dbname); $num_tables = @mysql_numrows($tables); if($num_tables == 0) { echo $strNoTablesFound; } else { $i = 0; $heure_jour = date ("H:i"); $sBuffer = "# ========================================================$crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# $strName : $dbname$crlf"; $sBuffer .= "# $strDone $date_jour $strat $heure_jour $crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# ========================================================$crlf"; $sBuffer .= "$crlf"; while($i < $num_tables) { $table = mysql_tablename($tables, $i); $sBuffer .= "$crlf# --------------------------------------------------------$crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# $strTableStructure '$table'$crlf"; $sBuffer .= "#$crlf$crlf"; $sBuffer .= get_table_def($dbname, $table, $crlf).";$crlf$crlf"; $sBuffer .= "#$crlf"; $sBuffer .= "# $strDumpingData '$table'$crlf"; $sBuffer .= "#$crlf$crlf"; $sBuffer .= get_table_content($dbname, $table, "my_handler"); $i++; } // Write log: $fp = fopen($logName, "w"); fwrite($fp, $sBuffer); fclose($fp); } ?>
der var et par småfejl endnu, men nu virker det. jeg rettede $logName = $strFileName $dbname $date_jour.sql; til $logName = "$strFileName-$dbname-$date_jour.sql"; og $schema_insert .= ")"; til $schema_insert .= ");"; da den ellers ikke generede en korrekt sql derudover har jeg fjernet // Write log: $fp = fopen($logName, "w"); fwrite($fp, $sBuffer); fclose($fp); da phpmailer selv kan lave en fil og sende videre med en mail. Du skal have tak for hjælpen igen. hindbersnitten, dit ser også fint ud, men jeg holder mig til ovenstående script, da det du sendte kan en del mere end hvad jeg har brug for
Selvtak ... bare det lykkes - one way or the other ;o)
Vi tilbyder markedets bedste kurser inden for webudvikling