kostenloser Webspace werbefrei: lima-city


MySQL Backup ohne phpMyAdmin (als Script)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    funspiele

    funspiele hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    funspiele

    funspiele hat kostenlosen Webspace.

    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
  5. 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
  6. funspiele schrieb:
    ... selber als Script machen ...
    so:
    <?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`;
    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).

    Beitrag zuletzt geändert: 12.10.2011 23:14:12 von hemiolos
  7. 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
  8. Autor dieses Themas

    funspiele

    funspiele hat kostenlosen Webspace.

    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
  9. funspiele schrieb:
    ... ganz minimal ...
    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
  10. 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
  11. anlagegeld schrieb:
    funspiele schrieb:
    nur hab ich keinen Server-Root Zugriff, nur Webspace,
    ahaa! das hast du also noch lesen können!?

    @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`;
    ohhh! und das hast du also nicht ganz fertig lesen können!?

    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 ;)
  12. 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
  13. anlagegeld schrieb:
    ehrlich gesagt hab ich von mysqldump gar keine Ahnung
    ;)) und kein weiterer kommentar

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

    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
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!