Avatar billede nemlig Professor
16. november 2007 - 19:39 Der er 3 kommentarer og
1 løsning

Script til backup af MySQL driller

Hej.
Jeg har nedenstående script, som tager backup af de tabeller, der er defineret nederst i koden.
Det virker fint hos one.com, web2u.dk + et par andre servere, men hos web10.dk, får den ikke alle tabeller og poster med. Umiddelbart ser det ud til, at alt funger, men når jeg åbner den downloadede fil, viser det sig, at den er stoppet midt i en post - og det er forskelligt hver gang.
Nogen der har et forslag til løsning???

Den fuldstændige kode er her:


<?php
include("tool/tool.php");
$config = ini();
mysql_connect($config[db_serv],$config[db_user],$config[db_pass]) or die (mysql_error());
mysql_select_db($config[db_base]) or die (mysql_error());


//ret herunder
$dbhost = $config[db_serv]; // Angiv din host til MySQL?
$dbuname = $config[db_user]; // Dit Brugernavn?
$dbpass = $config[db_pass]; // Dit Password?
$dbname = $config[db_base]; // Angiv Database navn

/* 
Dette script generer en txt fil til download med et fuldstændigt dump af din database. Det er en modifikation af backup scriptet der følger med PHPnuke. 

Hvordan bruger jeg det: 
''''''''''''''''''''''' 
Ret oplysningerne nedenfor. Lav en fil og kald den hvad du vil. Når du aktiverer filen, vil scriptet tage backup af din database - nemt ik ;o). 
*/ 


//ret intet herunder 

  @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);

      //Medtag kun udvalgte tabeller
      if($table == "kalender_user" || $table == "kalender_set" || $table == "kalender_log" || $table == "fakturanumre" || $table == "kalender_kontrakt" || $table == "kalender_forbrugssatser" || $table == "kalender_aftale" || $table == "kalender" || $table == "kundeliste")
      {
         
        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 jakobdo Ekspert
16. november 2007 - 20:03 #1
Kan det tænkes scriptet måske timer ud?
Og hvis databasen er forskelligt belastet, så forklarer det de forskellige længder på filen.
Avatar billede nemlig Professor
16. november 2007 - 20:26 #2
Fra jeg klikker gem, til filen er gemt, går der ca. 1 sekund. Er det ikke hurtigt for en timeout???
Avatar billede jakobdo Ekspert
16. november 2007 - 22:01 #3
Tjo, det må man sige. :o)
Avatar billede nemlig Professor
20. december 2007 - 14:38 #4
Efter at systemet er flyttet fra Web10 til Web2u, virker de fint igen.
Jeg lukker.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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