Gesamte Datenbank exportieren

Trueffelwurm

Mitglied
Hallo,

kennt jemand eine Möglichkeit, wie ich mit php (auf einem Webspace) eine gesamte mysql datenbank in eine Datei (download) exportieren kann? (ählich wie bei PHPMyAdmin)

Mit PHPMyAdmin kann ich das lieder nicht machen, weil das Script automatisch per cron-job aufgerufen werden soll... (und bei PHPMyAdmin werden dei Parameter per POST übergeben).

Auf die Datenbank direkt kann ich von dem server, der die DB per Cron sichert leider auch nicht zugreifen, weil da eine Sperre drauf ist, dass man nur vom Webspace-Server drauf kommt...

Schonmal danke für evtl. Antworten.

Gruß,
Trueffelwurm
 
Habs erst mit fsockopen() und den POST-Daten gemacht, allerdings hat er mir dann immer den html-header in die Datei geschrieben, und komische Zeilenumbrüche gemacht.

Bin heut auf die einfachste lösung gestoßen: wget kann mit --post-string="post string" auch POST-Daten übergeben...
 
Hallo,

ich habe dafür mal ein Script geschrieben, dass alle Tabellen in einer Datenbank in ein Textdatei schreibt und die dann in einem Verzeichnis deiner Wahl ablegt. Wenn du daran Interesse hast, dann melde dich einfach bei mir, dann bekommst du das auch von mir. Du musst das dann nur noch anpassen.

Gruß Sungirl2005
 
sungirl2005 hat gesagt.:
[...]Wenn du daran Interesse hast, dann melde dich einfach bei mir, dann bekommst du das auch von mir.[...]

Hallo,
wie wäre es denn, wenn du das Script hier einfach postest bzw. als Zipdatei anhängst. Damit haben dan nämlich alle was davon.

mfg
forsterm
 
Hallo,

nach dem doch nun ein paar Leute gefragt haben, ob die das haben dürfen habe ich mich entschlossen, das Ding hier doch Online zu setzten. Freundlicherweise hat forsterm das ganze mal überfolgen und bei Ihm ging es auch ohne Probleme.

Achtung ich habe auch noch eine Funktion eingebaut, dass man auch nur Teile sichern kann. Hier kommt mal der Quellcode dafür.

PHP:
<?php
include "../../data/config.php"; 
//Verbindung herstellen und Datenbank auswählen
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Bei dem Verbindungsaufbau mit der Datenbank ist ein Fehler aufgetreten.<br>MySQL hat folgende Fehlermeldung ausgegeben: <tt>".mysql_error()."</tt><br>Bitte probieren Sie es später noch einmal.");
mysql_select_db(MYSQL_DATABASE) OR die("Die Verbindung mit der Datenbank konnte zwar hergestellt werden, jedoch gab es Probleme beim Auswählen der Datenbank.<br>MySQL hat folgende Fehlermeldung ausgegeben: <tt>".mysql_error()."</tt><br>Bitte Probieren Sie es später noch einmal.");

//Settings aus der DB laden:
$sql = "SELECT
            name,
            wert
        FROM
            settings
        ";
$tmp_return = mysql_query($sql) OR die(mysql_error());

//Arrays initialisieren
$_tmp_settings = array();
$_settings = array();

//Alle Daten auslesen und als name => wert in $_settings ablegen
while($_data = mysql_fetch_assoc($tmp_return))
{
    $_tmp_settings[] = $_data;
}
foreach($_tmp_settings as $arr => $set)
{
    $_settings[ $set['name'] ] = $set['wert'];
}

//Temponäre Daten löschen
mysql_free_result($tmp_return);
unset($tmp_return);
unset($_tmp_settings);

$tables = explode(",",$_settings['backup_tables']);
$tmp_left_out = explode(",",$_settings['backup_left_out']);
$left_out = array();
foreach($tmp_left_out as $value)
{
	$left_out[$value] = true;
}
$make_truncate = $_settings['backup_make_truncate'];

