Avatar billede learner Praktikant
31. marts 2005 - 21:22 Der er 27 kommentarer og
1 løsning

backup af mysql

Hej, jeg har et site hvor jeg kunne tænke mig at få et script, der sender en backup af databasen til min email hver dag. Kan det lade sig gøre?

Jeg har læst lidt forskellige steder om bla cron-job og har os fundet et script som genererer en fil. Men jeg har ik kunne finde noget hvor backup'en bliver sendt til en email en gang i døgnet.

Håber derfor at nogen ligger inde med sådn et script eller et der kan tilpasses.

På forhånd tak!
Learner
Avatar billede learner Praktikant
31. marts 2005 - 21:23 #1
Jeg har min side liggende ved en udbyder (B-one) og de kører safe mode hvis det betyder noget... :o)
Avatar billede bromer Nybegynder
31. marts 2005 - 21:26 #2
Det er efterhånden et klassisk spørgsmål herinde. Når er har din side hos b-one kan du ikke udføre scripts via cron, så du skal ud i noget webcron. Jeg har desværre ikke noget link liggende :)
Avatar billede leif Seniormester
31. marts 2005 - 21:33 #3
Hvis du kan Tysk kan du kigge på http://www.cronjob.de/
Avatar billede learner Praktikant
31. marts 2005 - 21:34 #4
Er cron da den bedste løsning???

For jeg har jo et script som muligvis kan laves til hvis man har tjek på PHP.
Er der nogen der er frisk på at prøve det?
Avatar billede learner Praktikant
31. marts 2005 - 21:38 #5
Har ik lyst til at læse tysk :o)
Avatar billede leif Seniormester
31. marts 2005 - 21:38 #6
For at udføre et job fx. 1 gang i døgnet, skal der enten et Conjob eller en Planlagt opgave, som kører på et bestemt tidspunkt. Jobbet vil kalde den PHP side eller andet som du ønsker og kører siden !

Du kan ikke i en PHP side sige kør hver nat.
Avatar billede leif Seniormester
31. marts 2005 - 21:40 #7
Den eneste jeg kender er den tyske !

Jeg kan sikkert godt få min Linux Administrator til at sætte et job op på en server ved betaling !
Avatar billede learner Praktikant
31. marts 2005 - 21:43 #8
Nej nej, det ved jeg godt :o)

Jeg regner med at køre scriptet sådan at der genereres en backup max en gang i døgnet og kun når en administrator(mig selv) logger ind.
Avatar billede detox Nybegynder
31. marts 2005 - 21:44 #9
Her er en engelsk:
http://www.webcron.org/
Avatar billede learner Praktikant
31. marts 2005 - 21:45 #10
Bruger du selv den tyske?

Hvad kan den? Er du sød at fortælle lidt om den? :o)
Avatar billede learner Praktikant
31. marts 2005 - 21:47 #11
detox, KANON!
Bruger du den selv?
Kan du sige lidt om det de har på http://www.webcron.org/
Avatar billede detox Nybegynder
31. marts 2005 - 21:49 #12
Næ, jeg har ikke prøvet den, men det ser meget enkelt ud.
Avatar billede learner Praktikant
31. marts 2005 - 21:55 #13
jeps. Jeg tror jeg prøver det på min testside... Og så vender jeg tilbage om nogle dage.

Er der nogen der har et godt trick eller en bedre løsning, så skriv endelig.

Indtil videre mange tak allesammen...
Avatar billede learner Praktikant
01. april 2005 - 08:22 #14
Okay, det er jo nemt at bruge...

Man bestiller feks et dagligt besøg på sin side. Så nu skal jeg bare have lavet en backup.php med et script som udfører backup'en.

Det jeg gerne vil have, er at backup'en bliver gemt som en fil på serveren. Filens navn bliver så dagens nummer i måneden (altså 1.sql til 30.sql)(og feks kun de 'lige' dage)

Her er et script, som måske kan tilpasses til det: (håber nogen kan hjælpe lidt)

