Varmuuskopiointi käyttäen tiedostojärjestelmän ominaisuuksia

Varmuuskopiointi mielletään usein hankalana asiana, vaikka todellisuudessa hankalaksi se tulee vain koska siitä tehdään hankalaa. Oraclen Solaris-käyttöjärjestelmän käyttämässä ZFS-tiedostojärjestelmässä on useita erinomaisia ominaisuuksia ja yksi niistä on snapshotit, joita voidaan käyttää varmuuskopiointiin. Linuxin käyttämällä LVM:llä, eli loogisilla volyymeillä voidaan hoitaa myös varmuuskopiointi helposti.

Tuotantoympäristöissä usein ongelmaksi muodostuu tilanne jossa useat prosessit käyttävät tiedostoja ja samaan aikaan niistä yritetään ottaa varmuuskopiota. Tämä johtaa siihen että tiedostosta otettu varmuuskopio joko on puutteellinen tai siitä ei voida palauttaa toimivaa versiota, tätä varten on kuitenkin keinot jolla tiedostoista pystytään ottamaan varmuuskopio joka on ehyt.

Ehyt varmuuskopio käyttäen luku-tilaa

Tiedostojärjestelmästä voidaan ottaa ehyt ja toimiva varmuuskopio, kunhan se ensin muutetaan luku-tilaan, joka estää kirjoitukset, ja näin kaikki muutokset jotka saattaisivat sotkea varmusukopion ottamista.

jpj@x1:~$ sudo umount /home
jpj@x1:~$ sudo mount -o ro /home
jpj@x1:~$ sudo tar -cvf /dev/st0 /home
jpj@x1:~$ sudo umount /home
jpj@x1:~$ sudo mount -o rw /home

 

Tämä aiheuttaa kuitenkin ongelmia. Koska tiedostojärjestelmään ei voida kirjoittaa, aiheuttaa se usein katkon palveluille jotka käyttävät tietoa tiedostojärjestelmästä. Jos esimerkiksi haluat ottaa varmuuskopion tietokantapalvelimesta, on tietokantapalvelut suljettavat varmuuskopion ajaksi (Tämä ei tietysti koske työkaluja joilla voidaan ottaa suoraan tietokannasta lennossa varmuuskopio. Tässä tarkoitetaan yleisesti varmuuskopion ottamista, ei pelkästään tietokantoja).

Linuxin loogiset volyymit apuna varmuuskopioinnissa

Linuxin LVM tarjoaa erinomaiset työkalut varmuuskopiointiin, mutta näiden edellytyksenä on luonnollisesti se että tiedostojärjestelmä on tehty käyttäen LVM:ää, tosin nykyisin valtaosa Linux-distribuutioista ottaa asennuksessa lvm:n käyttöön. Käytämme tässä ratkaisussa hyväksemme LVM:n volyymiä jonka tyyppi on snapshot. Tämän erikoislaatuisen volyymin sisältö on täysin sama kuin volyymin sisältö sen ottoajankohtana, ts. kun snapshot-volyymi luodaan sen sisällöstä tulee täysin identtinen. Tämän tarjoama hyöty on siinä, että kun snapshot on otettu voidaan siitä ottaa varmuuskopio ilman pelkoa tiedostojen sisällön muuttumisesta varmuuskopioinnin aikana. Jos tätä tekniikkaa käytetään esimerkiksi tietokanta-volyymin varmuuskopioinnissa tietokannan ei tarvitse olla suljettuna itse varmuuskopioinnin aikana.

Ensin luodaan snapshot-volyymi ja sille määritellään riittävän iso koko:

jpj@x1:~$ sudo lvcreate -L1G -s -n dbbackup /dev/datavg/datalv
  Logical volume "dbbackup" created

 

Tämän jälkeen itse snapshot-volyymi otetaan käyttöön ja ajetaan itse varmuuskopiointi:

jpj@x1:~$ sudo mkdir /mnt/dbbackup
jpj@x1:~$ sudo mount /dev/datavg/dbbackup /mnt/dbbackup
jpj@x1:~$ sudo tar -cf /dev/st0 /mnt/dbbackup

 

Lopuksi kun itse varmuuskopiointi on saatu tehtyä poistetaan snapshot käytöstä:

jpj@x1:~$ sudo umount /mnt/dbbackup
jpj@x1:~$ sudo lvremove /dev/datavg/databases
Do you really want to remove active logical volume dbbackup? [y/n]: y
  Logical volume "dbbackup" successfully removed

 

LVM:n snapshottien käyttäminen MySQL-tietokannan varmuuskopiointiin

Aluksi itse tietokanta laitetaan snapshotin oton ajaksi luku-tilaan:

jpj@x1:~$ sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 610
Server version: 5.1.41-3ubuntu12.8 (Ubuntu)

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> flush tables with read lock;
mysql> flush logs;
mysql> quit

 

Kun tietokanta on asetettu luku-tilaan otetaan itse snapshot ja vapautetaan tietokanta lukutilasta, tärkeää on luoda riittävän iso snapshot-volyymi (koko rippuu itse tietokantavolyymin koosta, esimerkissä käytän 5G:n volyymia). Koska Linux ottaa LVM:stä snapshotin varsin nopeasti on itse katko varsin lyhyt.

jpj@x1:~$ sudo lvcreate -L5G -s -n backup /dev/dbvg/dblv
  Logical volume "backup" created
jpj@x1:~$ sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 610
Server version: 5.1.41-3ubuntu12.8 (Ubuntu)

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> unlock tables;
mysql> quit

 

Lopuksi otetaan varmuuskopio ja poistetaan snapshot käytöstä.

jpj@x1:~$ sudo mount -o ro /dev/dbvg/backup /mnt/mysqlbackup
jpj@x1:~$ sudo tar czvf mysql.$(date +"%m-%d%-%Y).tar.gz /mnt/mysqlbackup/*
jpj@x1:~$ sudo umount /mnt/tmp
jpj@x1:~$ sudo lvremove -f /dev/dbvg/backup

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s