Avatar billede mikkelk Nybegynder
28. januar 2004 - 23:19 Der er 25 kommentarer og
1 løsning

Backup af MySQL-db

Vi har i et stykke tid i god tro kørt backup af MySQL-db med et prog. der blot kopierede database-filerne. Men, selvfølgelig virker det ikke, da disse filer er i brug hele tiden.
Så nu vil vi gerne høre hvad der findes af programmer til at foretage en automatisk backup af en MySQL-db?
Avatar billede arne_v Ekspert
28. januar 2004 - 23:24 #1
mysqldump måske
Avatar billede arne_v Ekspert
28. januar 2004 - 23:25 #2
Avatar billede codebase Praktikant
29. januar 2004 - 04:00 #3
<?php
  // Enter your MySQL access data 
  $host= 'dbhost';       
  $user= 'dbuser';             
  $pass= 'dbpassword';
  $db=  'db';

  $backupdir = 'backups'; 

  // Compute day, month, year, hour and min.
  $today = getdate();
  $day = $today[mday];
  if ($day < 10) {
    $day = "0$day";
  }
  $month = $today[mon];
  if ($month < 10) {
    $month = "0$month";
  }
  $year = $today[year];
  $hour = $today[hours];
  $min = $today[minutes];
  $sec = "00";

  // Execute mysqldump command.
  // It will produce a file named $db-$year$month$day-$hour$min.gz
  // under $DOCUMENT_ROOT/$backupdir
  system(sprintf(
  'mysqldump --opt -h %s -u %s -p%s %s | gzip > %s/%s/%s-%s%s%s-%s%s.gz',                                                 
  $host,
  $user,
  $pass,
  $db,
  getenv('DOCUMENT_ROOT'),
  $backupdir,
  $db,
  $year,
  $month,
  $day,
  $hour,
  $min
  )); 
  echo '+DONE'; 
?>

If you are not allowed cron access on the web server, you can set up your own cron job to periodically call the above script. If you don't have cron, or a similar functionality on your system, you can still modify the above script to inform the browser to reget the file every xxx hours. A poor man's cron, so to say ;-)

Of course, the $backupdir should at least be protected with a .htaccess file.

And of course, you are not going to backup a really large database this way, if your PHP has some timeout set (as is usually the case with web hosters).
Avatar billede codebase Praktikant
29. januar 2004 - 04:01 #4
Avatar billede mikkelk Nybegynder
29. januar 2004 - 18:36 #5
Er der ikke nogle der kan komme med en grundig forklaring på hvordan man sætter sådan noget op hvis det er? Og hvor store db'er er det hensigtsmæssigt at benytte dette til?
Avatar billede arne_v Ekspert
29. januar 2004 - 18:47 #6
Jeg ville nok foretrække at køre mysqldump fra prompten fremfor via et PHP script,
men smag og behag ...

Størrelsen skulle ikke betyder andet end at det tager længere tid.

Når tingene ikke kan være på en disk, så er det formentlig tid at skifte
til Oracle eller DB2 anyway.

Forventer du 3 cifrede GB eller TB ?
Avatar billede mikkelk Nybegynder
29. januar 2004 - 18:54 #7
Jeg ville gerne køre en automatisk backup, således at jeg ikke selv skal en og køre den, men at den kører hver dag kl. 2 f.eks.
Pt. er databasen på ca. 60 MB - og forventer slet ikke 3 cifrede GB eller TB  :-)
Avatar billede arne_v Ekspert
29. januar 2004 - 18:58 #8
60 MB burde ikke være noget problem for mysqldump.

Jeg tænker i retning af en lille bat/sh fil som indeholder de fornødne
kommandoer og køres af scheduler/cron.
Avatar billede mikkelk Nybegynder
29. januar 2004 - 19:03 #9
Ja, det er meget godt at du tænker det :-), men - hvordan gør man så det ?
Avatar billede arne_v Ekspert
29. januar 2004 - 19:06 #10
windows eller linux ?
Avatar billede mikkelk Nybegynder
29. januar 2004 - 19:09 #11
win
Avatar billede arne_v Ekspert
29. januar 2004 - 19:13 #12
Så laver du en BAT fil med mysqldump kommandoen og sætter scheduleren
til at køre den en gang i døgnet på et bestemt tidspunkt (control panel,
scehduled tasks, add etc.).
Avatar billede arne_v Ekspert
29. januar 2004 - 19:15 #13
Du bør bruge optionen til at låse alle tabeller for at få
en konsistent dump.
Avatar billede mikkelk Nybegynder
29. januar 2004 - 19:16 #14
Hvordan kalder man så filen noget unik hver gang? f.eks. datoen?
Avatar billede arne_v Ekspert
29. januar 2004 - 19:20 #15
Nu begynder vi at nærme os grænse for hvad jeg ved.

Men prøve med et filnavn:

"min backup %date%.dmp"
Avatar billede mikkelk Nybegynder
29. januar 2004 - 19:26 #16
det virker fint, bortset fra at den af en eller anden årsag kun medtager 3 mb af db'en... som er på 60 mb...
Avatar billede mikkelk Nybegynder
29. januar 2004 - 19:26 #17
bruger følgende:

c:\mysql\bin\mysqldump --lock-tables --all-databases > c:\databackup\databasebackup-%date%.sql
Avatar billede arne_v Ekspert
29. januar 2004 - 19:35 #18
Dumpen kan både være større og mindre end databasen (der er overhead
ved INSERT SQL sætninger sammenlignet med rå data, der er overhead
i databasen til index, beskrivelser etc.).

60->3 lyder dog voldsomt.

Men prøv da og check om alle data er der. Evt. ved at indlæse dumpen
i en anden database og checke indholdet.
Avatar billede arne_v Ekspert
29. januar 2004 - 19:35 #19
Og et svar
Avatar billede mikkelk Nybegynder
29. januar 2004 - 19:36 #20
Alt data er der ikke
Avatar billede arne_v Ekspert
29. januar 2004 - 19:38 #21
Hvad mangler der ?
Avatar billede mikkelk Nybegynder
29. januar 2004 - 19:44 #22
Hmm...det meste data mangler..

Tror måske jeg har et problem med at der skal specificeres brugernavn og pass.. og det kan jeg ikke finde ud af at få til at virke...
Avatar billede arne_v Ekspert
29. januar 2004 - 19:50 #23
--username=mitbrugernavn --password=mithemmeligepassword
Avatar billede mikkelk Nybegynder
29. januar 2004 - 19:56 #24
Dette er hvad sql-filen nu indeholder:
Usage: c:\mysql\bin\mysqldump [OPTIONS] database [tables]
OR    c:\mysql\bin\mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR    c:\mysql\bin\mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use c:\mysql\bin\mysqldump --help
Avatar billede mikkelk Nybegynder
29. januar 2004 - 19:59 #25
Hvordan skal den kode se ud? Er der noget galt i at følgende er det ENESTE indhold i bat-filen:
c:\mysql\bin\mysqldump --user=brugernavn --password=mitpass --lock-tables --all-databases > c:\databackup\databasebackup-%date%.sql;
Avatar billede mikkelk Nybegynder
29. januar 2004 - 20:00 #26
Ah... :-) ikke noget semikolon til sidst... så virker det vidst...
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