Avatar billede basketball Nybegynder
06. maj 2004 - 13:08 Der er 2 kommentarer og
1 løsning

Back up

Hejsa,

Jeg benytter i skrivende stund nedenstående script til at tage backup af min SQL. Jeg gør det jævnligt, men er stødt på en ting der undre mig meget. Databasen har det naturligvis med at blive større og større jo mere der kommer ind, og min backups blev da også større og større.. Men efter den sidste backup på ca. 8 mb, har jeg hvergang kun lavet backups på ca. 400 kb.. Syntes det er mærkeligt de er blevet så meget mindre selvom der stadigvæk bør komme mere på.. Nogen der har en god forklaring?

______________
<?php
   
  $dbhost = "";
  $dbuname = "";
  $dbpass = "";
  $dbname = "";

  @set_time_limit(600);
  $crlf="\n";

  // Danish Text   
  $strNoTablesFound = "Ingen databasetabeller fundet";
  $strHost = "Host";
  $strDatabase = "Database ";
  $strTableStructure = "Struktur for tabel";
  $strDumpingData = "Indhold af tabel";
  $strError = "Fejl";
  $strSQLQuery = "SQL-query";
  $strMySQLSaid = "MySQL: ";
  $strBack = "Tilbage";
  $strFileName = "DB-dump";
  $strName = "Backup af database";
  $strDone = "Downloadet d.";
  $strat = "kl.";
  $date_jour = date ("d-m-Y");       
       
  header("Content-disposition: filename=$strFileName $dbname $date_jour.sql");
  header("Content-type: application/ms-download");
  header("Pragma: no-cache");
  header("Expires: 0");
       
  // doing some DOS-CRLF magic...
  $client = getenv("HTTP_USER_AGENT");
  if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs))
  {
    $os = $regs[1];
    // this looks better under WinX
    if (eregi("Win",$os))
      $crlf="\r\n";
  }
       
       
  function my_handler($sql_insert)
  {
    global $crlf;
    echo "$sql_insert;$crlf";
  }
       
  // Get the content of $table as a series of INSERT statements.
  // After every row, a custom callback function $handler gets called.
  // $handler must accept one parameter ($sql_insert);
  function get_table_content($db, $table, $handler)
  {
    $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
    $i = 0;
    while($row = mysql_fetch_row($result))
    {
      $table_list = "(";
       
      for($j=0; $j<mysql_num_fields($result);$j++)
                    $table_list .= mysql_field_name($result,$j).", ";
       
      $table_list = substr($table_list,0,-2);
      $table_list .= ")";
       
      if(isset($GLOBALS["showcolumns"]))
        $schema_insert = "INSERT INTO $table $table_list VALUES (";
      else
        $schema_insert = "INSERT INTO $table VALUES (";
       
      for($j=0; $j<mysql_num_fields($result);$j++)
      {
        if(!isset($row[$j]))
          $schema_insert .= " NULL,";
        elseif($row[$j] != "")
          $schema_insert .= " '".addslashes($row[$j])."',";
        else
          $schema_insert .= " '',";
      }
      $schema_insert = ereg_replace(",$", "", $schema_insert);
      $schema_insert .= ")";
      $handler(trim($schema_insert));
      $i++;
    }
    return (true);
  }
       
  // Return $table's CREATE definition
  // Returns a string containing the CREATE statement on success
  function get_table_def($db, $table, $crlf)
  {
    $schema_create = "";
    $schema_create .= "DROP TABLE IF EXISTS $table; CREATE TABLE $table ($crlf";
       
    $result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die();
    while($row = mysql_fetch_array($result))
    {
      $schema_create .= "  $row[Field] $row[Type]";
       
      if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0"))
        $schema_create .= " DEFAULT '$row[Default]'";
      if($row["Null"] != "YES")
        $schema_create .= " NOT NULL";
      if($row["Extra"] != "")
        $schema_create .= " $row[Extra]";
      $schema_create .= ",$crlf";
    }
    $schema_create = ereg_replace(",".$crlf."$", "", $schema_create);
    $result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();
    while($row = mysql_fetch_array($result))
    {
      $kname=$row['Key_name'];
      if(($kname != "PRIMARY") && ($row['Non_unique'] == 0))
        $kname="UNIQUE|$kname";
      if(!isset($index[$kname]))
        $index[$kname] = array();
      $index[$kname][] = $row['Column_name'];
    }
       
    while(list($x, $columns) = @each($index))
    {
      $schema_create .= ",$crlf";
      if($x == "PRIMARY")
        $schema_create .= "  PRIMARY KEY (" . implode($columns, ", ") . ")";
      elseif (substr($x,0,6) == "UNIQUE")
        $schema_create .= "  UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
      else
        $schema_create .= "  KEY $x (" . implode($columns, ", ") . ")";
    }
       
    $schema_create .= "$crlf)";
    return (stripslashes($schema_create));
  }
       
  function mysql_die($error = "")
  {
    echo "<b> $strError </b><p>";
    if(isset($sql_query) && !empty($sql_query))
    {
      echo "$strSQLQuery: <pre>$sql_query</pre><p>";
    }
    if(empty($error))
      echo $strMySQLSaid.mysql_error();
    else
      echo $strMySQLSaid.$error;
    echo "<br><a href=\"java script:history.go(-1)\">$strBack</a>";
    exit;
  }
       
  global $bruger, $dbhost, $dbuname, $dbpass, $dbname;
  mysql_connect($dbhost, $dbuname, $dbpass);
  @mysql_select_db("$dbname") or die ("Kunne ikke forbinde til databasen");
       
  $tables = mysql_list_tables($dbname);
       
  $num_tables = @mysql_numrows($tables);
  if($num_tables == 0)
  {
    echo $strNoTablesFound;
  }
  else
  {
    $i = 0;
    $heure_jour = date ("H:i");
    print "# ========================================================$crlf";
    print "#$crlf";
    print "# $strName : $dbname$crlf";
    print "# $strDone $date_jour $strat $heure_jour $crlf";
    print "#$crlf";
    print "# ========================================================$crlf";
    print "$crlf";
           
    while($i < $num_tables)
    {
      $table = mysql_tablename($tables, $i);
       
      print $crlf;
      print "# --------------------------------------------------------$crlf";
      print "#$crlf";
      print "# $strTableStructure '$table'$crlf";
      print "#$crlf";
      print $crlf;
       
      echo get_table_def($dbname, $table, $crlf).";$crlf$crlf";
               
      print "#$crlf";
      print "# $strDumpingData '$table'$crlf";
      print "#$crlf";
      print $crlf;
           
      get_table_content($dbname, $table, "my_handler");
       
      $i++;
    }
  }
       
?>
Avatar billede basketball Nybegynder
04. juli 2004 - 18:45 #1
lukker
Avatar billede learner Praktikant
31. marts 2005 - 19:59 #2
Hej, duer det script som det skal, for jeg overvejer at lave en daglig backup og backupfilerne i 7-14 dage i /backup/

Har du erfaring med det?
Avatar billede learner Praktikant
31. marts 2005 - 20:00 #3
Hej, duer det script som det skal, for jeg overvejer at lave en daglig backup og gemme backupfilerne i 7-14 dage i /backup/

Har du erfaring med det?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester