DreamHost backups met Rsync

 Gepubliceerd door om 14:18  Internet
mrt 092008
 
RSync - Klik voor grotere versie

Ik heb veel data op de servers van Dreamhost staan. Screencasts, Podcasts, afbeeldingen, andere bestanden. Op het moment ongeveer 14GB in totaal en nog eens zo’n 200MB in MySQL databases. Voor een aantal verschillende domeinen en sites. Niet handig als die verloren zouden gaan.
Daarom heb ik een lokale kopie van de mappenstructuur zoals ik die hier op de server heb. Elke nacht wordt die lokale structuur automatisch bijgewerkt.
Eigenlijk een beetje onlogisch: elk bestand dat ik overdag upload naar de server wordt ’s nachts weer gedownload.
Toch bleek het de handigste manier. Ik heb een tijdje incremental tars gebruikt, maar omdat ik hier thuis geen Linux machine heb (had, ik had toen de Synology nog niet) bleek het uitpakken daarvan niet goed te gaan.

Dus dat voldeed niet en ik ging op zoek naar een andere optie die wél onder Windows zou werken. Ik gebruik er zelf een Windows 2000 machine voor, maar je zou het ook op een XP computer kunnen laten werken.

Waarschuwing vooraf: dit is een instructie die tamelijk technisch is en behalve Dreamhost ken ik geen andere hosting provider waarbij dit zo werkt. Ik kan geen maatwerk leveren als het gaat om ondersteuning bij de setup. Het zijn instructies die uitleggen hoe het werkte in mijn situatie. Voorbereiding
Windows wordt niet standaard met RSync geleverd, maar je kunt hier een gratis exemplaar van cwRsync (je hebt niet de Server nodig, gewoon de bovenste van de twee) downloaden.

Pak de ZIP uit en draai de installer. Ik ga er vanuit dat je alles laat installeren naar C:\Program Files\cwRsync

Dreamhost Wiki
De Dreamhost Wiki beschrijft eigenlijk alles wat je moet doen, je moet het alleen even weten te vinden.

#1 Inloggen zonder wachtwoord
Omdat we RSync via een batch-programma willen laten werken en we niet het password voor het Dreamhost account in leesbare tekst willen opslaan moeten we er voor zorgen dat RSync verbinding kan maken zonder het wachtwoord in te voeren.
Dit staat uitgelegd op deze pagina. We gaan nu echter het Linux deel van de uitleg onder Windows gebruiken (met dank aan cwRsync).
We zullen de stappen bijna exact volgen met een paar kleine verschillen.

Zorg dat je eerst cwRsync geïnstalleerd hebt.
Open een DOS-window en ga naar C:\Program Files\cwRsync\bin
Type in: ssh-keygen -t rsa
Druk steeds op ENTER om de voorgestelde antwoorden op de vragen te accepteren.

Nu moet je op zoek naar de aangemaakte bestanden. Omdat ik als Administrator ingelogd was stonden ze in: C:\Documents and Settings\Administrator\.ssh

De tweede stap kun je niet zondermeer nadoen. De cwRsync set bevat geen SCP. Je kunt een versie voor Windows hier downloaden.
Ik heb zelf gewoon gebruik gemaakt van FileZilla (FTP-programma) omdat ik daarmee toch al een veilige verbinding met Dreamhost had via SFTP over SSH2.
Je moet er voor zorgen dat het bestand “id_rsa.pub” in de root van je account bij Dreamhost terecht komt. Stel dat je Dreamhost gebruikersnaam “jantje32” is, dan is dat “/home/.highjump/jantje32/” of gewoon “/” afhankelijk van hoe je via FTP verbinding maakt (secure of niet). Het is de map waar je de mappen van je domeinen ziet.

Als het bestand er staat, dan kun je de vervolgstappen weer volgen zoals op de Wikipagina beschreven.
Vanaf de DOS-prompt (in C:\Program Files\cwRsync\bin) type je in: ssh user@example.com
Hier gebruik je uiteraard in plaats van user@example.com je Dreamhost username en de server waar je bij dreamhost op zit, dus bijvoorbeeld ssh jantje32@diamant.dreamhost.com
Log in met je Dreamhost wachtwoord.

De volgende commando’s worden op de Dreamhost server uitgevoerd:

