MySQL Backup ohne phpMyAdmin (als Script)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
betreiben
code
datei
datenbank
ergebnis
erstellung
funktion
host
http
inhalt
mache
null
problem
server
struktur
tabelle
url
windows
zugriff
-
Hallo
wie kann ich von einer MySQL DB ein Backup machen ohne PHPMyAdmin
gibt es dafür ein fertiges (brauchbares aber nicht aufgeblasenes) Script
oder wie kann ich mir das selber als Script machen?
1. Alle verfügbaren Tabellen herausfinden --> Tabellennamen in Array
2. foreach ( Tabellennamen as Tabelle) --> SQL als .txt Datei erzeugen mit CREATE und allen INSERTs
3. Links zum Download der erzeugten .txt Dateien
Könnt Ihr mir dafür evtl. ein Script empfehlen?
Alles was ich bisher gefunden habe ist total aufgeblasen und kann viel zu viel
ich will einfach nur nen ganz simplen MySQL Backup ... ohne großes drumherum
Danke -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo,
schau dir mal "mysqldump" das Tool sollte deinen Vorstellungen entsprechen.
Der Client mysqldump ist ein Sicherungsprogramm, das ursprünglich von Igor Romanenko geschrieben wurde. Er kann zur Erstellung eines Speicherauszugs einer Datenbank oder einer Sammlung von Datenbanken zu Sicherungszwecken oder zur Übertragung von Daten auf einen anderen SQL-Server verwendet werden (dies muss nicht unbedingt ein MySQL Server sein). Der Speicherauszug enthält SQL-Anweisungen zur Erstellung und/oder zum Ausfüllen einer Tabelle.
Gruß
illuxio -
nur hab ich keinen Server-Root Zugriff, nur Webspace,
also komme ich mit exec oder shell Befehl nicht weiter
ich brauche schon PHP-Code, der mit "normaler" MySQL Verbindung funktioniert
ich aknn es mir auch selber Scripten denke ich, aber sowas wird es doch schon geben
also muss ich das Rad nicht neu erfinden, sondern hoffe auf ne Funktion die das kann
-
funspiele schrieb:
nur hab ich keinen Server-Root Zugriff, nur Webspace,
also komme ich mit exec oder shell Befehl nicht weiter
Sehe das Problem nicht? mysqldump installierst du auf dem Rechner von wo aus du das Backup mache willst. Z.B. mache ich mit dem Tool auch die Backups von meiner Lima-City-Datenbank. Geht schnel einfach und ist minimal...
Auf dem Server muss du nichts machen.
Gruß
illuxio -
funspiele schrieb:
so:
... selber als Script machen ...
das macht im browserfenster ein dump von allen dbs. es funktioniert nur, wenn du einen (L)AMP server dein eigen nennst (gemeint ist bei dir zu hause, also localhost).<?php // gibt manpage zu mysqldump aus #echo '<pre>' . `man mysqldump 2>&1`; #exit(); // gibt help zu mysqldump aus #echo '<pre>' . `mysqldump --help 2>&1`; #exit(); // dummp all databases $host = 'mysql.lima-city.de'; // das kann bleiben $user = 'USER******'; // das musst du editieren $db = ' --all-databases'; // db_******_n $pw = '<paassword>'; // das weißt nur du (hoffentlich ;) echo '<pre>' . `mysqldump --host=$host --user=$user --password=$pw $db 2>&1`;
Beitrag zuletzt geändert: 12.10.2011 23:14:12 von hemiolos -
Wenn es denn etwas komfortabler sein darf und auch auf "normalem" Webspace funktionieren soll, würde ich MySQLdumper empfehlen. Damit gibt es auch bei größeren Datenbanken kein Problem mit der Laufzeitbeschränkung von PHP-Skripten.
Beitrag zuletzt geändert: 13.10.2011 1:45:02 von fatfreddy -
Ja MySQLdumper ist ganz nett, aber ich will es "kleiner" .. ganz minimal
so dass ich es ganz einfach in bereits bestehende Scripte als Backup-Funktion einbauen kann
Habe es jetzt so ... mit 2 Funktionen, eine für Tabellen-Struktur und andere für Tabellen-Daten
<?php require_once('config.php'); // ---- Datenbank Zugangsdaten $db_host, $db_user, $db_pass, $db_name ----- $con = mysql_connect($db_host, $db_user, $db_pass); if (!$con) { echo "<br />Could not connect: <br />\r\n" . mysql_error(); exit; } $sel = mysql_select_db($db_name, $con); $db_tabelle1 = 'prefix_kategorien'; $db_tabelle2 = 'prefix_artikel'; // -------------------------------------- function myquery($sql, $mysql=$con) { $data = array(); $result = mysql_query($sql, $mysql) or die(mysql_error()); while ( false!==($row=mysql_fetch_array($result, MYSQL_NUM)) ) { $data[] = $row; } return $data; } // -------------------------------------- function get_data($tabelle, $mysql=$con, $null='false') { $d = null; $rdata = mysql_query("SELECT * FROM `" . $tabelle . "`", $mysql) or $this->error(mysql_error()); while($cr = mysql_fetch_array($rdata, MYSQL_NUM)) { $d .= "INSERT INTO `" . $tabelle . "` VALUES ("; for($i=0; $i<sizeof($cr); $i++) { if($null !== false && $cr[$i] == '') { $d .= 'NULL,'; } else { $d .= "'$cr[$i]',"; } } $d = substr($d, 0, strlen($d) - 1); // ---- letztes Komma entfernen ---- $d .= ");\n"; } return($d); } // -------------------------------------- $erg1 = myquery("SHOW CREATE TABLE $db_tabelle2", $con); echo "<pre>\r\n"; print_r($erg1[0][1]); echo "\r\n</pre>\r\n"; // -------------------------------------- $erg2 = get_data($db_tabelle2, $con, 'false' ); echo "<pre>\r\n"; print_r($erg2); echo "\r\n</pre>\r\n"; // -------------------------------------- mysql_close(); ?>
anstatt Ausgabe mit print_r() dann einfach beide Ergebnisse in eine .txt Datei schreiben fwrite()
anstatt direkt mit einen Tabellenname zu arbeiten,
könnte mannoch ne Schleife drum herum bauen
um alle Tabellen durchlaufen aus der Datenbak (oder als Liste aus Array)
EDIT: bei Struktur $erg1[0][1] muss man am Ende (im SQL) noch ein Semikolon ; anhängen
Ergebnisse sehen bisher ganz gut aus, oder entdeckt jemand noch Fehler ?
Danke
Beitrag zuletzt geändert: 13.10.2011 13:48:57 von funspiele -
funspiele schrieb:
ich dachte, ich habe es minimal genug gezeigt (ausprogrammieren ist leider nicht drin). wenn du doch noch ein paar fertige progs ansehen willst: hotscripts.com
... ganz minimal ... -
funspiele schrieb:
nur hab ich keinen Server-Root Zugriff, nur Webspace,
@hemiolos ich glaub deshalb ist das (auch wenns gut ist) in diesem Fall nicht einsetzbar
echo '<pre>' . `mysqldump --host=$host --user=$user --password=$pw $db 2>&1`;
oder funktioniert mysqldump auf Lima-City Webspace ?? glaube mal nicht
hier das Script mit Auswahl aller Tabellen in der DB .... function get_tables()
.... und mit .sql Datei-Erstellung ... fwrite()
<?php // ------------------ config -------------------- $db_host = 'xxxxxxxxxx'; $db_user = 'yyyyyyyyyyyy'; $db_pass = 'zzzzzzzzzz'; $db_name = 'abcabcabc'; $backupfile = '_dump_'.$db_name.'.sql'; // ---------------mysql connect ------------------ $con = mysql_connect($db_host, $db_user, $db_pass); if (!$con) { echo "<br />Could not connect: <br />\r\n" . mysql_error(); exit; } $sel = mysql_select_db($db_name, $con); // -------------- function myquery --------------- function myquery($sql, $mysql) { $data = array(); $result = mysql_query($sql, $mysql) or die(mysql_error()); while ( false !== ($row = mysql_fetch_array($result, MYSQL_NUM)) ) { $data[] = $row; } return $data; } // ------------ function get_data ---------------- function get_data($tabelle, $mysql, $null='false') { $d = null; $rdata = mysql_query("SELECT * FROM `" . $tabelle . "`", $mysql) or $this->error(mysql_error()); while($cr = mysql_fetch_array($rdata, MYSQL_NUM)) { $d .= "INSERT INTO `" . $tabelle . "` VALUES ("; for($i=0; $i<sizeof($cr); $i++) { if($null !== false && $cr[$i] == '') { $d .= 'NULL,'; } else { $d .= "'$cr[$i]',"; } } $d = substr($d, 0, strlen($d) - 1); // ---- letztes Komma entfernen ---- $d .= ");\n"; } return($d); } // ----------- function get_tables -------------- function get_tables($name, $mysql) { $tables = array(); $tablesResult = mysql_query("SHOW TABLES FROM `".$name."`", $mysql); while ($row = mysql_fetch_row($tablesResult)) { $tables[] = $row[0]; } return $tables; } // ------------------------------------------------- // ------------------------------------------------- $tabliste = get_tables($db_name, $con); echo "<pre>\r\n"; print_r($tabliste); echo "\r\n</pre>\r\n"; // ------------------------------------------------- $rundate = date('Y-m-d H:i:s',time()); $handle = fopen($backupfile,"w",0755); $dumpinfo = "###### MySQL DUMP ### ".$db_name." ### ".$rundate." ######\n\n\n"; fwrite($handle,$dumpinfo); // -------------------------------------- foreach($tabliste as $tabelle) { // ----------- Struktur ----------- $erg1 = myquery("SHOW CREATE TABLE $tabelle", $con); $tab_struktur = $erg1[0][1].';'; ## echo "<pre>\r\n"; ## print_r($tab_struktur); ## echo "\r\n</pre>\r\n"; fwrite($handle,"\n###### ".$tabelle." ######\n\n"); fwrite($handle,$tab_struktur."\n\n\n"); // ----------- Inhalte ----------- $erg2 = get_data($tabelle, $con, 'false' ); $tab_inhalte = $erg2; ## echo "<pre>\r\n"; ## print_r($tab_inhalte); ## echo "\r\n</pre>\r\n"; fwrite($handle,$tab_inhalte."\n\n\n"); } // ------------------------------------------------- fclose($handle); echo "<br /> DUMP File: <a href=\"".$backupfile."\">".$backupfile."</a> --- ".$db_name." --- ".$rundate." <br />\r\n"; mysql_close(); // -------------------------------------- ?>
man könnte in die Datei $backupfile noch den Timestamp unterbringen
dann werden alte Backups nicht überschrieben
$tsmp = time();
$backupfile = '_dump_'.$db_name.'_'.$tsmp.'.sql';
aber dann aufpassen, dass sich nicht zu viele Dateien am Webspache ansammeln
je Aufruf dann neue Datei .... mit dem gesamten DB Inhalt inkl. Struktur
eigentlich ja ne coole Sache, so ein Mini-SQL-Dumper :)
Beitrag zuletzt geändert: 14.10.2011 17:16:23 von anlagegeld -
anlagegeld schrieb:
ahaa! das hast du also noch lesen können!?
funspiele schrieb:
nur hab ich keinen Server-Root Zugriff, nur Webspace,
@hemiolos ich glaub deshalb ist das (auch wenns gut ist) in diesem Fall nicht einsetzbar
ohhh! und das hast du also nicht ganz fertig lesen können!?
echo '<pre>' . `mysqldump --host=$host --user=$user --password=$pw $db 2>&1`;
oder funktioniert mysqldump auf Lima-City Webspace ?? glaube mal nicht
so eine frage kann von einem stammen, der zwischen remote-server mit root zugriff und localhost nicht unterscheiden kann. oder aber liest hier nicht alle beiträge mit der nötigen aufmerksamkeit.
no dann nochmals, langsam, zum mitschreiben, nur für dich:
sql-dump von lima kann gemütlich zu hause auf dem eigenen rechner durchgeführt werden. ja sogar man kann das ergebnis direkt auf der festplatte von deinem localhost speichern.
(im unterschied zum obigen geht das dann so [kaum ein unterschied]:
)echo '<pre>' . `mysqldump --host=$host --user=$user --password=$pw $db > /tmp/lima_dump.sql 2>&1`;
und wenn du mit mysqldump wirklich gut umgehen kannst, hast noch 1, 2 andere nette möglichkeiten ;) -
ehrlich gesagt hab ich von mysqldump gar keine Ahnung
aber ich finde es bischen übertrieben, nur wegen mysql backup einen lokalen server zu betreiben (XAMP)
da ist dann ein Login in PHPMyAdmin doch einfacher
.... oder halt so ein Script wie von funspiele, das ich ja nur bischen aufgebohrt habe
---> er schreibt ja auch, dass er es in sein PHP Script als Funktion einbauen will
und die Lösung hat er dann ja auch selbst quasi fast fertig geschrieben
ein MySQL Backup direkt am Webspace klingt für mich nicht gerade nach Einsatz von localhost
sondern eben direkt am Webspace als PHP-Script .... was ja, wie es oben steht, nicht schlecht ist
Die kleine Erweiterung habe ich dann gemacht, weil ich sein Script ganz gut fand, funktioniert
-
anlagegeld schrieb:
;)) und kein weiterer kommentar
ehrlich gesagt hab ich von mysqldump gar keine Ahnung
aber ich finde es bischen übertrieben, nur wegen mysql backup einen lokalen server zu betreiben (XAMP)
XAMPP - aha! also windows. (davon ist bei mir eigentlich nie die rede, ich betreibe [L]AMP ;) dann ist natürlich dein sicherheitskonzept eindeutig: passwort aufschreiben und unter die tastatuer legen! man möchte bitte nicht lachen! das war der vorschlag vom microsoft sicherheitsboss vor etlichen jahren (die ganze welt lachte schallend ;)
da ist dann ein Login in PHPMyAdmin doch einfacher
demgegenüber:
wenn ich auf der (physisch) selben machine eine sicherung mache (wie du das dir vorstellst) dann kann sich bald wiederholen, was bei lima vor ~1jahr der fall war:
man ist eingebrochen, man hat etliche accounts ausgeräumt und dann haben etliche leute so ziemlich doof aus der wäsche geguckt ;)
fazit: man sichert so einen server besser remote und genau das ist der sinn meines bescheidenen vorschlages.
sollte man das (noch immer) nicht verstehen, möchte man bitte ruhig ausharren und auf den nächsten 'unfall' warten. dann ist man eventuell selber betroffen und ... ja ... was weiß ich?
.... oder halt so ein Script wie von funspiele, das ich ja nur bischen aufgebohrt habe
wobei das ja 'funktioniert', wegen sicherheitskonzepte ist das ganze indiskutabel! nebenbei: beide lösungen sind nicht wiederverwertbar, weil/daher spaghetticode!
(viel spaß weiterhin beim windows-betreiben ;)
Beitrag zuletzt geändert: 20.10.2011 5:59:02 von hemiolos -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage