Simon6785
08-08-2004, 13:41
Hallo, ich hab, um meine Datenbank zu sichern dieses Script ausprobiert:
THREAD (http://www.php-resource.de/forum/showthread.php?s=&threadid=39984&highlight=mysql+backup)
Nur ich bekomme es einfach nicht ans laufen. Was muss ich denn wo einstellen, damit einfach alle 5 Tage ein Backup geschrieben wird? Dieses Backup soll auf ein im Server eingebautes ZIP Laufwerk geschrieben werden. Und vor allem sollen diese ganzen Meldungen und die GUI weg, der User soll davon nichts mitbekommen. Auch würde ich die Backup dateien gern mit PHP wieder einlesen können. Wie geht das den dann?Also ic hhab nen Apache hier installiert, habe folglich alle Rechte, nur ich kapier nicht wo ich was einstellen muss.... HELFT MIR, danke
Was muss ich denn wo einstellen, damit einfach alle 5 Tage ein Backup geschrieben wird? cronjob
und was hat das jetzt mit php zu tun?
*VERSCHIEB* zu den install/config fragen
Simon6785
08-08-2004, 20:46
also ich hab mir jetzt diesen Code im INternet gesucht, funzt einwandfrei:
<?php
// Script Konfiguration
$db_host = "localhost"; // Hostname
$db_user = "web27"; // DB User
$db_pw = "mischa"; // Passwort
$db_name = "usr_web27_1"; // Datenbank-Name
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'web27');
define('MYSQL_PASS', 'mischa');
define('MYSQL_DATABASE', 'usr_web27_1');
error_reporting(E_ALL);
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR
die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
$path = "dump/";
// -----------------------------------------------------
// Don't change the lines below:
if (!is_dir($path)) { mkdir($path, 0777); }
echo "<b>Datenbank Dump</b><br><br><br>";
echo "Servername: '".$db_host."'<br>";
echo "Betriebssystem: ".php_uname()."<br>";
echo "MySQL-Version: ".mysql_get_server_info()."<br>";
echo "PHP - Version: ".phpversion()."<br><br>";
echo "<table border=\"1\">";
echo "<tr><td>DB Name</td><td>Anzahl Tabellen</td><td>Größe</td></tr>";
echo "<tr><td>$db_name</td>";
$database = $db_name;
$zaehler = 0;
$file_name = $path.$database."_".date("Y-m-d_H-i").".sql";
$text = "# --------------------------------------------------------\r\n";
$text .= "# DATENBANK DUMP\r\n";
$text .= "# Host: ".$db_host."\r\n";
$text .= "# Erstellungszeit: ".date("d. F Y")." um ".date("H:i")."\r\n";
$text .= "# Server Betriebssystem: ".php_uname()."\r\n";
$text .= "# MySQL-Version: ".mysql_get_server_info()."\r\n";
$text .= "# PHP-Version: ".phpversion()."\r\n";
$text .= "# Datenbank: `$database`\r\n";
$text .= "# --------------------------------------------------------\r\n\r\n";
$fd = fopen($file_name,"a+");
fwrite($fd, $text);
fclose($fd);
// Alle Datenbanken auf dem Server suchen
$c = 0;
$result2 = @mysql_list_tables($database);
// Tabellenname Array auslesen und aufbauen
for ($i = 0; $i < @mysql_num_rows($result2); $i++)
{
$tabelle = @mysql_tablename($result2,$i);
if ($tabelle != "") {
$tbl_array[$c] = @mysql_tablename($result2,$i);
$c++;
$zaehler++;
}
}
echo "<td align=\"right\">".$zaehler."</td>";
// Start Ausgabe und Berechnung
for ($y = 0; $y < $c; $y++) {
$tabelle = $tbl_array[$y];
// Struktur der Tabelle einlesen
unset($def,$index);
$def .= "DROP TABLE IF EXISTS $tabelle;\r\n";
$def .= "CREATE TABLE $tabelle (\r\n";
$result3 = @mysql_db_query($database, "SHOW FIELDS FROM $tabelle");
while ($row = @mysql_fetch_array($result3)) {
$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 .= ",\r\n";
}
$def = ereg_replace(",\r\n$", "", $def);
$result3 = @mysql_db_query($database, "SHOW KEYS FROM $tabelle");
while ($row = @mysql_fetch_array($result3)) {
$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($xy, $columns) = each($index)) {
$def .= ",\r\n";
if ($xy == "PRIMARY") $def .= " PRIMARY KEY (".implode($columns, ", ").")";
else if (substr($xy,0,6) == "UNIQUE") $def .= " UNIQUE ".substr($xy,7)." (".implode($columns, ", ").")";
else $def .= " KEY $xy (".implode($columns, ", ").")";
}
$def .= "\r\n);\r\n\r\n";
// Ende Struktur Modul
$db = @mysql_select_db($database);
$tabelle = "".$tabelle;
$text = "#\r\n# Daten für Tabelle `$tabelle`\r\n#\r\n\r\n";
$fd = fopen($file_name,"a+");
fwrite($fd, $text.$def);
fclose($fd);
unset($data);
if ($tabelle > "") {
$ergebnis[] = @mysql_select_db($database);
$result = @mysql_query("SELECT * FROM $tabelle");
$anzahl = @mysql_num_rows($result);
$spaltenzahl = @mysql_num_fields($result);
for ($i = 0; $i < $anzahl; $i++) {
$zeile = @mysql_fetch_array($result);
$data .= "INSERT INTO $tabelle (";
for ($spalte = 0; $spalte < $spaltenzahl; $spalte++) {
$feldname = @mysql_field_name($result, $spalte);
if ($spalte == ($spaltenzahl - 1)) {
$data.= $feldname;
} else {
$data.= $feldname.",";
}
}
$data .= ") VALUES (";
for ($k=0;$k < $spaltenzahl;$k++) {
if ($k == ($spaltenzahl - 1)) {
$data .= "'".addslashes($zeile[$k])."'";
} else {
$data .= "'".addslashes($zeile[$k])."',";
}
}
$data .= ");\r\n";
}
$data .= "\r\n";
} else {
$ergebnis[] = "Keine Tabelle übergeben";
}
$fd = fopen($file_name,"a+");
fwrite($fd, $data);
fclose($fd);
}
$groesse = filesize($file_name) / 1024;
echo "<td align=\"right\">".number_format($groesse,2)." KB</td></tr>";
echo "</table><br>";
echo "Das DB - Backup wurde erfolgreich durchgeführt.<BR>Die Dateien befinden sich im Verzeichniss /".$path."<BR>";
?>
Funzt auch wunderbar, ich bekomme eine schöne, fertige SQL Datei. Nur bekomme ich auch etwa eine Seite fehler. Immer die gleichen:
Notice: Undefined variable: def in /home/www/web27/html/backup.php on line 67
Notice: Undefined variable: data in /home/www/web27/html/backup.php on line 107
Warning: Variable passed to each() is not an array or object in /home/www/web27/html/backup.php on line 85
Kann mir wer sagen wo die wechkommen, oder auc heinfach nur, wie ich diese Fehlermeldungen abschalten kann (funzt ja...)
//EDIT
hab einfach mit ERROR_REPORTING(0) abgeschaltet...
noch ne frage, ich kann ja mit $path = "dump/"; den Ordner für die Dateien angeben. Kann ich denn dort auch den Pfad zu meinem Zip-Laufwerk eingeben, das ja im Server sitzt z.b. Z:\dump\
hab einfach mit ERROR_REPORTING(0) abgeschaltet...
aua
schreib lieber anstatt unset($def,$index);das hier $def='';
$index=array();
Kann ich denn dort auch den Pfad zu meinem Zip-Laufwerk eingeben, das ja im Server sitzt z.b. Z:\dump\ Ausprobieren?
Simon6785
09-08-2004, 12:14
ja, klar, ausprobieren geht leider im Moment noch nicht, da ich erst auf nem normalen Webserverr entwickle, und dann das fertige Programm auf den Server spiele... deshalb müsste ich das schon voher wissen....
dann stelle dir eben eine vernünftige entwicklungsumgebung zusammen, wo du auch mit echten daten spielen kannst!
Simon6785
09-08-2004, 19:04
hm
nun, wie sieht es denn generell aus, kan nein Apache auf ein Verzeichniss ausserhalb von htdocs zugreifen?
apache kann nur auf das zugreifen, was erlaubt/konfiguriert ist.