Avatar billede tipsen Nybegynder
12. maj 2003 - 01:18 Der er 6 kommentarer og
1 løsning

SQL til at lave backup af alle tabeller i en db ned i en fil

Hej eksperter

Er der nogen som kan slynge lidt SQL ud der tager backup af alle tabeller i en bestemt database - således at både struktur og backup er gemt! Det skal helst være sådan, at backup'en kan gemmes direkte ned i en midlertidig fil evt. via noget php (som jeg dog ikke behøver hjælp med)

Håber der er nogen gode forslag.
Avatar billede Slettet bruger
12. maj 2003 - 07:35 #1
Hvordan vil du have outputtet det? Jeg har et script som sender det til dig i en tekstfil via PHP :)
Avatar billede clausjul Nybegynder
12. maj 2003 - 07:36 #2
Det kan du gøre via phpmyadmin:

- Vælg database
- Vælg fanen "Export"
- Vælg alle tabellerne i det hvide felt (klik "Vælg alle")
- Vælg "Strukturen og data" (radioknap)
- Kryds af i "Send" som zipped

Volia - så har du backupfilen til download ;-)
Avatar billede tipsen Nybegynder
12. maj 2003 - 10:42 #3
el_barto: Det var faktisk sådan et script jeg selv ville lave og jeg har bare brug for SQL-koden der kan gøre det - så sørger jeg selv for resten.

clausjul: Jeg ved godt det kan lade sig gøre at lave en backup med phpmyadmin, men jeg skal bruge en sql-sætning der så kan bruges til automatisk at lave en backup uden brug af phpmyadmin!
Avatar billede tipsen Nybegynder
12. maj 2003 - 10:43 #4
Med hensyn til output vil jeg gerne have det i et format der gør nemt at reetablere data - dvs i noget sql-statement-format.
Avatar billede Slettet bruger
12. maj 2003 - 10:48 #5
Mht. at samle det hele i et SQl query har jeg selv kigget på mysqldump, men det virkede ikke ordenligt, og fik et link til dette script her på E:

Mit forslag er at lave en knap man kan trykke på, og så tjekke om den er blevet klikket på, for derefter at køre dette script:

$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "databasenavn";
$dbcnx = mysql_connect($dbhost, $dbuser, $dbpass) OR die(mysql_error());
mysql_SELECT_db($dbname) OR die(mysql_error());

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

  // English 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";
  $fil_navn = "DB-dump";
  $strName = "Backup af database";
  $strDone = "udført d.";
  $strat = "kl.";
  $dags_dato = date ("d-m-Y");
  $vendor = "Backup udført med (indsæt firmanavn)";
  $vendor2 = "Leveret af (indsæt firmanavn)";

  header("Content-disposition: filename=$fil_navn $dbname $dags_dato.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;
  }

       
  $tables = mysql_list_tables($dbname);
       
  $num_tables = @mysql_numrows($tables);
  if($num_tables == 0)
  {
    echo $strNoTablesFound;
  }
  else
  {
    $i = 0;
    $heure_jour = date ("H:i");
    echo "# ========================================================$crlf";
    echo "#$crlf";
    echo "# $strName : $dbname$crlf";
    echo "# $strDone $dags_dato $strat $heure_jour $crlf";
    echo "# $vendor$crlf";
    echo "# $vendor2$crlf";
    echo "#$crlf";
    echo "# ========================================================$crlf";
    echo "$crlf";
           
    while($i < $num_tables)
    {
      $table = mysql_tablename($tables, $i);
       
      echo $crlf;
      echo "# --------------------------------------------------------$crlf";
      echo "#$crlf";
      echo "# $strTableStructure '$table'$crlf";
      echo "#$crlf";
      echo $crlf;
       
      echo get_table_def($dbname, $table, $crlf).";$crlf$crlf";
               
      echo "#$crlf";
      echo "# $strDumpingData '$table'$crlf";
      echo "#$crlf";
      echo $crlf;
           
      get_table_content($dbname, $table, "my_handler");
       
      $i++;
    }
  }

exit;
}
Avatar billede tipsen Nybegynder
12. juni 2003 - 01:01 #6
el_barto: Smider du et svar.
Avatar billede tipsen Nybegynder
21. februar 2004 - 23:34 #7
Guess not...
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