Als dit de eerste keer is dat je dit doet, zal de map .ssh nog niet bestaan op de Dreamhost server, die zul je dan moeten aanmaken: mkdir .ssh
Als de map er al is, hoeft dat niet.
Nu kun je het bestand id_rsa.pub dat je naar de server gekopieerd hebt toevoegen aan eventueel beschikbare sleutels (N.B. dat bestand bestaat alleen als de vorige stap overbodig was, maar de opdracht werkt altijd) via cat id_rsa.pub >> .ssh/authorized_keys
Nou kun je het bestand dat je geüpload hebt verwijderen met rm id_rsa.pub (je hebt het immers toegevoegd aan authorized_keys).

Type nu exit om de SSH-verbinding weer te verbreken.
De volgende keer als je ssh jantje32@diamant.dreamhost.com intypt zul je niet meer je wachtwoord in te hoeven voeren. Je kunt dat voor de zekerheid controleren, dan weet je of deze stap goed verlopen is.

#2 RSync Backup
Nu je een veilige verbinding op kunt zetten zonder steeds te hoeven inloggen kun je de RSync verbinding laten werken. RSync wordt op deze wiki-pagina uitgelegd.

Ik heb meerdere domeinen op de server draaien die allemaal hun eigen hoofdmap hebben. Ik wil echter niet voor elke map een ingewikkelde commandoregel opstarten. Dus heb ik een wat ingewikkelder Batch-bestand gemaakt.

Open een teksteditor en voer de volgende tekst in:
Windows RSync - Klik voor grotere versie SET List=<map1>,<map2>,<map3>,<map4>
C:
CD \Program Files\cwRsync\bin
FOR %%f IN (%List%) DO rsync -av –delete <user>@<server>.dreamhost.com:%%f /cygdrive/h/Dreamhost_Rsync_Backup/

Je zult een paar dingen moeten aanpassen: in plaats van <map1>,<map2>,<map3>,<map4> voer je een lijst in met mappen die je wilt backuppen. Als je alleen de map mijndomein.com wilt backuppen dan wordt het:
SET List=mijndomein.com
Wil je zowel mijndomein.com als domein2.com als domeintje4.com backuppen, dan wordt het:
SET List=mijndomein.com,domein2.com,domeintje4.com
Let op het ontbreken van extra spaties bij de komma’s!

In plaats van <user>@<server>.dreamhost.com vul je weer je eigen data in, dus bijvoorbeeld jantje32@diamant.dreamhost.com

Let ook goed op het juiste aantal % tekens in de code.

Ook /cygdrive/h/Dreamhost_Rsync_Backup/ verdiend wat uitleg. De backup wordt gemaakt naar een map op de H-schijf van de computer (H:\Dreamhost_Rsync_Backup om precies te zijn). De : valt weg, alle \ worden / en vooraan staat /cygdrive/.

Sla het bestand op als een Batch bestand, bijvoorbeeld rsync_dreamhost.bat.

Je kunt het bestand waarschijnlijk het beste eerste testen met één map. De eerste keer dat het uitgevoerd wordt zal het namelijk alle bestanden in de map (en submappen) downloaden van de server. Elke keer daarna zal het alleen nieuwe of gewijzigde bestanden downloaden en op de server verwijderde bestanden ook uit de lokale kopie verwijderen.
Als het batch bestand werkt voor één map, kun je probleemloos de andere mappen toevoegen.

#3 Automatisch uitvoeren
Als het batchbestand werkt, dan is het tijd om er voor te zorgen dat de computer dit elke nacht automatisch uitvoerd.
Daarvoor gebruiken we de in Windows ingebouwde scheduler. Bij Windows 2000 vind je hem via Start > Programs > Accesories > System Tools > Scheduled Tasks. Bij Windows XP via Start > Programma’s > Bureau-Accesoires > Systeemwerkset > Geplande taken.

Scheduler - Klik voor grotere versie Windows Scheduler - Klik voor grotere versie

Voeg een verwijzing naar het aangemaakt Batch bestand toe en geef aan dat het elke nacht (ik heb gekozen voor 3 uur ’s ochtends) uitgevoerd wordt.

En klaar ben je. Je hoeft er nu alleen maar voor te zorgen dat de computer ’s nachts aan blijft staan en je hebt altijd een recente kopie van de mappen en bestanden op de Dreamhost server.

#4 MySQL backuppen
De voorgaande drie stappen zorgen er voor dat je altijd een backup van bestanden en mappen hebt, maar zeker bij een weblog is de inhoud van de MySQL database die gebruikt wordt ook heel belangrijk.
Daar moeten we een paar extra stappen voor uitvoeren. Let op! We maken gebruik van de RSync functionaliteit, dus de voorgaande drie stappen zul je al uitgevoerd moeten hebben voordat je hier aan begint!

