I lang tid har jeg levet mit liv lidt på kanten. Jeg har ikke taget backup af min blog!… Kun sådan en gang i mellem, og det er vel bare ikke holdbart.
Så endelig her forleden mens sanne så en eller anden film, gav jeg mig til at lave et Backup script.
Så nu laver jeg en dump af min database en gang i døgnet, komprimerer dumpet til en .tar-fil, der så sendes med SCP (Secure Copy) til en server der er lokaliseret langt langt væk på internettet. Og den server langt langt væk bliver der taget backup af 1 gang om ugen. Så altså er jeg sådan rimelig sikret. Aldrig 100% sikker, men jeg mener selv jeg er 99% sikker 🙂
Så min løsning er computerverdenens svar på et kondom! 😛
Og når man laver sådan noget så skal man jo dokumentere hvad man gør. Så har du brug for at finde ud af hvoran man tager backup af en WordPress (eller bare generelt en MySQL Database).
Mit setup er to servere der begge kører MacOS X. Den ene kalder vi klient.dk og den anden kalder vi server.dk
Godt. Det jeg starter med er at oprette en MySQL bruger på klient.dk. Du kan gøre det hvordan pokker du vil. Jeg valgte at bruge PHPMyAdmin. Brugeren bliver oprettet med password: SuPeRsEjTpAsSwOrD og så får brugeren rettigheder til Insert og Lock Table på den database der skal tages backup af. (I dette tilfælde “wp”). Nu fyrer jeg denne kommando af:
mysqldump -h localhost -u backup -pSuPeRsEjTpAsSwOrD -B wp -r backup.wp.sql
Dette vil lave et dump af databasen og gemme i filen backup.wp.sql. (Bemærkt for resten at der IKKE er mellemrum mellem -p og password. Det tog mig lidt tid at regne den ud).
Godt så… Nu skal filen så pakkes sammen. Stengt talt er det vel ikke nødvendigt, men nu når filen skal sendes over en forholdsvis langsom linje, så gør det vel ikke noget at minimere mængden af data.
Dette gør jeg med:
tar -czf backup.wp.klient.dk backup.wp.sql
Nu vil jeg gerne have flere versioner af min backup, så jeg kan genskabe data tilbage til en bestemt dato. I mine øjne er det letteste at navngive filerne med dato. Og i mine øjne gøres dette letteste med kommandoen date. Og nu er det jo et unix-system, så det kan jo næsten ikke være lettere end at skrive:
tar -czf backup.wp.klient.dk.`date “+%Y-%m-%d”`.tar backup.wp.sql
Tada! En fil med dato inkluderet i navnet.
Nu skal filen kopieres over på server.dk. Dette kan gøres på mange forskellige måder. Jeg valgte scp-måden.
scp backup.wp.klient.dk.`date “+%Y-%m-%d”`.tar username@server.dk:backup/
Du bliver bedt om password. Sådan.. Nu bliver filen kopieret fra klient.dk til server.dk
Nu er der et liiiille problem. Dette script vil ikke kunne køre selv, da det kræver at du taster password hver gang det afvikles. Se det er jo ikke smart hvis det var et script, der skulle køres som et Cron-job.
Men det er der selvfølgelig en løsning på. Løsningenen er her: Authorized Keys. Det går ud på at man laver en public og en private key. Og så kopierer man Public key over på server.dk Så kan de to servere selv finde ud af at identificere hinanden. Smart. Men hvordan laver man så de der Authorized Keys?
Du stiller dig i mappen .ssh (cd ~/.ssh) og skriver
ssh-keygen -t dsa
Nu genereres to filer: id_dsa og id_dsa.pub. Filen id_dsa.pub skal kopieres til server.dk og omdøbes til authorized_keys, og skal ligeledes placeres i mappen .ssh. Læs for resten det her link for at læse lidt mere detaljeret hvordan man gør.
Så skal jeg bare lige have klippet det hele sammen i en eksekverbar fil (chmod +x filnavn) og så have lavet et cronjob.
åben crontab med:
crontab -e
her skriver du så:
i (for insert mode)
01 00 * * * /sti/til/dit/script/backup.sh
Tryk på escape og (kolon)x
sådan… det skulle være det. Jeg har for lethedens skyld lige samlet scriptet til dig, så du kan se det hele i en sammenhæng. Det er her: Klik her
Faktisk et hjernedød simpelt script… Men sådan kan det gøres. Det virker i hvertfald for mig 🙂
Skriv et svar