Benutzer-Werkzeuge

Webseiten-Werkzeuge


php:mysql_backup

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

php:mysql_backup [2012/08/12 14:00] (aktuell)
ben angelegt
Zeile 1: Zeile 1:
 +====== Mit PHP ein MYSQL Backup erzeugen ======
 +Es gibt eine Situation, die du niemals haben willst. Alles ist kaputt und du hast kein Backup!
  
 +Ok, den Quellcode hat man vielleicht nochmal auf dem eigenen Rechner. Aber wer hat bitte die komplette Datenbank immer auf seinen Rechner als Backup parat? 
 +
 +Manche Webhoster bieten regelmäßige Backups als Service an, aber willst du dich im Notfall wirklich darauf verlassen? Und was ist, wenn dieser am Wochenende nicht erreichbar ist? 
 +Wie auch immer mit dem folgenden Script, kannst du jederzeit ein Backup deiner MYSQL DB ziehen. 
 +
 +**Tip**: Mit Hilfe eines Chronjobs könntest du so selbst täglich oder sogar stündlich ein Backup anlegen.
 +
 +<code java>
 +
 +/* backup the db OR just a table */
 +function backup_tables($host,$user,$pass,$name,$tables = '*')
 +{
 +  
 +  $link = mysql_connect($host,$user,$pass);
 +  mysql_select_db($name,$link);
 +  $return = "";
 +  
 +  //get all of the tables
 +  if($tables == '*')
 +  {
 +    $tables = array();
 +    $result = mysql_query('SHOW TABLES');
 +    while($row = mysql_fetch_row($result))
 +    {
 +      $tables[] = $row[0];
 +    }
 +  }
 +  else
 +  {
 +    $tables = is_array($tables) ? $tables : explode(',',$tables);
 +  }
 +  
 +  //cycle through
 +  foreach($tables as $table)
 +  {
 +    $result = mysql_query('SELECT * FROM '.$table);
 +    $num_fields = mysql_num_fields($result);
 +    
 +    $return.= 'DROP TABLE '.$table.';';
 +    $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
 +    $return.= "\n\n".$row2[1].";\n\n";
 +    
 +    for ($i = 0; $i < $num_fields; $i++) 
 +    {
 +      while($row = mysql_fetch_row($result))
 +      {
 +        $return.= 'INSERT INTO '.$table.' VALUES(';
 +        for($j=0; $j<$num_fields; $j++) 
 +        {
 +          $row[$j] = addslashes($row[$j]);
 +          $row[$j] = ereg_replace("\n","\\n",$row[$j]);
 +          if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
 +          if ($j<($num_fields-1)) { $return.= ','; }
 +        }
 +        $return.= ");\n";
 +      }
 +    }
 +    $return.="\n\n\n";
 +  }
 +  return $return;
 +}
 +  //do a backup
 +  $backup = backup_tables('localhost','username','password','blog');
 +  //save file
 +  $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
 +  fwrite($handle,$backup);
 +  fclose($handle);
 +</code>
 +
 +Natürlich musst du deine eigenen Zugangsdaten für die Datenbank verwenden und entweder ein Array an zu sichernden Tabellen angeben oder ein * für alle Tabellen. 
 +Das Script erledigt den Rest.
 +
 +Sicher oft oder zahl den Preis später!
php/mysql_backup.txt · Zuletzt geändert: 2012/08/12 14:00 von ben