$dbhost = "localhost";
$dbuname = "root";
$dbpass = "";
$dbname = "";
#%% Backup function
// det kan jo godt tage lidt tid på en større DB
@set_time_limit(600);
$strNoTablesFound = "Ingen databasetabeller fundet";
$strHost = "Host";
$crlf="\n";
$strDatabase = "Database ";
$strTableStructure = "Struktur for tabel";
$strDumpingData = "Indhold af tabel";
$strError = "Fejl";
$strSQLQuery = "SQL-query";
$strMySQLSaid = "MySQL: ";
$strBack = "Tilbage";
$strFileName = "Backup";
$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");

$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;
$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 learner Praktikant
01. april 2005 - 08:32 #15
Måske er det lettere at lave det om så den gemmer filen på serveren - sender det til min email og sletter filen på serveren bagefter.

Er det ik let at lave?
Avatar billede learner Praktikant
01. april 2005 - 18:33 #16
Come on, er der ik en der kan hjælpe mig med at lave det script til? Bare lave det til så den gemmer filen på serveren og derefter sender den som vedhæftet fil i en email...

Please hjælp! :o)
Avatar billede bromer Nybegynder
01. april 2005 - 18:36 #17
Hvorfor tager du ikke export funktionaliteten fra phpMyAdmin. Den kan exportere det til en tar.gz fil som du så kan maile til dig selv.
Avatar billede learner Praktikant
01. april 2005 - 19:59 #18
Jamen kræver det ik at jeg skal gøre det manuelt så? altså logge på phpmyadmin og udføre backup'en.
Avatar billede bromer Nybegynder
01. april 2005 - 20:02 #19
nej det jeg mente var at du snupper "export.php" eller hvad den nu hedderi phpMyAdmin og så tilpasser den til dit behov.
Avatar billede learner Praktikant
06. april 2005 - 16:34 #20
Jeg har været ved at kigge lidt på scriptet længere oppe. Og jeg vil benytte det. Jeg kan ik forstå hvorfor der står global i disse linier:

global $bruger, $dbhost, $dbuname, $dbpass, $dbname;
mysql_connect($dbhost, $dbuname, $dbpass);
@mysql_select_db("$dbname") or die ("Kunne ikke forbinde til databasen");

Det er da ik nødvendigt at lave dem global er det???
Avatar billede detox Nybegynder
06. april 2005 - 16:55 #21
Jo det er nødvendigt, da du bruger variablerne i en funktion.
Avatar billede learner Praktikant
06. april 2005 - 17:51 #22
Ja, det har jeg kigget på.. Og jeg kan umiddelbart ikke se hvilken funktion der benytter variablerne. Har lige kigget det igennem en ekstra gang og kan stadig ikke se at der kan ske noget ved at fjerne den 'global'

Jeg har os prøvet scriptet og det ser ud til at virke som det skal.

Tror du ik det er OK ? Eller er der noget jeg har overset...

Du får nogle point detox for det her! :o)
Skal nok huske dig når jeg lukker/accepterer!
Avatar billede detox Nybegynder
06. april 2005 - 18:43 #23
Jo, det var mig der så forkert. De bliver jo brugt udenfor funktionen, så det kan du roligt slette.
Avatar billede learner Praktikant
08. april 2005 - 18:07 #24
Nu har jeg lavet en okay løsning hvor jeg får en påmindelse hver tredje dag om at tage en backup. Og så er der blot et link jeg følger. Det er rimelig let..

Men er der nogen der har en rigtig god backup-løsning, så smid den her! :o)
Skal være en der sender en backup til min email. og det skal køre automatisk og jeg kører i safe mode og hoster ik selv!

Tak indtil videre.

detox smid et svar, du har point tilgode!
Avatar billede learner Praktikant
12. juni 2005 - 23:46 #25
lukker, Tak for hjælpen :o)
Avatar billede leif Seniormester
13. juni 2005 - 10:14 #26
Som du har fået af vide så er der ikke særlig mange muligheder end at få nogen udefra til at gøre det eller få dem der hoster dig til at sætte et Auto job op hvis det skal foregå automatisk !
Avatar billede lappe_dk Nybegynder
16. december 2005 - 10:33 #27
Vil ovenstående script virke på en Unoeuro server?
Hvordan får man det til at automatisk sende en e-mail med backup filen?
Avatar billede learner Praktikant
16. december 2005 - 12:10 #28
Det vil jeg stadig også gerne vide. :o)
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