[MYSQL] DB sichern

prom

Grünschnabel
Moin!

Ich hab da mal en Problem :)
Und zwar möchte ich gern meine Datenbank alle 24h mit Daten und Strukturen sichern und per E-Mail an mich schicken lassen.

Bräuchte da mal ein paar Tips wie man das implementieren könnte.

In diesem Sinne

prom
 
hier der code

der die komplette DB sichert und im Verzeichis backup speichert:


PHP:
<?php

$db_host = $dbhost;
$db_user = $dbuser;
$db_pw   = $dbpasswd;
$db_name = $mydb;
$path    = "backup/";

if (!is_dir($path)) { mkdir($path, 0777); }

echo "<b>Datenbank Backup</b><br><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);

$c = 0;
$result2 = @mysql_list_tables($database);

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>";

for ($y = 0; $y < $c; $y++) {
	$tabelle = $tbl_array[$y];

	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";

	$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>";
?>

jetzt mußt Du Dich nur noch um die Automatisierung kümmern :)

mfg
novara
 
Bei Linux würden sich dafür cron jobs empfehlen, mit denen du da Ganze periodisch verwalten könntest.
 
Fuer Leute die bei einem Webhoster sitzen,
der kein Cron erlaubt, gitbs n Webservice der sowas
in definierbaren Intervallen anstossen kann

(also irgendne Site die einmal am Tag ne bestimmte PHP anfordert...)

so'n ersatz-CRON :-) ???

Wär ne Marktluecke...
 
Hallo,

dies ist mein erster Post hier.

Hallo an alle.

Habe das o.g. script benutzt und versucht meine DB zu sichern, aber das funktioniert nicht so ganz.

ich bekomme immer folgende fehlermeldung.

Datenbank Backup



Warning: mysql_get_server_info() [function.mysql-get-server-info]: Access denied for user: 'wwwrun@localhost' (Using password: NO) in /home/www/htdocs/ihf-clan.de/board/dbsichern.php on line 49

Warning: mysql_get_server_info() [function.mysql-get-server-info]: A link to the server could not be established in /home/www/htdocs/ihf-clan.de/board/dbsichern.php on line
49

DB Name Anzahl Tabellen Größe
DBxxxxx 0 0.34 KB

Das DB - Backup wurde erfolgreich durchgeführt.
Die Dateien befinden sich im Verzeichniss /backup/

DB Name und Passwort habe ich eingegeben

$db_host = DBxxxxx;

$db_user = DBxxxxxx;

$db_pw = xxxxx;

$db_name = DBxxxxx;

$path = "backup/";



Das hier steht dann in der sql datei:

# --------------------------------------------------------
# DATENBANK DUMP
# Host: DBxxxxx
# Erstellungszeit: 25. August 2003 um 13:41
# Server Betriebssystem: Linux s57 2.4.16-4GB #1 Mon Apr 15 10:18:39 GMT 2002 i686
# MySQL-Version:
# PHP-Version: 4.3.0
# Datenbank: `DBxxxxx`
# --------------------------------------------------------

DB NAme wird erkannt, aber was mache ich denn falsch ?

Kann ich ein Backup auch über phpmyAdmin erstellen, aber was muss ich da alles auswählen um eine komplette Sicherung zu erhalten, die ich bei Verlust einfach wieder einspielen kann ?

SQL-Optionen (Dokumentation)

Export-Optionen der Datenbank
DROP DATABASE hinzufügen

Struktur
Mit 'DROP TABLE'
AUTO_INCREMENT-Wert hinzufügen
Tabellen- und Feldnamen in einfachen Anführungszeichen

Daten
Vollständige 'INSERT's
Erweiterte 'INSERT's

Für Hilfe wäre ich sehr dankbar

Grüsse

Gundi
 
Zuletzt bearbeitet:
Original geschrieben von Gudrun_h
Warning: mysql_get_server_info() [function.mysql-get-server-info]: Access denied for user: 'wwwrun@localhost' (Using password: NO) in /home/www/htdocs/ihf-clan.de/board/dbsichern.php on line 49DBxxxxx 0 0.34 KB
Dein Passwort wird offensichtlich nicht angenommen, probier mal das Passwort und die ganzen DB Daten in Anführungszeichen zu schreiben, zb:

$db_host = "DBxxxxx";
 
Hi,

danke für deine Antwort, aber auch das hat nicht funktioniert.

Kannst Du mir denn vielleicht sagen, wie ich eine komplette Datensicherung der DB mit PHPMYADMIN machen kann ? was ich da alles anklicken muss, um diese wiederherstellen zu können ?

mfg
Gundi
 
Also....

Unter "Dump (Schema) der Datenbank anzeigen" markierst du alle Tabellen die du sichern willst. Dann rechts daneben "Struktur und Daten" anklicken.

Danach noch " Vollständige 'INSERT's " und "Senden" und dann auf OK.

Dann kannst du die DB als .sql Datei runterladen. Die kannst du dann bei SQL Befehle unter "Oder Datei :" auswählen und hochladen
 
Zurück