Avatar billede fbb Nybegynder
01. marts 2004 - 09:12 Der er 13 kommentarer og
2 løsninger

MySQL dump backup

Hej, jeg sidder og godt vil have en backup af en enkel dump/skrutur med data, i min database, selve tablen hedder arbejde.

Men hvordan gøres dette?
vil helt have den ligger en txt fil ned på min computer, hvis dette ikke kan lade sig gøre, så må den gerne bare lig det i en txt fil på min server/ftp ;)

Det ksal forgå auto, fx en gang om dagen.

Håber en eller anden kan hjælpe!

/FBB
Avatar billede googolplex Novice
01. marts 2004 - 15:11 #1
Du skal bare lægge den op på serveren og så besøge adressen, så tager den backup af din database.

<?php
/*
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 herunder
$dbhost = ""; // Angiv din host til MySQL?
$dbuname = ""; // Dit Brugernavn?
$dbpass = ""; // Dit Password?
$dbname = ""; // Angiv Database navn

//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);
       
      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 fbb Nybegynder
01. marts 2004 - 15:15 #2
Den skal kun tage af en enkelt en, kan det lade sig gøre, eller skal den tage det hele?
Avatar billede googolplex Novice
01. marts 2004 - 15:18 #3
Den snupper det hele, normalt er det hele databaser man er interesseret i. Men den kan uden tvivl tilpasses, jeg har bare ikke tid til det, desværre :(

HUSK at læg den et sikkert sted, ellers kan alle og enhver jo bare besøge filen og få et dump - det ville ikke være heldigt :)
Avatar billede fangel Nybegynder
01. marts 2004 - 17:01 #4
har da også skrevet min egen function til at lave dumps af tabeller (og databaser)... de er hjemmeskrevede, så koden har ikke haft noget peer-review men skulle klare sig... hvis du er intereseret kan jeg godt give et link til en .phps af filen...

Morten
Avatar billede fbb Nybegynder
01. marts 2004 - 17:48 #5
dea_pg hvis dne kan tage en enkelt af gangen, så er jeg meget intereseret..
Avatar billede fangel Nybegynder
01. marts 2004 - 18:21 #6
en enkelt tabel - sagtens...
Avatar billede fangel Nybegynder
01. marts 2004 - 18:30 #7
http://tablelist.fangel.linux.dk/mysql_functions.phps

serveren er min workstation - så den er ikke oppe på alle tider af døgnet !

det er dumpTableData som du skal bruge (og den kræver generateTableFields som også står i filen)

du kan bare inkludere hele filen - der er et par gode funktioner imellem ;)

hvis der er nogen kommentare til koden, så sig til... modtager gerne hjælp - filen er udgivet under GNU/GPL

Morten
Avatar billede fbb Nybegynder
01. marts 2004 - 18:47 #8
Jeg kan ikek helt finde rundt i det, hvor skal jeg skrive min database connect?
Og skal jeg rette en sti (køre på en wannafind.dk webhotel)?

Du skriveR:"du kan bare inkludere hele filen..." i hvad?..
Avatar billede fangel Nybegynder
01. marts 2004 - 19:58 #9
det er bare en funktions bibliotek... tag filen -> gem som -> mysql_functions.php

lav en fil

<?php
include '/sti/til/mysql_functions.php';

mysql_connect('user', 'paswd', 'host');

$dump = dumpTableData('database', 'tabel');

echo "<pre>" . $dump . "</pre>";

?>

eller hvad du nu vil gøre med dump'et

Morten
Avatar billede fbb Nybegynder
01. marts 2004 - 20:01 #10
ok, prøver lige ;)
Avatar billede fbb Nybegynder
01. marts 2004 - 20:06 #11
Den kommer med fejl:
Warning: mysql_connect(): Unknown MySQL Server Host 'frederikbb' (2) in /web/www.frederikbb.dk/www/dump_backup/ArbejdeMySQL.php on line 4

Warning: mysql_query(): Access denied for user: 'www@localhost' (Using password: NO) in /web/www.frederikbb.dk/www/dump_backup/mysql_functions.php on line 157

Warning: mysql_query(): A link to the server could not be established in /web/www.frederikbb.dk/www/dump_backup/mysql_functions.php on line 157
Access denied for user: 'www@localhost' (Using password: NO)

Dette er lnie 4
mysql_connect('frederikbb', 'kode', 'localhost');

Det hele er tastet rigtigt (har taget det fra min anden connect fil)
Avatar billede fbb Nybegynder
01. marts 2004 - 20:08 #12
ved hvorfor.. localhost skal være først
Kan du ikke også smide et svar så kan i dele points?
Avatar billede fangel Nybegynder
01. marts 2004 - 20:08 #13
sorry - det er slf

mysql_connect('localhost' 'frederikbb', 'kode');

min fejl (når man ikke er opmærk som nok - det er jo en standard funktion)

Morten
Avatar billede fangel Nybegynder
01. marts 2004 - 20:26 #14
svaa'r

googolplex -> har du mod på at kigge filerne igennem og se om du kan finde nogle ting der kan laves smartere? - du kan bare fange mig på msn

Morten
Avatar billede googolplex Novice
01. marts 2004 - 22:03 #15
Jo, men det bliver senere, skal ned og sidde 8 timer foran et rådhus i en sovepose med en kop varm te - og så er det ikke engang løgn :(
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