Avatar billede hmortensen Nybegynder
16. juli 2003 - 14:29 Der er 16 kommentarer og
1 løsning

mySQL dumb

Jeg har kigget lidt rundt her efter en måde at ta backup af en enkelt tabel, men kan kun finde en masse giga scripts til komplette backups.

Kan det ik laves en del lettere til en enkelt tabel ?
Avatar billede repox Seniormester
16. juli 2003 - 14:30 #1
Kan du ikke bruge phpMyAdmin til det ?
Avatar billede hmortensen Nybegynder
16. juli 2003 - 14:32 #2
Jo, men det er ikke praktisk i den her situation.
Avatar billede repox Seniormester
16. juli 2003 - 14:33 #3
Det ville efter min mening være lige så praktisk som så meget andet, ellers kan du jo bryge mysql prompten istedet hvis du er inde i det...
Avatar billede erikjacobsen Ekspert
16. juli 2003 - 14:34 #4
eller programmer mysqldump
Avatar billede hmortensen Nybegynder
16. juli 2003 - 14:34 #5
Ja, hvis det ikke er fordi at folk med mindre udviklede computer evner bedst kan li et link hvor der står backup...
Avatar billede exp Juniormester
16. juli 2003 - 14:35 #6
Har faktisk selv lidt samme ønske - et "Backup? Klik her!"-script der laver backup af en række foruddefinerede tabeller i en database... Det er ikke særlig smart at skulle ind i phpmyadmin som bruger af et cms-system...
Avatar billede hmortensen Nybegynder
16. juli 2003 - 14:37 #7
Hvordan gør phpmyadmin det ?

Er det også på den mest uoverskuelige måde ?
Avatar billede ohmish Nybegynder
16. juli 2003 - 14:37 #8
lav et LINK til sql.php og put det her i filen:

<?php

$dbhost = "database adresse";
$dbuname = "bruger";
$dbpass = "kodeord";
$dbname = "database navn";
   
  @set_time_limit(600);
  $crlf="\n";

  $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";
  $strName = "Backup af database";
  $strtoday = date ("d-m-y");
       
  header("Content-disposition: filename=$dbname.sql");
  header("Content-type: application/ms-download");
  header("Pragma: no-cache");
  header("Expires: 0");
       
  $client = getenv("HTTP_USER_AGENT");
  if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs))
  {
    $os = $regs[1];
    if (eregi("Win",$os))
      $crlf="\r\n";
  } 
       
  function my_handler($sql_insert)
  {
    global $crlf;
    echo "$sql_insert;$crlf";
  }
       
  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);
  }
       
  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;
    $hours = date ("H:i");
    print "# ========================================================$crlf";
    print "#$crlf";
    print "# $strName : $dbname$crlf";
    print "# Download d. $strtoday kl. $hours$crlf";
    print "#$crlf";
    print "# Denne fil er alene beregnet som ren backup af databasen.$crlf";
    print "# Ét forkert komma eller id, kan ødelægge en hel del...$crlf";
    print "# UNDGÅ derfor at redigere i teksten.$crlf";
    print "#$crlf";
    print "# ========================================================$crlf";
    print "$crlf";
           
    while($i < $num_tables)
    {
      $table = mysql_tablename($tables, $i);
       
      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 hmortensen Nybegynder
16. juli 2003 - 14:38 #9
Og det var så netop et af de utallige giga scripts, som jeg ville væk fra.
Avatar billede ohmish Nybegynder
16. juli 2003 - 14:38 #10
et ældre script jeg næsten ikke har rørt.. men det virker upåklageligt.
Avatar billede ohmish Nybegynder
16. juli 2003 - 14:39 #11
der er da ikke meget "giga" over det.
Avatar billede exp Juniormester
16. juli 2003 - 14:39 #12
ohmish >>
Laver den ikke bare et dump af HELE databasen?
Avatar billede hmortensen Nybegynder
16. juli 2003 - 14:40 #13
Der burde være en funktion som den her:
DUMB * FROM tabel
Avatar billede ohmish Nybegynder
16. juli 2003 - 14:44 #14
ja du har ret.. det mangler der.

men hvad forskel gør det at scriptet fylder lidt?

scriptet er til hele databasen ja.. men det kan nemt barberes ned
Avatar billede exp Juniormester
16. juli 2003 - 14:48 #15
ohmish >>
Hvordan? Hvis man nu gerne vil dumpe fx disse tabeller:
brugere, links
hvordan gør man så?
Avatar billede hmortensen Nybegynder
16. juli 2003 - 14:51 #16
Kan du så ik fjerne det overflødige, og så den kun tar dumb af en tabel og sender til brugeren ?
Avatar billede hmortensen Nybegynder
08. september 2003 - 14:55 #17
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