MySQL Datenbank exportieren wie in PHPmyAdmin (PHP)
Inhaltsverzeichnis
Einleitung
Oft möchte man eine MySQL-Datenbank exportieren - beispielsweise als Backup, sodass man diese später wieder (z.B. per mysql_query()) importieren kann. Diese Funktion exportiert komplette Tabellen mit Struktur und Inhalt.
Hinweis / WIchtig
Tutorial aus dem Jahr 2005 (!). Aufgrund großer Nachfrage habe ihn wieder online gestellt.
Bitte beachte das es inzwischen evt. einfacher ist eine Datenbank zu exportieren bzw. sogar etwas am Script falsch ist.
Prüfe deswegen - und zwar bevor du das Script richig einsetzt - ob noch alles funktioniert und auch das Importieren klappt.
Die Funktion
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | <?php // (c) 2005 by Franky // http://FrankyOnline.de/ function parsefield($field, $typ){ if($typ == 'integer') return $field; else{ $field = addslashes($field); $field = str_replace("\t", "\\t", $field); $field = str_replace("\r", "\\r", $field); $field = str_replace("\n", "\\n", $field); return '\''.$field.'\''; } } function mysql_export_table($table, $connection=''){ // Struktur $dump = "CREATE TABLE `".$table."` (\n"; $types = array(); $result = mysql_query('DESCRIBE '.$table, $connection); $count = mysql_num_rows($result); $i = 0; while($row = mysql_fetch_array($result)){ $name = $row['Field']; $typ = ' '.$row['Type']; $fieldtypes[$name] = (!stristr($row['Type'], "ENUM") && ((stristr($row['Type'], "INT") || stristr($row['Type'], "FLOAT") || stristr($row['Type'], "DOUBLE") || stristr($row['Type'], "REAL") || stristr($row['Type'], "DECIMAL") || stristr($row['Type'], "NUMERIC") || stristr($row['Type'], "TIMESTAMP") || stristr($row['Type'], "YEAR"))) ? ("integer") : ("string")); if($row['Null'] == '') $null = ' NOT NULL'; else $null = ' NULL'; if($row['Default'] == '') $default = ''; else $default = " DEFAULT '".$row['Default']."'"; if($row['Extra'] == '') $extra = ''; else $extra = ' '.$row['Extra']; $dump .= " ".$name.$typ.$null.$default.$extra; $i++; if($i < $count) $dump .= ", \n"; } $index = array(); $result = mysql_query('SHOW KEYS FROM '.$table, $connection); while($row = mysql_fetch_array($result)){ $keyname = $row['Key_name']; $comment = (isset($row['Comment'])) ? $row['Comment'] : ''; $sub_part = (isset($row['Sub_part'])) ? $row['Sub_part'] : ''; if($keyname != 'PRIMARY' && $row['Non_unique'] == 0) $keyname = 'UNIQUE|'.$keyname; if($comment == 'FULLTEXT') $keyname = 'FULLTEXT|'.$keyname; if(!isset($index[$keyname])) $index[$keyname] = array(); if($sub_part > 1) $index[$keyname][] = $row['Column_name']."(".$sub_part.")"; else $index[$keyname][] = $row['Column_name']; } mysql_free_result($result); foreach($index as $keyname => $columns){ $dump .= ", \n"; if($keyname == "PRIMARY") $dump .= " PRIMARY KEY ("; elseif(substr($keyname, 0, 6) == "UNIQUE") $dump .= " UNIQUE ".substr($keyname, 7)." ("; elseif(substr($keyname, 0, 8) == "FULLTEXT") $dump .= " FULLTEXT ".substr($keyname, 9)." ("; else $dump .= " KEY ".$keyname." ("; $dump .= implode($columns, ", ").')'; } $dump .= "\n);\n\n"; // Content $insert_tag = 0; $rowcount = 0; $result = mysql_query('SELECT * FROM '.$table, $connection); while($row = mysql_fetch_array($result, MYSQL_ASSOC)){ $values = ''; foreach($row as $key => $field) if($values != '') $values .= ','.parsefield($field, $fieldtypes[$key]); else $values = parsefield($field, $fieldtypes[$key]); if($insert_tag == 0){ $dump .= 'INSERT INTO '.$table.' VALUES ('.$values.')'; $insert_tag = 1; }else $dump .= ',('.$values.')'; if($insert_tag == 1 && $rowcount == 500){ $dump .= ";\n"; $insert_tag = 0; $rowcount = 0; } $rowcount++; } mysql_free_result($result); if($insert_tag == 1) $dump .= ";\n"; return $dump; } ?> |
Beispiel
Diese Beispiel exportiert alle Tabellen (nacheinander in einer Schleife) einer Datenbank. Zuerst wird eine Verbindung zur Datenbank hergestellt (Parameter ändern!) und anschließend der Dump ausgegeben.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $mysqlconnect = mysql_connect('localhost', 'root', ''); $result = mysql_list_tables('datenbank', $mysqlconnect); $num_tables = mysql_num_rows($result); for($i=0;$i<$num_tables;$i++){ $table = mysql_tablename($result, $i); echo mysql_export_table($table, $mysqlconnect); } mysql_free_result($result); mysql_close($mysqlconnect); ?> |
Eine Ausgabe könnte wie folgt aussehen:
1 2 3 4 5 6 7 8 9 10 | CREATE TABLE `counter` ( `datum` date NOT NULL default '0000-00-00', `visitors` int(5) NOT NULL default '0', PRIMARY KEY (`datum`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `counter` VALUES ('2005-09-03', 25); INSERT INTO `counter` VALUES ('2005-09-04', 48); INSERT INTO `counter` VALUES ('2005-09-05', 31); # ... |
Fragen oder Probleme? Einfach schnell einen Kommentar schreiben.






16. August 2008 um 13:00 Uhr