Avatar billede sniper_12 Nybegynder
17. februar 2004 - 21:45 Der er 5 kommentarer og
1 løsning

Backup script til mysql virker ikke helt

Jeg bruger dette script på min side til at lave en backup af min mysql database, men jeg får en fejl hvis jeg vælger at den skal slette filen på serveren "Hedder i script $remove_file". Er der en der kan se hvad fejlen er da jeg ikke er den store haj til programmering
--------------------------------
<?php
  /* HMS_BACKUP.PHP
    Holomarcus MySQL Database Backup 
   
    Version 1.0 - August 15th, 2003
    Changelog: see bottom of script.
   
    (c)2003 Holomarcus (http://www.holomarcus.nl)
    You can distribute this script and use it freely as
    long as this header is not edited in the script.
   
    With HMS_BACKUP you can make a backup of your MySQL-database.
    This backup can be sent by e-mail or uploaded through FTP.
   
    This script doesn't need privileges to execute *nix commands.
    It's 100% pure PHP.
   
    The script needs write-privileges on the directory it resides in!
   
    Change the necessary settings below...
  */

  $dbhost        = 'localhost';  // Server address of your MySQL Server
  $dbuser        = 'XXXXXXXXXX';      // Username to access MySQL database
  $dbpass        = 'XXXXXXXX';    // Password to access MySQL database
  $dbname        = 'XXXXXXXXXX';      // Database Name

  $use_gzip      = 'no';        // Set to No if you don't want the files sent in .gz format

  $remove_file  = 'no';        // Set this to yes if you want to remove the file after sending. Yes is recommended.

  $use_email    = 'yes';          // Set to 'yes' if you want the backup to be sent throug email. Fill out next 3 lines.
  $send_to      = 'webmaster@prideofvbk.dk';  // E-mail to send the mail to
  $send_from    = 'backup_mysql@XXXXXXXXX.dk'; // E-mail the mail comes from
  $subject      = "MySQL Backup ($dbname) - " . date("j F y"); // Subject in the email to be sent.

  $use_ftp      = 'no'; // Do you want this database backup uploaded to an ftp server? Fill out the next 4 lines
  $ftp_server    = '';  // FTP hostname
  $ftp_user_name = '';  // FTP username
  $ftp_user_pass = '';  // FTP password
  $ftp_path      = "/";  // This is the path to upload on your ftp server!

  $echo_status = 'yes';  // Set to 'no' if the script should work silently (no output will be sent to the screen)