$strings[0] = "###############################################################\n#\n# Backup der Tabellen:\n# ";
foreach($tables as $table) $strings[0] .= $table . ", ";
$strings[0] .= "\n# Stand: ".date("Y-m-d, h:i:s")."\n#\n###############################################################\n";

foreach($tables as $table)
{
	$sql = "SELECT 
				*
			FROM
				$table
			";
	$return = mysql_query($sql);
	
	$strings[] = "\n# ----------------------------------------\n# BACKUP TABELLE $table\n# ----------------------------------------";
	if(!$return) 
	{
		$strings[] = "# Es ist ein Fehler aufgetreten (MySQL): \n# ".mysql_error();
		continue;
	}
	if($make_truncate)
	{
		$strings[] = "TRUNCATE TABLE $table;";
	}
	
	while($_data = mysql_fetch_assoc($return))
	{
		$keys = array();
		$values = array();
		
		foreach($_data as $key => $value)
		{
			if(isset($left_out[$table.".".$key])) continue;
			$keys[] = $key;
			if(!$value) $value = "NULL";
			elseif(!is_numeric($value)) $value = "\"".str_replace("\"","\\\"",addslashes($value))."\"";
			$values[] = $value;
		}
		$strings[] = "INSERT INTO $table ( ".implode(", ",$keys).")\n     VALUES ( ".implode(", ",$values).");";
	}
}

$backup = implode("\r\n\r\n",$strings);

$filepath = "DB_".MYSQL_DATABASE."/date_".date("Y_m_d")."_time_".date("h_i").".txt";

if(!$fp = @fopen($filepath,"w")) die("<b>Fatal Error:</b> Die Datei $filepath konnte entweder nicht angelegt oder für den Schreibvorgang geöffnet werden.");
$ok = @flock($fp, LOCK_EX);

for($x = 0; $x <= 5; $x++)
{
	if($ok) break;
	$ok = @flock($fp, LOCK_EX);
}

if(!$ok) die("<b>Fatal Error:</b> Die Datei $filepath konnte nicht für den Schreibvorgang gesperrt werden.");

if(!@fwrite($fp, $backup, strlen($backup))) die("<b>Fatal Error:</b> Das Backup konnte nicht in die Datei $filepath geschrieben werden.");

fclose($fp);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>Backup der Datenbank <?php echo MYSQL_DATABASE; ?></title>
</head>

<body>
<?php

echo "<h2>Backup erfolgreich</h2\n";
echo "<p>Das nachfolgende Backup wurde erfolgreich in die Datei <b>$filepath</b> geschrieben und steht jetzt für weitere Verwendung zur Verfügung.</p>\n";
echo "<hr>\n";

echo "<pre>";
echo stripslashes($backup)."<br>";
echo "</pre>";

?>

</body>
</html>

So geht dann mal bitte kurz in einer Datenbank das macht Ihr am besten mit dem PHPMyAdmin. Legt dann eine Tabelle an die „settings“ heißt. Dort wiederum brauchen wir dann folgende Spalten:

- Name
- wert

So im ganzen sieht das dann wie folgt aus:

Code:
CREATE TABLE `settings` (
  `name` varchar(100) NOT NULL default '',
  `wert` text
) TYPE=MyISAM;


Nun brauen wir noch folgende Einträge:

- backup_make_truncate
- backup_left_out
- backup_tables


So in „backup_make_truncate“ muss der Wert 1 stehen. In der Spalte „backup_left_out” kommen dann die ganzen Tabellen rein die NICHT gesichert warden sollen. In die Spalte „backup_tables“ kommen dann alle Tabellen die Gesichert werden sollen.

Ist eigentlich gar nicht so schwer oder?

So zum Schluss legen wir noch einen Ordner an in dem wir dann jeden Abend oder wie auch immer die Textdatei dann speichern. Achtet bitte drauf, dass der Ordner dann auch Schreibrechte hat. Ich habe das dann auf „777“

Solltet Ihr noch Fragen haben so schreibt die am besten hier rein.

Gruß Sungirl2005
 
Zurück