Backup af MySql databaser til Dropbox med php

Tags:    php mysql dropbox
<< < 123 > >>
Skrevet af Bruger #8773 @ 23.05.2011
Artikel filer

Anvendelse


Nu har vi gennemgået hvordan koden er bygget op, og vi mangler nu blot anvendelsen af koden.

Til dette formål, har jeg valgt at anvende min index.php fil.

Selve det at tage en backup er meget simpelt når vi har været grundige med vores php klasse.

Vi starter med at initialisere et objekt af typen DatabaseBackup hvori vi angiver vores data for at kunne tage en backup.

Jeg har i kodeeksemplet herunder vist hvordan man gør når det skal uploades til Dropbox.
Fold kodeboks ind/udPHP kode 


Jeg har altså valgt at mine backups skal placeres i en mappe på serveren kaldet "backups" (den vi lavede tidligere), mine backups skal uploades til Dropbox-kontoen tilhørende "my@email.com" som har koden "my-secret-password". I hans Dropbox skal hans backup placeres i mappen "Database Backups".

Vores klasse vil automatisk lave undermapper i denne mappe med månedens navne og backup-filerne inde i disse.

For at tilføje et par database til køen, gør vi som følger:
Fold kodeboks ind/udPHP kode 


Hvis MySql er sat op korrekt, og der tillades fjernadgang til MySql, kan du ogås tage backups på tværs af servere. Der skal du blot angive serverens URL eller IP i stedet for localhost. Hos Surfotwn er databasehosten på "mydbXX.surftown.com" (tjek i kontrolpanelet for at finde ud af hvilken server).

For at foretage backup'en, kalder vi blot doBackup() metoden fra vores klasse:
Fold kodeboks ind/udPHP kode 


Nu har jeg testet at alle mine backups kører som de skal, og jeg har derfor ikke sat en if..else ind for at tjekke om backup'en rent faktisk lykkedes.

Ekstra sikkerhed og automatisk backup


Nu er der måske nogle af jer der sidder og tænker "Jamen Simon, det kræver jo at jeg besøger siden hver dag?" og "Jamen Simon, det fylder jo min Dropbox hvis alle og enhver bare kan starte min backup".

Begge dele er fuldstændigt korrekt, men det kan vi naturligvis gøre noget ved.

Til den første del, har jeg lavet et MD5 hash som jeg parser som parameter i URL'en når jeg vil lave en backup. Det vil altså sige at jeg tilføjer noget alá det følgende i min index.php:

Fold kodeboks ind/udPHP kode 


På den måde skal du blot sørge for at det kun er dig selv der har adgang til denne side.

Til den anden del: ja, reelt set kan du sørge for at besøge siden selv hver dag, men det ved vi jo godt allesammen at man ikke gør. Man kunne selvfølgeligt vælge at sætte siden som sin startside, men på den anden side kunne man på den måde risikere at få en hel masse backups i løbet af dagen.

I stedet har jeg valgt at bruge et cronjob. Nogle webhoteller tilbyder cronjobs til deres kunder og andre gør ikke. Så vidt jeg ved, tilbyder Surfotwn ikke cronjob, og jeg måtte derfor ty til en gammel ven i stedet for: www.cronjob.de.

Det er godt nok en tysk side, og mit tysk er ganske elendigt, men med lidt hjælp fra Google Translate er det absolut intet problem at finde ud af.

Man sætter blot et cronjob op inde på siden, angiver hvor ofte man vil have det hvorefter man lige skal lave noget godkendelse af ens server ved at uploade en lille HTML fil.

Jeg har sat min egen backup til at køre hver dag kl. 00.01, og får derfor hver morgen når jeg tænder min computer besked om at 4 nye filer er blevet tilføjet til Dropbox - det hele kører bare som det skal.

Opsamling


Til slut kan vi altså konkludere at det ikke behøver være et kæmpe problem at få taget backup af sine databaser. Jeg kender en del udviklere der aldrig har taget backup af deres databaser tidligere fordi de manuelt skulle ind i phpMyAdmin kontrolpanelet for at eksportere deres .sql filer.
Med min klasse til at klare jobbet, slipper man for det problem, og kan blot læne sig tilbage og kigge på at serveren i samarbejde med et cronjob og Dropbox klarer det hele for dig.

Jeg har samlet hele koden herunder inklusiv dokumentation og copyright notits i toppen af koden:
Fold kodeboks ind/udPHP kode 


Jeg ved godt det ikke plejer at være et problem blandt udviklere, men jeg spørger jeg så inderligt om I ikke vil sætte pris på mit arbejde, og lade min notits i toppen forblive intakt når I bruger koden.

Koden er naturligvis til fri afbenyttelse, men jeg ville da blive slemt ked af det hvis nogle af jer kunne finde på at sælge den uden først at tage kontakt til mig.

Hvis nogle af jer har forslag til forbedringer/ændringer eller anden feedback, skal i være hjertelige velkomne til at smide en kommentar herunder, hvorefter jeg måske vil gennemgå de tilføjede ændringer på min blog (www.simon-smith.dk).

Vedhæftede filer:


<< < 123 > >>

Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (3)

User
Bruger #16454 @ 31.05.11 00:35
jeg kan godt lide at din fil dropboxuploader.php er noget du har kopiret fra nettet, men pis på det, rigtig nice artikel og jeg vil til at bruge den nu.:D

men pas på du kommer til at døje med mig hvis den ikke virker ;)

kom endelig med flere artikler:P
User
Bruger #8773 @ 31.05.11 08:58
Jeg tænkte at der ingen grund var til at lave sin egen Dropbox Uploader klasse, når Dropbox allerede havde været så venlige at stille en til rådighed :-)
User
Bruger #5097 @ 23.08.11 00:39
Super fedt. Men til lidt mere større projekter, hvor der haves adgang til serveren, havde jeg måske en forestilling om at det vil være smartere at benytte noget SSH-baseret backup såsom rsync. Men kan selvfølgelig godt se det fede i at have mindre projekter på sin dropbox
Du skal være logget ind for at skrive en kommentar.
t