Avatar billede misbruger Nybegynder
25. maj 2005 - 13:12 Der er 23 kommentarer og
1 løsning

Automatisk backup af MySQL på Windows - Ingen agent

Jeg har 2 MySQL installationer

1. MySQL 4.11-nt på Windows 2003 Std. Edt.

2. MySQL 3.23.50-nt på Windows 2000 Std. Edt.

Jeg har brug for at vide hvorledes at jeg kan lave backup af databaserne på disse to MySQL installationer, hvor integriteten er bevaret.

Jeg havde forstillede mig at kører backup'en hver nat, og så tage en fil-backup til et tapedrev bagefter gennem NTBackup.

Hvad vil I anbefale ?
Avatar billede arne_v Ekspert
25. maj 2005 - 18:56 #1
afbryd alle connections på en pæn måde (stop for nye og lad de gamle køre færdig)

mysqldump (http://dev.mysql.com/doc/mysql/en/mysqldump.html) erll
mysqlhotcopy (http://dev.mysql.com/doc/mysql/en/mysqlhotcopy.html)
Avatar billede arne_v Ekspert
25. maj 2005 - 18:57 #2
erll = eller
Avatar billede misbruger Nybegynder
25. maj 2005 - 21:00 #3
Står i toppen af mysqlhotcopy... (Har været der)
It runs on Unix, and as of MySQL 4.0.18 also on NetWare.
Avatar billede arne_v Ekspert
25. maj 2005 - 21:07 #4
når der er 2 muligheder og den ene ikke kan bruges så er valget jo ikke så svært
Avatar billede misbruger Nybegynder
25. maj 2005 - 21:23 #5
hej arne

godt og se du ikke er til at løbe om hjørner med :D
Jeg har siddet og kigget det lidt igennem, og det er for mig at se noget af en hovedpine...

1. Jeg skal lave et script der lister igennem alle databaser.
2. Jeg skal lave et script der udfører mysqldump for alle baserne i ovenstående liste.
3. Jeg skal schedulere min scripts.

Jeg søger nok et lidt hurtigere og gennem prøvet løsning, i forhold til at jeg selv skal til at sidde og hakke mig igennem det.
Jeg kan umuligt være den eneste der har en MySQL installation på Windows (så havde der nok ikke været i nt distribution), som ønsker at tage backup af mine databaser.

Endvidere skal det nok lige påpeges at databaserne benyttes til webapps, så der er ikke noget tidspunkt på døgnet jeg med sikkerhed kan sige at der ikke er åbne conns. og at der ikke bliver udført inserts eller updates.
Avatar billede arne_v Ekspert
25. maj 2005 - 21:27 #6
mysqldump har en --all-databases som gør hvad navnet antyder
Avatar billede arne_v Ekspert
25. maj 2005 - 21:29 #7
hvis du vil være sikker på en konsistent dump er du nødt til at stoppe din
web app

det gælder både mysqldump og mysqlhotcopy - de locker kun tabeller enkeltvis
(så vidt jeg forstår - jeg har aldrig testet det)

det er iøvrigt helt normalt med databaser
Avatar billede Slettet bruger
25. maj 2005 - 22:15 #8
Det er korrekt - de låser på tabel-niveau.

Bare lige for at vise hvor enkelt det kan gøres:

mysqldump -e -u brugeravn -pMitUsandsynligtLangePassword --all-databases > mysqldbbackup.sql
Avatar billede sth Novice
26. maj 2005 - 07:56 #9
jeg har engang lavet noget der liger det du eftersøger se:
http://www.eksperten.dk/spm/584200

hvis det ikke er forstålig kan jeg evt. bruge lidt tid på at lave det
Avatar billede misbruger Nybegynder
26. maj 2005 - 09:30 #10
Eftersom mine MySQL bruges til webapps (i flertal), så bliver jeg nød til at stoppe iis'en, for derefter at kører dump på alle databaserne (eller alle på en gang --all-databases), for til sidst at starte iis'en igen.

Hvis mysqldump låser tabellerne før dump, så burde det da ikke være nødvendigt at dræbe alle conns først ?

newage > Den stump kode du har angivet, ser jo ganske simpel ud. Hvorledes skal den håndteres såfremt jeg ønsker at kører den i en schedule hver nat ?
.bat fil + windows scheduler ?

sth > Først og fremmest er jeg ligeglad med at omdøbe filen til "dato-klokkeslet", eftersom jeg smider den over på et tapedrev bagefter. Endvidere ser det ud til at dit script kun tager backup af en enkelt db af gangen.
Avatar billede arne_v Ekspert
26. maj 2005 - 09:34 #11
hvis du vil have en konsistent dump er du nødt til at få alle brugere af inden mysqldump
(fordi den låser tabeller enkeltvist)

stoppe IIS er en (lidt brutal) måde

men de mere raffinerede kræver ændringer i web applikationerne
Avatar billede misbruger Nybegynder
26. maj 2005 - 09:42 #12
Jeg er desværre ikke herre over alle webapps'ne, så der er ikke mange andre muligheder.
Hvis jeg skal til at lukke iis'en for at tage backup, kan det jo give op til ½-1 times nedetid hver nat, og det er svært acceptabelt.

(fordi den låser tabeller enkeltvis) - Er det ikke godt nok, eller hvad er det jeg ikke forstår i den sætning ?

Det må da være muligt at lave en hotcopy, som ikke kræver isolering af databaserne (f.eks ved at den enkelte database eller tabel lukkes ned)
Avatar billede arne_v Ekspert
26. maj 2005 - 10:01 #13
nej det er ikke godt nok

LOCK tabel_1
BACKUP tabel_1
UNLOCK tabel_1
UPDATE tabel_1 SET f = f + 100
UPDATE tabel_2 SET f = f - 100
LOCK tabel_2
BACKUP tabel_2
UNLOCK tabel_2

nu har du en backup som afspejler en situation som aldrig har eksisteret
Avatar billede arne_v Ekspert
26. maj 2005 - 10:05 #14
Hvis der ikke er nogle applikationer som bruger mere end 1 database så kan
du nøjes med at lukke for adgang til en database ad gangen.

Nu ved jeg ikke hvor store dine databaser er men 30-60 minutter lyder
meget stort. Hvis du kan dumpe 20000 rækker i sekundet så er det 72
millioner rækker.
Avatar billede misbruger Nybegynder
26. maj 2005 - 10:12 #15
Hvordan vil du lukke for adgangen til en database ad gangen ?

ok måske lidt overdrevet! Jeg ved ikke hvormange tubler jeg kan dumpe i sek. men jeg ved at jeg har adskellige store databaser (min. 3 stk. af min. 2 mill tubler i hver installation som vokser med ca. 10K tubler hver dag)
Avatar billede arne_v Ekspert
26. maj 2005 - 10:19 #16
du kunne jo starte med at lave en lille tidsmåling

og det behøver du ikke stoppe noget for - vi antager at en konsistent dump
ikke er langsommere end en vi tager chancen dump
Avatar billede arne_v Ekspert
26. maj 2005 - 10:21 #17
de fleste databaser har mulighed for at tage en enkelt database ud men jeg
tvivler faktisk på at man kan det far mysql

men jeg gætter på at der er en logisk sammenhæng mellem web apps og databaser
så du kan gøre en enkelt database klar til backup ved at stoppe den
tilhørende web app
Avatar billede misbruger Nybegynder
26. maj 2005 - 10:32 #18
Har lige lavet et lille test, og det ser faktisk ud til at kunne klares på ca. 10. min pr. mysql server.

Så hvis jeg vil skære ned på det er jeg ude i sådan noget her grisseri...

1. Loop igennem databaser
2. For hver database, find tilhørende site
3. Stop site ved brug af
  iisweb[.vbs] {/delete | /start | /stop | /pause} WebSite [WebSite...] [/s Computer [/u [Domain\]User [/p Password]]]
4. Backup database
5. Start website igen.

Jeg er overordenet fan af simplicitet, og jeg bliver mere og mere rynkede af dette her. :)
Der må findes en måde, hvorpå jeg ikke skal sidde og scripte iis stops, dumps etc. selv. (Damn mysql)
Avatar billede sth Novice
27. maj 2005 - 16:51 #19
misbruger > tak for dit pæne svar, jeg prøvede blot at komme med et forslag, jeg beklager men jeg havde regnet med at du selv havde fantasi til at rette  det til, så du fik alle database med, og at du ligsså selv kunne rette så du fik det filnavn du ønskeder, men som jeg skrev "hvis det ikke er forstålig kan jeg evt. bruge lidt tid på at lave det", men glem da alt om det nu.
Avatar billede Slettet bruger
27. maj 2005 - 17:54 #20
Alt afhængig af om du bruger MyISAM- eller InnoDB-tabeller kan du låse enten på tabelniveau eller globalt (databaseniveau)

Ex:

mysqldump --lock-tables -e -u brugeravn -pMitUsandsynligtLangePassword --all-databases > mysqldbbackup.sql

Låser alle tabeller i den database den dumper. Du kan altså få inkonsistent data, hvis du har krydsreferencer over databaser.

mysqldump --lock-all-tables -e -u brugeravn -pMitUsandsynligtLangePassword --all-databases > mysqldbbackup.sql

Låser alle tabeller i alle databaser på én gang.
Avatar billede misbruger Nybegynder
28. maj 2005 - 14:23 #21
newage > ok...

Har ingen cross db references.
Tabellerne er MyISAM

Hvad skal jeg gøre med dette script...
- Tilrette stier til mysqldump og backupmappe osv.
- Ligge det i en bat fil
- Sætte en windows schedule til at eksekvere den hver nat

Så burde jeg vel være i land ?
Avatar billede misbruger Nybegynder
28. maj 2005 - 14:25 #22
sth > Jeg prøver ikke at pisse nogen af, jeg er tværvt imod meget taknemlig for jeres hjælp.
Jeg er dog lidt i vildrede over at det skal være så omstændigt at sætte det i rutine (kan selvf. være min egen langsommelige opfattelsesevne :)

Igen til jer alle... jeg er MEGET taknemlig for jeres hjælp!
Avatar billede misbruger Nybegynder
06. juli 2005 - 10:26 #23
arne_v 
Smider du ikke et svar, så jeg kan lukke. Din hjælp var størst, så dermed aflønning!
Avatar billede arne_v Ekspert
06. juli 2005 - 10:44 #24
ok
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