# You probably don't need to edit below this line....
#-------------------------------------------------------------------------------

  $db = mysql_connect("$dbhost","$dbuser","$dbpass");
    mysql_select_db("$dbname",$db);

  $path = make_dir();
 
  if ($echo_status == 'yes') {
    print "Dumpfile will be written to $path<br>";
  }

  $result = mysql_query("show tables from $dbname");
  while (list($table) = mysql_fetch_row($result)) {
    $newfile .= get_def($table);
    $newfile .= "\n\n";
    $newfile .= get_content($table);
    $newfile .= "\n\n";
    $i++;
    if ($echo_status == 'yes') {
      print "Dumped table $table<br>";
    }
  }

    $file_name = $dbname . " - " . date("j F y") . ".sql";
    $file_path = $path . $file_name;

  if ($use_gzip == "yes") {
    $file_name .= ".gz";
    $file_path .= ".gz";
    $zp = gzopen($file_path, "wb9");
    gzwrite($zp,$newfile);
    gzclose($zp);

    if ($echo_status == 'yes') {
      print "<br>Gzip-file is created...<br>";
    }
  } else {
    $fp = fopen($file_path, "w");
    fwrite($fp, $newfile);
    fclose($fp);

    if ($echo_status == 'yes') {
      print "<br>SQL-file is created...<br>";
    }
  }

  if ($use_email == 'yes') {
    $fileatt_type = filetype($file_path);
 
    $headers = "From: $send_from";
 
    // Read the file to be attached ('rb' = read binary)
    $fp = fopen($file_path,'rb');
    $data = fread($fp,filesize($file_path));
    fclose($fp);
 
    // Generate a boundary string
    $semi_rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
 
    // Add the headers for a file attachment
    $headers .= "\nMIME-Version: 1.0\n" ."Content-Type: multipart/mixed;\n" ." boundary=\"{$mime_boundary}\"";
 
    // Add a multipart boundary above the plain message
    $message = "This is a multi-part message in MIME format.\n\n" ."--{$mime_boundary}\n" ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" ."Content-Transfer-Encoding: 7bit\n\n" .
    $message . "\n\n";
 
    // Base64 encode the file data
    $data = chunk_split(base64_encode($data));
 
    // Add file attachment to the message
    $message .= "--{$mime_boundary}\n" ."Content-Type: {$fileatt_type};\n" ." name=\"{$file_name}\"\n" ."Content-Disposition: attachment;\n" ." filename=\"{$file_name}\"\n" ."Content-Transfer-Encoding: base64\n\n" .
    $data . "\n\n" ."--{$mime_boundary}--\n";
 
    // Send the message
    $ok = @mail($send_to, $subject, $message, $headers);
   
    if ($echo_status == 'yes') {
      print "<br>Mail is sent...<br>";
    }
  }
 
  if ($use_ftp == 'yes') {
    if ($use_gzip == 'yes') {
      $mode = FTP_BINARY;
    } else {
      $mode = FTP_ASCII;
    }
    $ftp_id      = ftp_connect($ftp_server);
    $login_result = ftp_login($ftp_id, $ftp_user_name, $ftp_user_pass);
    $upload      = ftp_put($ftp_id, $ftp_path . $file_name, $file_path, $mode);
    ftp_close($ftp_id);

    if ($echo_status == 'yes') {
      print "<br>Backup is uploaded to $ftp_user_name@$ftp_server...<br>";
    }
  }

  if ($remove_file == "yes") {
    unlink($file_name);
    if ($echo_status == 'yes') {
      print "<br>File is deleted...<br>";
    }
  }

  if ($echo_status == 'yes') {
    print "<br>I am done!<br>";
  }


  function make_dir() {
    $page = split("/", getenv('SCRIPT_NAME'));
    $n = count($page)-1;
    $page = $page[$n];
    $page = split("\.", $page, 2);
    $extension = $page[1];
    $page = $page[0];
    $script     = "$page.$extension";
    $base_url     = "http://".$_SERVER['SERVER_NAME'];
    $directory     = $_SERVER['PHP_SELF'];
    $url_base = "$base_url$directory";
    $url_base = ereg_replace("$script", '', "$_SERVER[PATH_TRANSLATED]");

    $path = $url_base;

    return $path;
  }

  function get_def($table) {
    $def = "";
    $def .= "DROP TABLE IF EXISTS $table;\n";
    $def .= "CREATE TABLE $table (\n";
    $result = mysql_query("SHOW FIELDS FROM $table") or die("Table $table not existing in database");
    while($row = mysql_fetch_array($result)) {
      $def .= "    $row[Field] $row[Type]";
      if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'";
      if ($row["Null"] != "YES") $def .= " NOT NULL";
      if ($row[Extra] != "") $def .= " $row[Extra]";
      $def .= ",\n";
    }
    $def = ereg_replace(",\n$","", $def);
    $result = mysql_query("SHOW KEYS FROM $table");
    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)) {
      $def .= ",\n";
      if($x == "PRIMARY") $def .= "  PRIMARY KEY (" . implode($columns, ", ") . ")";
      else if (substr($x,0,6) == "UNIQUE") $def .= "  UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
      else $def .= "  KEY $x (" . implode($columns, ", ") . ")";
    }
    $def .= "\n);";
    return (stripslashes($def));
  }

  function get_content($table) {
    $content="";
    $result = mysql_query("SELECT * FROM $table");
    while($row = mysql_fetch_row($result)) {
      $insert = "INSERT INTO $table VALUES (";
      for($j=0; $j<mysql_num_fields($result);$j++) {
        if(!isset($row[$j])) $insert .= "NULL,";
        else if($row[$j] != "") $insert .= "'".addslashes($row[$j])."',";
        else $insert .= "'',";
      }
      $insert = ereg_replace(",$","",$insert);
      $insert .= ");\n";
      $content .= $insert;
    }
    return $content;
  }

  /* Changelog
 
    Version 1.0 - August 15th, 2003
    ===============================
    Created this beautiful script...

  */
?>

--------------------------
Den fejl jeg får når den er færdig, men filen er stadig på serveren, Jeg har prøvet at chmod mappen til 777 men det hjælper ikke noget.

Warning: unlink() failed (No such file or directory) in /customers/prideofvbk.dk/prideofvbk.dk/httpd.www/backup_mysql/backup.php on line 146

File is deleted...
Avatar billede googolplex Novice
17. februar 2004 - 21:56 #1
Brug evt. dette i stedet:

<?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 sniper_12 Nybegynder
17. februar 2004 - 22:25 #2
Sender det script den også som en mail, eller skal men hente den med FTP bagefter, for det er jo smart med det andet. Jeg kan ikke lige se et sted jeg skal skrive en mail adr.
Avatar billede googolplex Novice
17. februar 2004 - 22:29 #3
Du ligger filen op på serveren. Så skal du bare besøge adressen, så popper der en download boks op. Men det må kunne sættes op til at sende mail().
Avatar billede sniper_12 Nybegynder
17. februar 2004 - 22:31 #4
Så er det andet stadig bedre vil jeg tro, jeg prøver det lige.
Avatar billede sniper_12 Nybegynder
17. februar 2004 - 23:29 #5
Nu har jeg prøvet det og det er ikke lige så godt som det andet, for det er ikke altid jeg er hjemme når jeg tager backupen så er det bedre at den bare sender den på en mail til mig, jeg ville bare have den til at fjerne den fil den også smider på serveren.
Avatar billede sniper_12 Nybegynder
25. februar 2004 - 13:21 #6
Lukker ? der er ingen der svare
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