#4a Backuppen database op de Dreamhost server
Het maken van een backup van een MySQL database gaat het beste door er een “dump” van te maken. Je hebt dan een tekstbestand met daarin de benodigde SQL regels om de database en inhoud ergens andere te importeren.

Bij MySQL kan dat gelukkig in één regel. Maar omdat ik ook bij Dreamhost meerdere databases heb, is een wat geavanceerder script wel handig.
Het script maken doen we gewoon lokaal, uitvoeren gebeurt op de Dreamhost server.

Start je teksteditor op en voer de volgende tekst in:
MySQL Shell script - Klik voor grotere versie #!/bin/bash
cd /home//backups/
suffix=$(date +%y%m%d)
databases=(“<database1>”)

mkdir mysql
for database in ${databases[@]}
do
mysqldump –opt -u<user> -p<wachtwoord> -h mysql.<domain>.com ${database} > mysql/${database}.$suffix.sql
tar zcf mysql_backup/mysql_backup.${database}.$suffix.tar.gz mysql/${database}.$suffix.sql
done
rm -r mysql/

Ik ben er even vanuit gegaan dat je een MySQL gebruiker hebt die rechten heeft op alle databases.
De databases die je wilt dumpen neem je op in “<database1>”
Wil je de datbases database1 en database2 backuppen, dan wordt het:
databases=(“database1” “database2”)
Let op de extra “” ten opzichte van het vorige script en het ontbreken van komma’s!

Sla het bestand op als (bijvoorbeeld) “mysql.sh”

Vervang <user&gt, <wachtwoord> en <domain> voor de waarden die in jouw geval van toepassing zijn. Als je meerdere URL’s aangemaakt hebt voor de databases dan maakt dat niet uit, elke URL werkt voor alle databases.

Maak op de server onder het rootniveau (de plek waar je eerder .ssh hebt aangemaakt) een map genaamd “backups”.
Plaats in die map het bestand “mysql.sh” dat je gemaakt hebt (uploaden via FTP).
Maak in die map een submap getiteld “mysql_backup”. Hierin komen na uitvoeren van het script de dumps te staan van de MySQL database.
Die dumps zijn ge-gzipt. Dat lijkt een beetje op een gewoon ZIP-bestand, maar Windows XP zal niet in staat zijn ze te openen. Dat kun je doen met de gratis tool 7-ZIP. Het resultaat is dan een SQL bestand dat je weer terug kunt importeren in MySQL mocht dat nodig zijn.

Helaas is het dus niet eenvoudig mogelijk slechts de wijzigingen van een individuele dag te backuppen, maar omdat de databases meestal niet enorm groot zijn is dat niet echt een probleem.

#4b Automatisch laten uitvoeren van Database Backup op de server
Bij Windows maakten we gebruik van “Geplande Taken”, op een Linux server heb je Cronjobs. Bij Dreamhost hebben ze het gemakkelijk gemaakt, door daar een browserinterface voor te maken.
Ga naar je Dreamhost Web Panel. Kies Goodies > Cron Jobs.
Klik op “Add A New Cron Job” om een nieuwe opdracht toe te voegen.
Dreamhost Cronjob - Klik voor grotere versie Selecteer de gebruiker die de Cron Job uitvoerd. Ik gebruik daar dezelfde gebruiker voor als bij RSync (dus Jantje32)
Geef de Cron Job een titel, bijvoorbeeld “MySQL backup”
Het veld Email Output laat je leeg
Vul het pad naar het mysql.sh bestand in dat je op de server gezet hebt, als je de stappen hierboven gevolgd hebt is dat /home/Jantje32/backups/mysql.sh
Let op het gebruik van hoofdletters!

Laat het vinkje staan bij “Use Locking”
Selecteer bij “When to Run:” de optie “Daily”.
Als je niet dagelijks een backup wilt laten maken van je databases dan kan dan ook, kies dan bijvoorbeeld “Weekly” of “Custom”.

Afhankelijk van je keuze wordt nu dagelijks of wekelijks automatisch een nieuwe gzip met een dump van je database(s) gemaakt in /home/Jantje32/backups/mysql_backup. Er wordt een nieuwe gzip gemaakt voor elke database en de gzip heeft de naam van de database + de datum van het aanmaken van de gzip.

Nu moeten we er nog voor zorgen dat die gzips ook gedownload worden van de server zodat wij een lokale backup hebben.

