Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| — |
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! | ||