Dneska jsem na internetu narazil na zajímavý PHP skript, který Vám zazálohuje databázi MySQL a soubor ve formátu .sql uloží do souboru. Sám tento skript už používám.
Upravil jsem si ho tak, aby generoval název ve tvaru mysql-zaloha-21-03-2015_09-17-28_PM.sql. Takže přímo vím, ze kdy záloha DB pochází. Navíc tenhle skript spouštím pomocí cronu jednou za 12 hodin, takže se o nic nestarám a vše se mi zálohuje samo.
Bezva!
Stačí si v dolní části upravit jenom adresu serveru, název DB, jméno a heslo:
<?php function zalohuj($db,$soubor=""){ $text=""; function keys($prefix,$array){ $array=Array(); $radky=""; $pocet = count($array); $posledni = $pocet-1; if($pocet == 0) return; for($i = 0; $i<$pocet; $i++){ if($i != $posledni) $carka = ","; else $carka = ""; $radky .= "`$array[$i]`$carka"; } return ",\n$prefix($radky)"; } $sql = mysql_query("SHOW TABLE STATUS FROM $db"); while($data = mysql_fetch_array($sql)){ $PRI=$UNI=$MUL=""; $text .= "--\n-- Struktura tabulky $data[0]\n--\n\n"; $text .= "CREATE TABLE `$data[0]`(\n"; $sqll = mysql_query("show columns from $data[0]") or die ("Nastala chyba: " . mysql_error()); $e = true; while($dataa = mysql_fetch_array($sqll)){ if($e){ $e = false; } else $text .= ",\n"; $null = ($dataa[2] == "NO")? "NOT NULL":"NULL"; $default = !empty($dataa[4])? " DEFAULT '$dataa[4]'":false; if($default == " DEFAULT 'CURRENT_TIMESTAMP'") $default = " DEFAULT CURRENT_TIMESTAMP"; if($dataa[3] == "PRI") $PRI[] = $dataa[0]; if($dataa[3] == "UNI") $UNI[] = $dataa[0]; if($dataa[3] == "MUL") $MUL[] = $dataa[0]; $extra = !empty($dataa[5])? " ".$dataa[5]:false; $text .= "`$dataa[0]` $dataa[1] $null$default$extra"; } $primary = keys("PRIMARY KEY",$PRI); $unique = keys("UNIQUE KEY",$UNI); $mul = keys("INDEX",$MUL); $text .= "$primary$unique$mul\n) ENGINE=$data[Engine] COLLATE=$data[Collation];\n\n"; unset($PRI,$UNI,$MUL); #data $text .= "--\n-- Data tabulky $data[0]\n--\n\n"; $query = mysql_query("SELECT * FROM $data[0]"); while($fetch = mysql_fetch_array($query)){ $values=""; $pocet_sloupcu = count($fetch)/2; $i = 0; while($i < $pocet_sloupcu){ if($i < $pocet_sloupcu-1) $carka = ","; else $carka = ""; $values .= "'".mysql_escape_string($fetch[$i])."'$carka"; $i++; } $text .= "\nINSERT INTO `$data[0]` VALUES($values);"; unset($values); } } if(!empty($soubor)){ $fp = @fopen($soubor,"w+"); $fw = @fwrite($fp,$text); @fclose($fp); } return $text; } $hostiteldb="server"; $jmenodb="uzivatel"; $heslodb="heslo"; $db="databaze"; mysql_connect($hostiteldb, $jmenodb, $heslodb); mysql_query("SET NAMES 'utf8'"); mysql_select_db($db); $text = zalohuj($db,"mysql-zaloha".date("-d-m-Y\_h-i-s\_A").".sql"); echo "<textarea>$text</textarea>"; ?>
Perfektní, funguje to výborně. Díky
To jsem rád. 🙂
Díky, za super kód.
PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /home/lpzalohy/lpzaloha.php:89
Stack trace:
#0 {main}
thrown in /home/lpzalohy/lpzaloha.php on line 89
Ahoj Michale, pravděpodobně používáš na serveru aktuální verzi PHP 7.xx, v rámci které již není možné využívat mysql_* funkce. Je proto nutné skript přepsat do verze s mysqli_*. 🙂
Ahoj,
Děkuji za radu, mrknu na to 🙂
Jinak super provedení skriptu 🙂