#4c RSync + MySQL backup
De laatste stap is eenvoudig: je hoeft nu slechts de “backups” map toe te voegen aan de lijst te backuppen mappen in je rsync_dreamhost.bat script. Dan wordt hij automatisch meegenomen in de nachtelijke downloads.

Ik had eerst een apart FTP script lopen dat de kopie op de server bij Dreamhost automatisch verwijderde nadat de download uitgevoerd was, maar dit is net zo simpel. Van tijd tot tijd gooi ik de kopieën die bij Dreamhost staan en die ik niet meer hoef te bewaren weg en dan worden ze lokaal ook weggegooid. Gezien de omvang van de opslag bij Dreamhost lig ik daar niet wakker van.

Klaar
En dat was het. Nu wordt elke nacht een backup gemaakt van je MySQL databases en die backup + alle mappen waar jij dat van wilt worden automatisch op je lokale harde schijf gezet.

Een paar dingen om in de gaten te houden:
* Middernacht op de dreamhost server is 9 uur ’s ochtends in Nederland. Dus de eerste nacht zal er nog geen MySQL backup mee komen.
* Het kan geen kwaad de backup de eerste paar dagen (en ook daarna) een beetje in de gaten te houden. Heeft hij gelopen? Zijn recent toegevoegde bestanden aanwezig etc.
Hou er rekening mee dat je gebruik maakt van 1 scheduler bij Windows + 1 scheduler op Linux + 9.000km Internet ertussen.

Met de Synology zou dit net zo gemakkelijk moeten kunnen, alleen dan zonder de noodzaak om cwRsync te installeren, als het goed is is rsync daar namelijk al aanwezig.
Ik ben er echter nog niet aan toegekomen om de backupprocedure om te zetten. Tja, dat krijg je als iets al werkt. De Windows 2000 machine voert nog een paar andere taken uit en kan toch nog niet uit. De H-schijf waar ik nu naar backup is de externe USB-schijf die aan de Synology hangt, dus last van ruimtegebrek heb ik ook nog niet direct.

Deel dit bericht:

  6 reacties aan “DreamHost backups met Rsync”

Reacties (6)
  1. Een mooie uitleg, maar security-wise is die SSH oplossing net zo lek als een bestandje met het wachtwoord erin. Als ik de inhoud van jouw C:\Documents and Settings\Administrator\.ssh te pakken heb, kan ik eenvoudigweg inloggen op jouw Dreamhost account.

    Wat op zich niet erg is, zolang je maar weet waar je je tegen wilt beveiligen. Deze oplossing is prima als je bang bent voor onverlaten die je internetverbinding afluisteren. Maar verwacht je dat iemand je laptop gaat stelen of via een Trojan de harde schijf leeg zal halen om zo op je Dreamhost account te komen, dan ben je kwetsbaar.

    Arnoud

  2. Klopt. In dit geval is het zo dat áls jij aan mijn C:\Documents and Settings\Administrators\.ssh kunt komen om dat bestand daar weg te halen ik toch al een heel wat ernstiger probleem heb.
    Maar als je laptop met firewire poort doelwit wordt, dan heb je waarschijnlijk al sneller een probleem, maar ook dan, niet alleen met SSH.

  3. Maar daarom dus de vraag, waarom koos je voor ssh in plaats van een plat tekstbestandje met het wachtwoord in C:\Documents and Settings\Administrators\.ssh ?

  4. Omdat ik met SSH een versleutelde verbinding op kan zetten en omdat het de default geadviseerde manier was om de verbinding tot stand te brengen?

  5. Pfew dat is technisch. Maar mooi dat het werkt! Ik ben benieuwd hoe je dat nu van dreamhost naar diskstation doet. Als ik rsync bekijk op de diskstation dan is dat een app die van diskstation naar dreamhost backupped, maar kan dat ook andersom?
    Dus van mijn blogs + mysql databases een automatische backup laten maken op de diskstation.

  6. Op dit moment heb ik een share op de Diskstation aangemaakt die ik op de Windows 2000 machine gebruik (dat is daar de H-schijf) om naar toe te backuppen.

    De Synology biedt een compacte interface voor RSync. Maar je kunt een mod installeren waarmee je naar de Synology kunt telnetten (zoals je dat naar Dreamhost ook kunt doen). Ik ga er even vanuit dat ik dat de volledige set functionaliteit van RSync kan gebruiken.
    Maar dat zal dus niet minder technisch worden dan de huidige beschrijving in deze blogpost.

Sorry, het reactieformulier is momenteel gesloten.