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 🙂