Geautomatiseerde back-up van je CMS

De installatie van het CMS is succesvol geweest. De ontwikkeling is voorspoedig gegaan. Bijna klaar voor productie. Maar wacht: heb je de backups geregeld?

Wat back-uppen?

Voor de meeste CMS-en geldt dat je, om zeker te zijn, zowel het volledige file system als de database(s) moet back-uppen. In verreweg de meeste gevallen zal de database dagelijks wijzigen; dat is niet altijd het geval voor het file system.

Hoe back-uppen?

Je kunt databases volledig back-uppen of incrementeel back-uppen. Een incrementele back-up houdt alleen de wijzigingen bij ten opzichte van een eerdere backup. De meest eenvoudige strategie gaat uit van een regelmatige full back-up. Bij een eventuele herstelactie dient dan die back-up teruggezet te worden. Bij een herstelactie onder een incrementele strategie heb je zowel de meest recente full back-up als de incrementele backup nodig.

De incrementele back-up strategie heeft als voordeel dat de totale omvang van de back-up bestanden kleiner is. Wanneer opslagcapaciteit geen probleem is (de databases zijn relatief klein) dan volstaat een frequente, bijvoorbeeld nachtelijkse, full back-up. 

Waar naartoe back-uppen?

Tijdens de back-up worden bestanden aangemaakt in het bestandssysteem van de server. Zorg ervoor dat die daar niet blijven staan. Een simpele crash van de harde schijf van je server stelt dan zowel je productie-omgeving als je back-ups buiten werking. Zorg dat je back-up (in toenemende volgorde van veiligheid) op een andere harde schijf, op een andere machine, in een ander datacentrum, wordt opgeslagen.

Een voorbeeld

We gaan uit van een Windows server met SQL Server als database systeem. We beginnen met het inregelen van de back-up van de databases. 

Maak in SQL Server een stored procedure aan in de master database die alle databases back-upt naar een specifieke map, die als parameter wordt doorgegeven aan de stored procedure. Zorg ervoor dat die procedure eveneens een parameter kent waarmee je kunt aangeven of het gaat om full back-up of incrementele back-up.

Een voorbeeld van een dergelijke stored procedure vind je op de Microsoft site

Maak vervolgens een batch file aan die deze stored procedure kan aanroepen, bijvoorbeeld zo:

sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_backupdatabases @backuplocation='D:\Backups\', @backuptype='F'"

Door deze batch file uit te voeren wordt dan van alle databases een full back-up gemaakt en geplaatst in de opgegeven map.

Dit willen we vanzelfsprekend als terugkerende taak door Windows laten uitvoeren via de Task Scheduler. Zorg ervoor dat je de taak niet op het hoogste niveau aanmaakt maar in een (eventueel aan te maken) map.

Maak eventueel een specifieke back-up user op de server aan om te zorgen dat deze taak met de juiste rechten wordt uitgevoerd.

Het tijdstip, waarvoor je de back-up instelt, moet je strategisch kiezen. Bijvoorbeeld 2 uur 's nachts - Google Analytics kan je prima vertellen wanneer het beste moment valt voor de back-up van jouw omgeving.

Regel vervolgens in dat de back-ups verplaatst worden naar een andere locatie.

Mooi; elke nacht een back-up. Maar hoe zorg ik ervoor dat de harde schijf, waar ik naartoe back-up, niet volloopt? Dat kun je bijvoorbeeld in dezelfde batch file doen waarmee je de stored procedure aftrapt. Gebruik bijvoorbeeld forfiles:

forfiles /P "D:\Backups" /S /M *.BAK /D -14 /C "cmd /c del @PATH

Deze standaard - en toch voor velen onbekende - Windows functie selecteert alle bestanden in een bepaald pad, die voldoen aan bepaalde criteria, en voert daar een actie op uit. Bovenstaande opdracht verwijdert uit de map D:\Backups alle *.BAK bestanden, die ouder zijn dan 14 dagen (last modified eigenschap).