Avatar billede d.kryger Praktikant
28. april 2004 - 09:10 Der er 11 kommentarer og
1 løsning

Backup af MySql

Hej Eksperter

Jeg bruger nedenstående kode for at tage en backup af min database. Det skal lige siges at databasen er forholdsvis stor (4 MB).

Når jeg kører scriptet, skriver den følgende i bunden af sql-filen: <b>  </b><p>Lost connection to MySQL server during query<br><a href="java script:history.go(-1)"></a>

Den har ikke taget alt med i databasen... Jeg har prøvet at rette i dette: @set_time_limit(600);

Jeg satte det til 1000000, uden at det hjalp... Hvad skal jeg gøre?

Hele koden:
  $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 ("Y-m-d");

  header("Content-disposition: filename=Pro-Plan $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 $tables 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 riversen Nybegynder
28. april 2004 - 09:13 #1
hvis du har din egen server, kan du selv rette timelimit i php og måske også mysql og apache
Avatar billede riversen Nybegynder
28. april 2004 - 09:14 #2
i php.ini
Avatar billede d.kryger Praktikant
28. april 2004 - 09:14 #3
Det har jeg ikke... Kan jeg så ikke gøre det?
Avatar billede riversen Nybegynder
28. april 2004 - 09:16 #4
nopes... formentlig ikke. Men så har du vel adgang via phpmyadmin til at lave en export med
Avatar billede d.kryger Praktikant
28. april 2004 - 09:43 #5
Ja, men jeg ville helst gøre det via det andet script...
Avatar billede coderdk Praktikant
28. april 2004 - 09:59 #6
Du skulle vel ikke have shell-adgang? For så er det nemmeste jo klart at bruge mysqldump... :)
Avatar billede d.kryger Praktikant
28. april 2004 - 10:01 #7
Shell-adgang? Hvad er det?
Avatar billede riversen Nybegynder
28. april 2004 - 10:49 #8
shell = kommandoprompt
Avatar billede riversen Nybegynder
28. april 2004 - 10:49 #9
d.kryger: hvis du absolut vil bruge dit eget script, må du vel dele det op i bidder.
Avatar billede d.kryger Praktikant
03. maj 2004 - 10:00 #10
Da jeg stadig ikke kan få det til at virke så bruger jeg bare phpmyadmin.
Riversen, løg et svar og du får point. Er det ok?
Avatar billede d.kryger Praktikant
27. maj 2004 - 10:45 #11
Tager selv point igen så...
Avatar billede riversen Nybegynder
27. maj 2004 - 13:41 #12
iorden
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