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?