Autor Zpráva
Cakewalk
Profil
Dobrý den,
uměl by někdo upravit script na automatické zálohování databáze?
Našel jsem tento jediný funkční script:

<?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="localhost";
$jmenodb="jmeno.database.cz";
$heslodb="heslo";
$db="jmeno_database_cz";

mysql_connect($hostiteldb, $jmenodb, $heslodb);
mysql_query("SET NAMES 'utf8'");
mysql_select_db($db);

$text = zalohuj($db,"zaloha_mysql".date("-d-m-Y").".sql");

?>


Uměl by někdo upravit tento kód, aby se soubor automaticky komprimoval do zip nebo gz.
Přidal do zálohy i DROP TABLE.
Upravil kód tak, aby byly tyto dvě tabulky stejné.

backup databáze tak jak ho potřebuji:


DROP TABLE IF EXISTS `d3_backup`;
CREATE TABLE `d3_backup` (
  `settings` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

#
# Dumping data for table `d3_backup`
#

INSERT INTO `d3_backup` VALUES ('a:3:{i:0;s:1:\"Y\";i:1;s:1:\"Y\";i:2;s:1:\"1\";}');


#
# Table structure for table `d3_boxes`
#

DROP TABLE IF EXISTS `d3_boxes`;
CREATE TABLE `d3_boxes` (
  `box_id` bigint(20) NOT NULL auto_increment,
  `box_name` varchar(255) default NULL,
  `theorder` int(20) NOT NULL default '0',
  `side` varchar(20) NOT NULL default 'left',
  `show` varchar(20) NOT NULL default 'links',
  `content` text,
  `fed_update` int(10) NOT NULL default '3600',
  `fed_item` int(10) NOT NULL default '0',
  `strip_html` varchar(5) NOT NULL default 'false',
  `user` varchar(25) NOT NULL default 'all',
  `direction` varchar(5) NOT NULL default 'up',
  `enabled` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`box_id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;



backup databáze přes výše uvedený script

--
-- Struktura tabulky d3_backup
--

CREATE TABLE `d3_backup`(
`settings` text NOT NULL
) ENGINE=MyISAM COLLATE=utf8_general_ci;

--
-- Data tabulky d3_backup
--


INSERT INTO `d3_backup` VALUES('a:3:{i:0;s:1:\"Y\";i:1;s:1:\"Y\";i:2;s:1:\"1\";}');--
-- Struktura tabulky d3_boxes
--

CREATE TABLE `d3_boxes`(
`box_id` bigint(20) NOT NULL auto_increment,
`box_name` varchar(255) NULL,
`theorder` int(20) NOT NULL,
`side` varchar(20) NOT NULL DEFAULT 'left',
`show` varchar(20) NOT NULL DEFAULT 'links',
`content` text NULL,
`fed_update` int(10) NOT NULL DEFAULT '3600',
`fed_item` int(10) NOT NULL,
`strip_html` varchar(5) NOT NULL DEFAULT 'false',
`user` varchar(25) NOT NULL DEFAULT 'all',
`direction` varchar(5) NOT NULL DEFAULT 'up',
`enabled` tinyint(1) NOT NULL
) ENGINE=MyISAM COLLATE=utf8_general_ci;



Předem díky za všechny rady.
__construct
Profil
Cakewalk:
Uměl by někdo upravit tento kód, aby se soubor automaticky komprimoval do zip nebo gz.
Přidal do zálohy i DROP TABLE.
Upravil kód tak, aby byly tyto dvě tabulky stejné.
Určite vedel — na to je tu sekcia Práce a zakázky. Pokiaľ, ale chceš pomôcť, napíš s čím si nevieš rady.
Cakewalk
Profil
No potřeboval bych aby výstupní záloha byla komprimovaná. Něco jako toto, ale nevím, jak to mám zavést do toto scriptu:

function gzcompressfile($source,$level=false)
{
	$dest=$source.'.gz';
	$mode='wb'.$level;
	$error=false;
	if($fp_out=gzopen($dest,$mode))
	{
		if($fp_in=fopen($source,'rb'))
		{
			while(!feof($fp_in))gzwrite($fp_out,fread($fp_in,4096));
			fclose($fp_in);
		}
		else $error=true;
		gzclose($fp_out);
	}
	else $error=true;
	if($error) return false;
	else return $dest;
} 


No a nevím, jakým způsobem mám do zálohy zavést DROP TABLE. Navíc ty zálohy se v některých kritériích liší, potřeboval bych, aby byly stejné.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0