Zálohování databáze MySQL a uložení do souboru .sql

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>";
?>

6 komentářů u „Zálohování databáze MySQL a uložení do souboru .sql“

  1. 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

    1. 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_*. 🙂

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *