Hopp til innholdet

cjohansen.no

Serverbackup

Enhver server som foretar seg noe interessant vil med stor sannsynlighet ha behov for backup av data. Databasen skal backes opp, alle filene, og diverse andre tjenester. Her er mitt oppsett.

Server-oppsett

Oppsettet jeg viser backup for i dette innlegget er en Debian-basert server som kjører OpenVZ for virtualisering. Det kjøres flere virtuelle maskiner som har hvert sitt ansvarsområde; en database-server, en Subversion-server og opptil flere webservere.

Lignende oppsett for backup kan helt problemfritt benyttes selvom du kjører flere av disse fra samme maskin. Typisk er det relativt vanlig å ha database- og webserver på samme maskin dersom man for eksempel ikke har råd til flere maskiner, og heller ikke kjører virtualisering.

Database

Som databaseserver kjører jeg som mange andre MySQL. MySQL har sin egen mysqldump, som du kan gjøre mye fornuftig med. Den enkleste varianten er rett og slett

$ mysqldump -uroot -p**** -r /backup/mysql/dump.sql --all-databases

Problemet med denne dumpen er at det er forferdelig upraktisk å gjenopprette enkeltvise databaser fra den. Med mindre klipp og lim frister er det bedre måter.

automysqlbackup

automysqlbackup er:

A script to take daily, weekly and monthly backups of your MySQL databases using mysqldump.

Scriptet er enkelt å konfigurere, og det tar backup av alle databasene dine i hver sin fil. Filene komprimeres med eksempelvis gzip. Scriptet er også bygget for å ha roterende backups slik at dersom du kjører det i en cronjobb så vil det automagisk holde daglige, ukentlige og månedlige backups.

Min backup:

# ls -l /backup/mysql/
drwxr-xr-x 29 root root      4096 Jan  2 13:01 daily
drwxr-xr-x  2 root root      4096 Jan 14 22:00 latest
drwxr-xr-x 28 root root      4096 Jan  1 00:00 monthly
drwxr-xr-x 29 root root      4096 Jan  2 13:01 weekly

I latest har du enkel tilgang til siste backup. Hver av disse mappene inneholder samme struktur, og gir deg en enkel måte å la databasene dine reise i tid.

Installasjon

Installasjon er smertefritt: last ned scriptet (det er bare én fil), og legg det i eksempelvis /usr/sbin/automysqlbackup

Konfigurasjon

Konfigurasjonen er på toppen av filen og er tilsvarende enkel:

USERNAME=root
PASSWORD=password
DBHOST=localhost
DBNAMES="all"
BACKUPDIR="/backup/mysql"

# What would you like to be mailed to you? (log, files, stdout, quiet)
MAILCONTENT="stdout"
MAXATTSIZE="4000"
MAILADDR="dinepost@eksempel.no"

MDBNAMES="mysql $DBNAMES"
DBEXCLUDE=""
CREATE_DATABASE=yes
SEPDIR=yes
DOWEEKLY=6
COMP=gzip
COMMCOMP=no
LATEST=yes
MAX_ALLOWED_PACKET=
SOCKET=
#PREBACKUP="/etc/mysql-backup-pre"
#POSTBACKUP="/etc/mysql-backup-post"

Filen inneholder langt mer kommentarer enn det som er vist her, og er lettforståelig. Siste du trenger å gjøre er å sette dette opp i en cronjob som kjører så ofte som du føler det er nødvendig. En gang hver time funker bra for meg: $ sudo crontab -e

00 * * * * /usr/sbin/automysqlbackup > /var/log/cron.log

Hvor ofte du kjører denne avhenger av hvor mye data som går ut og inn av databasen, og hvor kritisk et datatap på en time, dag eller uke er.

Subversion

Subversion er smertefri å ta backup av. Ikke bare det, men skal du flytte et repository (eller uhellet har vært ute), så er det enkelt å gjenopprette et repository fra backupen også.

Som rot kjører du:

/usr/bin/svnadmin dump /home/svn/dittrepos > /home/svn/backup/dumpfile

Dette kan så kjøres i en cronjob så ofte du behøver. Igjen, dette avhenger av dataflyt og hvor kritisk data som lagres.

Filsystemet

Database og Subversion er vel og bra å få backet opp, men filsystemet inneholder minst like mange gullperler. Det er et utall måter å ta backup av et filsystem på, og jeg viser én av disse.

Jeg har vært gjennom diverse varianter, blant annet et script jeg selv skrev som baserte seg på denne artikkelen, som gjør backup med rsync og hardlinks. Min variant var skrevet i Python, og var noe mer generisk enn det som presenteres i artikkelen.

rsnapshot

Noen andre baserte seg på samme artikkel og laget et script som var enda mer generisk og hadde bedre ytelse: rsnapshot.

Installasjon

Installasjon under Debian/Ubuntu er som det ofte er; simpelt. sudo apt-get install. For andre operativsystemer, se nedlastingssiden til rsnapshot .

Konfigurasjon

Konfigurasjon er ganske rett frem. Før du setter igang konfigureringen er det greit å vite hvordan rsnapshot lager backups.

Du kan lage flere backup-oppsett. Siden rsnapshot bruker rsync er det fullt mulig å ta backup enten fra eller til en annen maskin. Dette betyr at du kan sette opp rsnapshot på én dedikert backup-maskin, og dermed ta backup av et utall andre maskiner.

Konfigurasjonen finner du sannsynligvis under /etc/rsnapshot.conf. Det er to ting å konfigurere: backupintervaller og backup-punkter.

Et backupintervall kan være hva som helst. Et intervall har et navn, og du forteller rsnapshot hvor mange versjoner av intervallet du ønsker å ha liggende. Intervallet backupes opp med en cronjobb så ofte som du ønsker.

interval        hourly  12
interval        daily   7
interval        weekly  4
interval        monthly 6

Et slikt oppsett vil sørge for at det til enhver tid finnes 29 (potensielt) forskjellige backup-versjoner. Siden rsnapshot er veldig smart med hardlinks er plass-overheaden ikke veldig stor. Backup under merkelappen (les: directory) "daily" vil eksistere i 12 versjoner. Merk at "daily", "weekly" osv kun er navn, og gjør ikke at det tas daglig og ukentlig backup. Det er det cronjobber som gjør:

00 02 * * * /usr/bin/rsnapshot daily > /var/log/cron.log

Denne cronjobben kjører backup mot "daily"-intervallet en gang hver natt. Kombinert med konfigurasjonen over vil dette gi 12 timebackups som rullerer slik at du til enhver tid kan rulle tilbake til hver av de 12 foregående timene. Med tilsvarende cronjobber for de andre intervallene får du også 7 daglige, 4 ukentlige og 6 månedlige backups.

Neste ut er backup-punktene, altså hvilke områder av maskinen (eller eksterne maskiner) som skal backes opp. Et eksempel:

backup  /home/christian     localhost/
backup  /var/www  localhost/

Vilkårlig mange slike punkter kan settes opp for å ta backup av filsystemet på den lokale maskinen og andre eksterne maskiner. For optimal ytelse i større miljøer kan jeg anbefale en dedikert backup-maskin som tar backup av andre maskiner som har viktigere ting å bruke prosessoren sin på enn rsync.

Hvilke verktøy bruker du til backup?

Muligens relatert

2006 - 2012 Christian Johansen Creative Commons Lisens