MySQL Datenbank per PHP exportieren?

  • Themenstarter Themenstarter ByeBye 8492
  • Beginndatum Beginndatum
Beispielscripte sind immer herzlich willkommen :) Ungern gesehen sind nur Anfragen für fertige Scripte. Wenn du aber ein Script präsentierst, das die Lösung zu einem Problem enthält, dann ist das schon ok.

Falls ein Quellcode mal zu lang für das Forum ist, kannst du auch auf Seiten wie http://nopaste.php-q.net/ zurückgreifen und den entsprechenden Link dann in deinen Beitrag setzen.
 
OKOK dass der kleine Junge heute Nacht ruhig schlafen kann hier das Skript:

Lege dir eine Tabelle in der DB an:

CREATE TABLE `DB_Sicherung` (
`name` varchar(90) NOT NULL default '',
`wert` text
) TYPE=MyISAM;


DAnn leg dir ein paar Spalten an:

backup_tables', 'Was auch immer
backup_left_out', Was auch immer

In backup_tables kommen alle Tabellen, die Ihr mit dem Skript dann sichern wollt. Sprich wenn Ihr z.B. Tabellen habt mit dem Namen: User, Nachrichten dann schreibt Ihr die auch so rein. Achtung: Ihr müsst die Tabellen, dann immer mit einem Komme trennen. On nach dem Komma ein Leerzeichen kommt oder nicht das ist euch überlassen es geht mit beidem.

In backup_left_out da könnt Ihr festlegen, was Ihr z.B. in einer gesicherten Tabelle nicht verwenden wollt. Also gehen wir wieder von dem Beispiel aus "User" in der Tabelle User sind ein paar Spalten die z.B. so heißen: ID, Alter, PLZ, wenn Ihr nun z.B. das alter nicht mit sichern wollt dann schreibt Ihr das z.B. so: User.id wenn Ihr da dann noch mehr habt dann trennt auch hier wieder die Angaben mit einem Komma. Achtet bitte ganz genau wie ich das mit user.id gemacht habe der PUNKT ist wichtrig sonst geht das ganze nicht.

PHP:
<?php 

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


$sql = "SELECT 
name, 
wert 
FROM 
DB_Sicherung
" ; 
$tmp_return = mysql_query ( $sql ) OR die( mysql_error ()); 


$_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' ]; 
} 


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 von dir :\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>

Jetzt leg noch ein Ornder an der die Rechte 777 hat und dann kannst du das darin speichern
 
BlackLove2005 hat gesagt.:
|@Muffinmampfer,

ich habe ja gesehen dass du meine PM´s gelesen hast. Ein DANKE währe wohl das mindest oder? Aber na ja was will man denn mehr erwarten.

-- Cya --

Moinsen,

gelesen kann man nicht sagen ;), dazu hatte ich erst jetzt Zeit :), davor musste ich weg.

Big thx :), hat mir schonma ordentlich weitergeholfen :).
 
Morgen,

wenn es dir geholfen hat, dann mach doch unten bitte ein Hacken hin, dass das Thema erledigt ist.

Gruß BlackLove2005
 
@BlackLove2005

Um noch weiterzugehen... du hast ein deiner Meinung nach gutes Skript, was für alle hilfreich sein könnte:
Dann dokumentiere es und veröffentliche es als Tutorial... so findet es einen wirklich würdigen Platz und geht nicht in den Tiefen des Boards verloren:)
 
Hallo Sven,

ich denke dafür bin ich nicht gut genug. Ich kann solche Dokus nicht schreiben ich schreibe das immer so wie ich das selber sehe und ich weiß dann nicht ob das die anderen dann auch verstehen. Und ich will ja nicht dass durch meine Schuld jemand was falsches macht.

Gruß BlackLove2005
 
Niemand ist perfekt.
Lese dir mal ein paar Tutorials durch... du wirst schnell der Meinung sein, dass du sowas auch kannst :)
 
Hallo,

ok dann werde ich das mal versuchen. Wie und wo muss ich das dann machen, damit meine ich, muss ich das dann an dich schicken oder wie geht das dann?

Gruß BlackLove2005
 
Hallo Sven,

OK ich werde mir das gleich mal durchlesen :-)

Gruß BlackLove2005
 
Zurück